File size: 4,543 Bytes
0271e9b
 
586aa0c
9d7f8de
9355ea5
0271e9b
 
 
 
 
586aa0c
0079c63
0271e9b
0f77de4
 
 
 
 
586aa0c
0079c63
16997b3
b794ac4
 
 
0271e9b
 
 
 
0079c63
0271e9b
16997b3
 
 
601c6ac
0271e9b
16997b3
 
 
0271e9b
 
 
 
b794ac4
0079c63
0271e9b
16997b3
0271e9b
 
 
 
 
 
16997b3
 
0271e9b
 
 
 
 
 
 
16997b3
0271e9b
16997b3
0271e9b
 
0079c63
b794ac4
 
 
 
 
 
 
ec533d0
0271e9b
b794ac4
 
7dc5633
b794ac4
 
 
 
 
 
 
 
0271e9b
0079c63
b794ac4
16997b3
 
0079c63
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
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')
embeddings = OpenAIEmbeddings(openai_api_key=openai.api_key)

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
)



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}]
chat_history = []

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("")
  chat_history.clear()
  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)
        print ("message_rag=", message_rag)
        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, context])
    msg.submit(respond, [msg, chatbot], [msg, chatbot, context])


demo.launch(debug=True, queue=False)