Aido-Assistant / utils.py
dhanvanth183's picture
Upload 3 files
7f02a59 verified
from langchain_openai import OpenAIEmbeddings
from pinecone import Pinecone
import streamlit as st
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
# Initialize OpenAI client
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
# Initialize embeddings
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002", api_key=os.getenv('OPENAI_API_KEY'))
# Initialize Pinecone
pc = Pinecone(api_key=os.getenv('PINECONE_API_KEY'))
# Check if index exists and connect to it
index_name = "aido-hybrid"
if index_name not in pc.list_indexes().names():
print("Creating a new Pinecone index...")
pc.create_index(
name=index_name,
dimension=1536, # dimensionality of text-embedding-ada-002
metric="cosine"
)
# Connect to the existing Pinecone index
index = pc.Index(index_name)
def find_match(input):
# Get embeddings for the input query
input_em = embeddings.embed_query(input)
# Query Pinecone
result = index.query(vector=input_em, top_k=5, include_metadata=True)
# Return the top 2 matches
return result['matches'][0]['metadata']['text'] + "\n" + result['matches'][1]['metadata']['text']
def query_refiner(conversation, query):
# Using the new ChatCompletion API instead of the deprecated Completion API
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system",
"content": "You are a helpful assistant that refines user queries based on conversation context."},
{"role": "user",
"content": f"Given the following user query and conversation log, formulate a question that would be the most relevant to provide the user with an answer from a knowledge base.\n\nCONVERSATION LOG: \n{conversation}\n\nQuery: {query}\n\nRefined Query:"}
],
temperature=0.7,
max_tokens=256
)
return response.choices[0].message.content
def get_conversation_string():
conversation_string = ""
for i in range(len(st.session_state['responses']) - 1):
conversation_string += "Human: " + st.session_state['requests'][i] + "\n"
conversation_string += "Bot: " + st.session_state['responses'][i + 1] + "\n"
return conversation_string