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], # [""] "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