HMC-CIS-chatbot-testing / utils /response_manager.py
AashitaK's picture
Fix error
25e3a59
raw
history blame
3.82 kB
import os
import openai
"""
A module to manage responses from the OpenAI Response API for an IT Helpdesk assistant
at Harvey Mudd College. This module initializes the OpenAI client and provides a method
to create responses using RAG (Retrieval-Augmented Generation) to user queries. It uses
a vector store for retrieval of knowledge base documents and generates responses using
the specified OpenAI model. The module also loads a developer message from a text file
to prompt engineer responses from the AI model.
"""
# Load the OpenAI API key from the environment variable
# If the API key is not set, raise an error.
if "OPENAI_API_KEY" not in os.environ:
raise ValueError("OPENAI_API_KEY environment variable is not set.")
api_key=os.getenv("OPENAI_API_KEY")
class ResponseManager:
"""
A class to manage responses from the OpenAI API for an IT Helpdesk assistant.
This class initializes the OpenAI client and provides a method to create responses
to user queries using the specified OpenAI model.
"""
def __init__(self, vector_store_id):
"""
Initialize the ResponseManager with a vector store ID.
:param vector_store_id: The ID of the vector store to use for file search.
"""
# Initialize the OpenAI client
# Note: The OpenAI client is initialized with the API key set in the environment variable
# This is a placeholder for the actual OpenAI client initialization
# In a real-world scenario, you would use the appropriate OpenAI client library
# For example, if using the OpenAI Python library, you would do:
self.client = openai.OpenAI(api_key=api_key)
self.vector_store_id = vector_store_id
self.previous_response_id = None
# Load the meta prompt from the text file
# This message is used to provide context for the AI model
meta_prompt_file = 'config/meta_prompt.txt'
if not os.path.exists(meta_prompt_file):
raise FileNotFoundError(f"Meta prompt file '{meta_prompt_file}' not found.")
with open(meta_prompt_file, 'r') as file:
self.meta_prompt = file.read().strip()
def create_response(self, query, model: str= "gpt-4o-mini",
temperature=0, max_output_tokens=800,
max_num_results=7):
"""
Create a response to a user query using the OpenAI API.
:param query: The user query to respond to.
:param model: The OpenAI model to use (default is "gpt-4o-mini").
:param temperature: The temperature for the response (default is 0).
:param max_output_tokens: The maximum number of output tokens (default is 800).
:param max_num_results: The maximum number of search results to return (default is 7).
:param verbose: Whether to print the response (default is False).
:return: The response text from the OpenAI API.
"""
if self.previous_response_id is None:
input=[{"role": "developer", "content": self.meta_prompt},
{"role": "user", "content": query}]
else:
input=[{"role": "user", "content": query}]
response = self.client.responses.create(
model=model,
previous_response_id=self.previous_response_id,
input=input,
tools=[{
"type": "file_search",
"vector_store_ids": [self.vector_store_id], # ["<vector_store_id>"]
"max_num_results": max_num_results}
],
temperature=temperature,
max_output_tokens = max_output_tokens,
# include=["output[*].file_search_call.search_results"]
)
self.previous_response_id = response.id
return response.output_text