orc/plugins/Conversation/Triage/wrapper.py (20 lines of code) (raw):
# imports
import json
import logging
from shared.util import call_semantic_function, get_usage_tokens
async def triage(kernel, conversation_plugin, arguments):
"""
This function is used to triage the user's request and determine its intent.
Depending on the intent, it either generates a search query for sources (if it's a Q&A question)
or directly generates an answer (if it's not a Q&A question).
Args:
kernel (object): The kernel object.
conversation_plugin (dict): The conversation plugin dictionary.
arguments (dict): The arguments for the function.
Returns:
dict: A dictionary containing the triage response. The response includes:
'intents' (list): A list of intents of the request. Defaults to ['none'] if not found.
'answer' (str): The answer to the request. Defaults to an empty string if not found.
'search_query' (str): The search query for the request. Defaults to an empty string if not found.
'prompt_tokens' (list): The prompt tokens from the function result.
'completion_tokens' (list): The completion tokens from the function result.
'bypass' (bool): A flag indicating whether to bypass the reminder flow steps (in case an error has occurred).
Raises:
Exception: If there's a JSON decoding error when processing the function result.
"""
triage_dict= {"intents": ["none"], "answer": "", "search_query": "", "bypass": False}
function_result = await call_semantic_function(kernel, conversation_plugin["Triage"], arguments)
message_content = str(function_result)
try:
response = message_content.strip("`json\n`")
response_json = json.loads(response)
except json.JSONDecodeError:
logging.error(f"[code_orchest] error when executing RAG flow (Triage). Invalid json: {function_result.result}")
raise Exception(f"Triage was not successful due to a JSON error. Invalid json: {function_result.result}")
intents = response_json.get('intents', ['none'])
triage_dict["intents"] = intents if intents != [] else ['none']
triage_dict["answer"] = response_json.get('answer', '')
triage_dict["search_query"] = response_json.get('query_string', '')
triage_dict["prompt_tokens"] = get_usage_tokens(function_result, 'prompt')
triage_dict["completion_tokens"] = get_usage_tokens(function_result, 'completion')
return triage_dict