Skip to content

Commit

Permalink
feat: support watson assistant sdk v2 (#154)
Browse files Browse the repository at this point in the history
  • Loading branch information
rfazeli authored Jun 30, 2023
1 parent c295e2e commit 0ec1075
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 27 deletions.
5 changes: 3 additions & 2 deletions notebook/Measure Notebook.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,8 @@
"source": [
"assistant_information = {'workspace_id' : '',\n",
" 'skill_id' : '',\n",
" 'assistant_id' : ''}"
" 'assistant_id' : '',\n",
" 'environment_id': ''}"
]
},
{
Expand All @@ -259,7 +260,7 @@
}
],
"source": [
"df_assistant = get_assistant_definition(sdk_v1_object, assistant_information, overwrite=False)\n",
"df_assistant = get_assistant_definition(sdk_v2_object, assistant_information, overwrite=False)\n",
"\n",
"if df_assistant is not None:\n",
" # Get all intents\n",
Expand Down
10 changes: 5 additions & 5 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
ipython
pandas==1.2.1
bokeh==2.0.0
tqdm==4.43.0
bokeh==3.2.0
tqdm==4.65.0
matplotlib==3.2.1
XlsxWriter==1.2.8
ibm-watson==5.1.0
numpy==1.25.0
requests==2.26
ibm-watson==7.0.0
numpy==1.23.5
requests==2.29.0
scikit-learn>=0.21.3
10 changes: 5 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@
packages=setuptools.find_packages('src'),
install_requires=[
'pandas==1.2.1',
'bokeh==2.0.0',
'tqdm==4.43.0',
'bokeh==3.2.0',
'tqdm==4.65.0',
'scikit-learn>=0.21.3',
'matplotlib==3.2.1',
'XlsxWriter==1.2.8',
'ibm-watson==5.1.0',
'numpy==1.25.0',
'requests==2.26'
'ibm-watson==7.0.0',
'numpy==1.23.5',
'requests==2.29.0'
],

zip_safe=False,
Expand Down
50 changes: 35 additions & 15 deletions src/assistant_improve_toolkit/watson_assistant_func.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import io
from string import punctuation

from ibm_watson import AssistantV1, AssistantV2

EN_PUNCTUATION = punctuation + '’'

Expand All @@ -47,20 +48,39 @@ def get_assistant_definition(sdk_object, assistant_info, project=None, overwrite
df_assistant = pd.json_normalize(data_json)
return df_assistant
else:
if len(workspace_id) > 0:
# Fetch the workspace definition
print('Loading workspace definition using workspace id: {}'.format(workspace_id))
assistant_definition = sdk_object.get_workspace(workspace_id=workspace_id, export=True,
include_audit=True).get_result()
elif len(skill_id) > 0:
# Fetch the skill definition
print('Loading skill definition using skill id: {}'.format(skill_id))
assistant_definition = sdk_object.get_workspace(workspace_id=skill_id, export=True,
include_audit=True).get_result()
if type(sdk_object) == AssistantV1:
if len(workspace_id) > 0:
# Fetch the workspace definition
print('Loading workspace definition using workspace id: {}'.format(workspace_id))
assistant_definition = sdk_object.get_workspace(workspace_id=workspace_id, export=True,
include_audit=True).get_result()
elif len(skill_id) > 0:
# Fetch the skill definition
print('Loading skill definition using skill id: {}'.format(skill_id))
assistant_definition = sdk_object.get_workspace(workspace_id=skill_id, export=True,
include_audit=True).get_result()
else:
print('Please provide a valid Workspace ID or Skill ID!')
assistant_definition = None
elif type(sdk_object) == AssistantV2:
if len(assistant_id) > 0:
print('Loading skill definition using assistant id: {}'.format(assistant_id))
assistant_definition = None
assistants = sdk_object.export_skills(assistant_id=assistant_id, include_audit=True).get_result()
for assistant in assistants["assistant_skills"]:
if assistant["type"] == "dialog":
assistant_definition = assistant["workspace"]

if assistant_definition is None:
print('Your assistant does not support dialog')
else:
print('Please provide a valid Assistant ID!')
assistant_definition = None
else:
print('Please provide a valid Workspace ID or Skill ID!')
print("Please provide a valid watson sdk object")
assistant_definition = None


if assistant_definition:
# Store the workspace details in a dataframe
df_assistant = pd.json_normalize(assistant_definition)
Expand Down Expand Up @@ -118,13 +138,13 @@ def _get_logs_from_v1_api(sdk_object, workspace_id, log_filter, num_logs):
return log_list


def _get_logs_from_v2_api(sdk_object, assistant_id, log_filter, num_logs):
def _get_logs_from_v2_api(sdk_object, environment_id, log_filter, num_logs):
log_list = list()
try:
current_cursor = None
while num_logs > 0:
logs_response = sdk_object.list_logs(
assistant_id=assistant_id,
assistant_id=environment_id,
page_limit=500,
cursor=current_cursor,
filter=log_filter
Expand Down Expand Up @@ -167,7 +187,7 @@ def get_logs(sdk_v1_object, sdk_v2_object, assistant_info, num_logs, filename, f
if filters is None:
filters = []

workspace_id, assistant_id, skill_id = [assistant_info.get(k) for k in ['workspace_id', 'assistant_id', 'skill_id']]
workspace_id, assistant_id, skill_id, environment_id = [assistant_info.get(k) for k in ['workspace_id', 'assistant_id', 'skill_id', 'environment_id']]

if (workspace_id is None or len(workspace_id) == 0) \
and (assistant_id is None or len(assistant_id) == 0) \
Expand Down Expand Up @@ -210,7 +230,7 @@ def get_logs(sdk_v1_object, sdk_v2_object, assistant_info, num_logs, filename, f
num_logs=num_logs)
elif version == 2:
logs = _get_logs_from_v2_api(sdk_object=sdk_v2_object,
assistant_id=assistant_id,
environment_id=environment_id,
log_filter=','.join(filters),
num_logs=num_logs)
print('\nLoaded {} logs'.format(len(logs)))
Expand Down

0 comments on commit 0ec1075

Please sign in to comment.