Spaces:
Runtime error
Runtime error
| from langchain.chains import ConversationalRetrievalChain | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.vectorstores import Pinecone | |
| from langchain.embeddings.openai import OpenAIEmbeddings | |
| from langchain.memory import ConversationBufferMemory | |
| import pinecone | |
| import os | |
| from langchain.vectorstores import Chroma | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| openai_api_key=os.getenv('OPENAI_API_KEY') | |
| def create_conversation(query: str, chat_history: list, collection_name: str) -> tuple: | |
| try: | |
| embeddings = OpenAIEmbeddings( | |
| openai_api_key=openai_api_key | |
| ) | |
| persist_directory = './db_metadata' | |
| db = Chroma( | |
| collection_name=collection_name, | |
| persist_directory=persist_directory, | |
| embedding_function=embeddings | |
| ) | |
| memory = ConversationBufferMemory( | |
| memory_key='chat_history', | |
| return_messages=False, | |
| input_key='question', | |
| output_key='answer', | |
| ) | |
| cqa = ConversationalRetrievalChain.from_llm( | |
| llm=ChatOpenAI(temperature=0.0, | |
| openai_api_key=openai_api_key), | |
| chain_type='stuff', | |
| retriever=db.as_retriever(), | |
| memory=memory, | |
| get_chat_history=lambda h: h, | |
| verbose=True, | |
| return_source_documents=True, | |
| ) | |
| result = cqa({'question': query, 'chat_history': chat_history}) | |
| # chat_history.append((query, result['answer'])) | |
| # return '', chat_history | |
| source_documents = result.get('source_documents', []) | |
| # Filter the source_documents to keep 'page', 'source', and 'page_content' | |
| filtered_documents = [{'page': doc.metadata.get('page', None), | |
| 'source': os.path.basename(doc.metadata.get('source', None)), | |
| 'page_content': doc.page_content} | |
| for doc in source_documents] | |
| # Format and print the output with spaces between documents | |
| output = "" | |
| for doc in filtered_documents: | |
| page = doc['page'] | |
| source = doc['source'] | |
| page_content = doc['page_content'] | |
| output += f"Page: {page}\n" | |
| output += f"Source: {source}\n" | |
| output += f"Page Content: {page_content}\n" | |
| output += "\n" # Adding new lines between documents for better readability | |
| chat_history.append((query, result['answer'])) | |
| return '',chat_history, output | |
| except Exception as e: | |
| chat_history.append((query, f"Unexpected Error: {e}")) | |
| return '', chat_history, output | |