Spaces:
Sleeping
Sleeping
import gradio as gr | |
import random | |
import openai | |
import pinecone | |
import os | |
from langchain.vectorstores import Pinecone | |
from langchain.embeddings.openai import OpenAIEmbeddings | |
from langchain.chains import ConversationalRetrievalChain | |
from langchain.chat_models import ChatOpenAI | |
openai.api_key= os.environ.get('API_OPENAI') | |
PINECONE_API_KEY = os.environ.get('API_PINECONE') | |
pinecone.init( | |
api_key=PINECONE_API_KEY, # find at app.pinecone.io | |
environment="eu-west4-gcp" # next to api key in console | |
) | |
embeddings = OpenAIEmbeddings(openai_api_key=openai.api_key) | |
index_name = "yc-faq-air" | |
vectorstore = Pinecone.from_existing_index(index_name, embeddings) | |
index_name = "yc-faq-air" | |
vectorstore = Pinecone.from_existing_index(index_name, embeddings) | |
prompt = "Instruction: Твоя роль - кваліфікований співробітник саппорту у системи YouControl. Потрібно відповісти на питання від користувача з огляду на контекст. Контекст ми беремо з бази знань, але вона може бути не повна. Якщо контекст не коректний, то відповідай на свій розсуд або передай запит сапорту, про контекс нічого не пишемо у відповіді. YouControl може писатися по різному: YC,Ю-контрол,Юконтрол, Юконтроль, Юр контроль, ЮК, UControl, Ю-контроль, YOU Kontrol, YouContro. ЗЕД - це зовнішня економічна діяльність."+""" | |
""" | |
messages = [{"role": "system", "content": prompt}] | |
def ask_yc_bot(question): | |
docs = vectorstore.similarity_search(question) | |
source_name = docs[0].metadata['source'] | |
context = docs[0].page_content | |
result = "Питання: " + question + " Контектс: " + context | |
return result | |
def clear_f(): | |
prompt = "Instruction: Твоя роль - кваліфікований співробітник саппорту у системи YouControl. Потрібно відповісти на питання від користувача з огляду на контекст. Контекст ми беремо з бази знань, але вона може бути не повна. Якщо контекст не коректний, то відповідай на свій розсуд або передай запит сапорту, про контекс нічого не пишемо у відповіді. YouControl може писатися по різному: YC,Ю-контрол,Юконтрол, Юконтроль, Юр контроль, ЮК, UControl, Ю-контроль, YOU Kontrol, YouContro. ЗЕД - це зовнішня економічна діяльність."+""" | |
""" | |
messages = [{"role": "system", "content": prompt}] | |
print("") | |
return "" | |
def query_gpt_3_5(messages, context): | |
completion = openai.ChatCompletion.create( | |
model="gpt-4-0613", | |
messages=messages | |
) | |
return completion.choices[0].message.content | |
def respond(message, chat_history): | |
message_rag = ask_yc_bot(message) | |
user_message_dict = [{"role": "user", "content": message_rag}] | |
messages.extend (user_message_dict) | |
bot_message = query_gpt_3_5(messages, "") | |
chat_history.append((message, bot_message)) | |
print("chat_histori", chat_history) | |
bot_message_dict = [{"role": "assistant", "content": bot_message}] | |
messages.extend (bot_message_dict) | |
print("messages", messages) | |
return "", chat_history, message_rag | |
css = """ | |
footer{display:none !important} | |
.custom-button { | |
height: 83px; | |
} | |
""" | |
with gr.Blocks(css=css) as demo: | |
with gr.Row(): | |
with gr.Column(scale=2): | |
chatbot = gr.Chatbot([(None, "Привіт! Що ти хочеш дізнатися про YouControl?")], height=300) | |
with gr.Column(scale=1): | |
context = gr.Textbox(lines=11, label="Last Context") | |
with gr.Row(): | |
with gr.Column(scale=2): | |
msg = gr.Textbox(label="") | |
with gr.Column(scale=1): | |
submit_button = gr.Button("Отправить", elem_classes="custom-button") | |
clear = gr.ClearButton([msg, chatbot], value="Новый чат") | |
clear.click(clear_f) | |
submit_button.click(respond, [msg, chatbot], [msg, chatbot]) | |
msg.submit(respond, [msg, chatbot], [msg, chatbot, context]) | |
demo.launch(debug=True) | |