Spaces:
Runtime error
Runtime error
| 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) | |