Autogen_v0.4/rag_agent/openai_helper.py (126 lines of code) (raw):
import openai
import os
from werkzeug import Response
from openai import AzureOpenAI
from tenacity import retry, wait_random_exponential, stop_after_attempt
from dotenv import load_dotenv
load_dotenv()
endpoint = os.getenv("AZURE_OPENAI_ENDPOINT", "")
api_key = os.getenv("AZURE_OPENAI_API_KEY", "")
# set the deployment name for the model we want to use
deployment = "gpt-4"
model: str = "text-embedding-ada-002"
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2023-12-01-preview",
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)
@retry(wait=wait_random_exponential(min=1, max=20), stop=stop_after_attempt(6))
# Function to generate embeddings for title and content fields, also used for query embeddings
def generate_embeddings(text, model=model):
try:
openai_client = AzureOpenAI(
azure_endpoint=endpoint,
api_key=api_key,
api_version="2023-05-15",
)
embedding = openai_client.embeddings.create(input = [text], model=model).data[0].embedding
return embedding
except Exception as e:
print("Error calling OpenAI:" + openai_client.base_url)
print(e)
raise
def get_chatgpt_base_response(userQuery, system_message , service_bus_session_id, queue=None):
completion = client.chat.completions.create(
model=os.getenv('DEPLOYMENT_NAME'),
messages=[
{
"role": "system",
"content": system_message
},
{
"role": "user",
"content": userQuery
}
],
temperature=0,
max_tokens=100,
stream=False)
return completion.choices[0].message.content
def get_chatgpt_response(userQuery, system_message , service_bus_session_id, queue=None):
gptPrompt = {
"systemMessage": {"role": "system", "content": system_message},
"question": {"role": "user", "content": userQuery}
}
prompt = {"maxTokens": "500", "temperature": "0.5", "gptPrompt": gptPrompt}
return Response(call_openai_base(prompt, None, None), mimetype='text/event-stream')
def call_openai_base(prompt, service_bus_session_id, queue=None):
# Assume setup_byod("gpt-4") and other setup code here
try:
messages = [prompt['gptPrompt']['systemMessage']] + [prompt['gptPrompt']['question']]
openai_client = AzureOpenAI(
base_url = f"{endpoint}/openai/deployments/{deployment}/extensions",
api_key=api_key,
api_version="2023-09-01-preview",
)
response = openai_client.chat.completions.create(
model=os.getenv('DEPLOYMENT_NAME'),
messages=messages,
temperature=float(prompt['temperature']),
extra_body={
"dataSources": [
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": os.environ["SEARCH_ENDPOINT"],
"key": os.environ["SEARCH_KEY"],
"indexName": os.environ["SEARCH_INDEX_NAME"],
}
}
]
},
max_tokens=int(prompt['maxTokens']),
stream=True
)
for chunk in response:
try:
content = chunk.choices[0].delta.content
#print(chunk.choices[0].end_turn)
if content is not None:
yield content
except (KeyError, IndexError, TypeError) as e:
print(f"An error occurred: {e}")
yield "CONV_END"
except Exception as e:
print("Error calling OpenAI:" + openai.api_base)
print(e)
yield str(e)
def call_openai_base1(prompt, service_bus_session_id, queue = None):
try:
messages = [prompt['gptPrompt']['systemMessage']] + [prompt['gptPrompt']['question']]
response = openai.ChatCompletion.create(
engine=os.getenv('DEPLOYMENT_NAME'),
messages = messages,
temperature= float(prompt['temperature']),
extra_body={
"dataSources": [
{
"type": "AzureCognitiveSearch",
"parameters": {
"endpoint": os.environ["SEARCH_ENDPOINT"],
"key": os.environ["SEARCH_KEY"],
"indexName": os.environ["SEARCH_INDEX_NAME"],
}
}
]
},
max_tokens=int(prompt['maxTokens']) ,
stream=True
)
for chunk in response:
try:
content = chunk['choices'][0]['delta']['content']
if content is not None:
queue.put(content)
except (KeyError, IndexError, TypeError) as e:
print(f"An error occurred: {e}")
except Exception as e:
print("Error calling OpenAI:" + openai.api_base)
print(e)
return str(e)