bots/triage-slackbot/triage_slackbot/openai_utils.py (42 lines of code) (raw):

import json from functools import cache import openai from triage_slackbot.category import OTHER_KEY, RequestCategory from triage_slackbot.config import get_config @cache def predict_category_functions(categories: list[RequestCategory]) -> list[dict]: return [ { "name": "get_predicted_category", "description": "Predicts the category of an inbound request.", "parameters": { "type": "object", "properties": { "category": { "type": "string", "enum": [ category.key for category in categories if category.key != OTHER_KEY ], "description": "Predicted category of the inbound request", }, }, "required": ["category"], }, } ] async def get_predicted_category(inbound_request_content: str) -> str: """ This function uses the OpenAI Chat Completion API to predict the category of an inbound request. """ config = get_config() # Define the prompt messages = [ {"role": "system", "content": config.openai_prompt}, {"role": "user", "content": inbound_request_content}, ] # Call the API response = openai.chat.completions.create( model="gpt-4-32k", messages=messages, temperature=0, stream=False, functions=predict_category_functions(config.categories.values()), function_call={"name": "get_predicted_category"}, ) function_args = json.loads(response.choices[0].message.function_call.arguments) # type: ignore return function_args["category"]