Spaces:
Sleeping
Sleeping
File size: 3,510 Bytes
a37f34e 85421d6 a37f34e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import gradio as gr
import random
import time
import pymongo
import certifi
import os
from dotenv import load_dotenv
import argparse
from dataclasses import dataclass
from langchain.vectorstores.chroma import Chroma
from langchain_openai.embeddings import OpenAIEmbeddings
from langchain_openai.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from deep_translator import GoogleTranslator
uri = "mongodb+srv://clementrof:t5fXqwpDQYFpvuCk@cluster0.rl5qhcj.mongodb.net/?retryWrites=true&w=majority"
# Create a new client and connect to the server
client = pymongo.MongoClient(uri, tlsCAFile=certifi.where())
# Send a ping to confirm a successful connection
try:
client.admin.command('ping')
print("Pinged your deployment. You successfully connected to MongoDB!")
except Exception as e:
print(e)
# Access your database
db = client.get_database('camila')
records = db.info
# Load environment variables from .env
load_dotenv()
# Access the private key
private_key = os.getenv("OPENAI_API_KEY")
os.environ["OPENAI"] = "OPENAI_API_KEY"
CHROMA_PATH = "ch_chatbot"
####### F R ################
PROMPT_TEMPLATE = """
Réponds à la question en te basant sur le contexte suivant :
{context}
---
Voici l'historique de cette conversation, utilise l'historique comme une mémoire:
{memory}
---
Réponds à la question en se basant sur le contexte ci-dessus et parle de la même manière que le contexte. Ne dis pas que tu utilises le contexte pour répondre : {question}
"""
def message(question,memory):
# Prepare the DB.
embedding_function = OpenAIEmbeddings()
db = Chroma(persist_directory=CHROMA_PATH,
embedding_function=embedding_function)
# Search the DB.
results = db.similarity_search_with_relevance_scores(question, k=3)
if len(results) == 0 or results[0][1] < 0.7:
print("Unable to find matching results.")
return
context_text = "\n\n---\n\n".join(
[doc.page_content for doc, _score in results])
prompt_template = ChatPromptTemplate.from_template(PROMPT_TEMPLATE)
prompt = prompt_template.format(context=context_text, memory=memory, question=question)
print(prompt)
model = ChatOpenAI()
response_text = model.invoke(prompt)
content = response_text.content
return content
def Chat_call(question):
existing_user_doc = records.find_one({'ID': '1'})
message_log = []
messages = existing_user_doc['message']
if len(messages)>1:
messages = messages[-1:]
message_log.extend(messages)
# Convert each dictionary into a string representation
message_strings = [f"{message['role']}: {message['content']}" for message in message_log]
# Join the strings with newline characters
memory = '\n'.join(message_strings)
response = message(question,memory)
records.update_one({'ID': '1'},
{'$push':{'message': {'role': 'user', 'content': f'{question}'}}})
records.update_one({'ID': '1'},
{'$push':{'message': {'role': 'assistant', 'content': f'{response}'}}})
return response
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox()
clear = gr.ClearButton([msg, chatbot])
def respond(message, chat_history):
bot_message = Chat_call(message)
chat_history.append((message, bot_message))
return "", chat_history
msg.submit(respond, [msg, chatbot], [msg, chatbot])
if __name__ == "__main__":
demo.launch()
|