aleksandrrnt commited on
Commit
b100ebf
·
verified ·
1 Parent(s): 45547fa

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +113 -0
app.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ from sentence_transformers import SentenceTransformer
4
+ import openai
5
+
6
+
7
+ MISTRAL_KEY=os.getenv('MISTRAL_API_KEY')
8
+ MISTRAL_URL="https://api.mistral.ai/v1"
9
+ MISTRAL_MODEL="mistral-small-latest"
10
+
11
+
12
+ # Инициализация модели для эмбеддингов
13
+ # embedding_model = SentenceTransformer('BAAI/bge-m3')
14
+
15
+ client = openai.OpenAI(api_key=MISTRAL_KEY, base_url=MISTRAL_URL)
16
+
17
+ # # Функция для вычисления эмбеддингов текста
18
+ # def get_embeddings(text):
19
+ # return embedding_model.encode(text)
20
+
21
+ user_message = "Прикладываю информацию для анализа"
22
+
23
+ # Функция для обработки запроса к LLM
24
+ def process_query(file1, file2, system_prompt):
25
+ # Чтение содержимого файлов
26
+ if file1 is not None:
27
+ with open(file1.name, 'r', encoding='utf-8') as f:
28
+ file1_content = f.read()
29
+ else:
30
+ file1_content = ""
31
+
32
+ if file2 is not None:
33
+ with open(file2.name, 'r', encoding='utf-8') as f:
34
+ file2_content = f.read()
35
+ else:
36
+ file2_content = ""
37
+
38
+ # Создание контекста из файлов
39
+ context = f"Информация по нашему опыту:\n{file1_content}\n\nЗапрос потенциального проекта:\n{file2_content}"
40
+
41
+ # Вычисление эмбеддингов для контекста
42
+ # context_embedding = get_embeddings(context)
43
+
44
+ # Формирование сообщения для LLM
45
+ messages = [
46
+ {"role": "system", "content": system_prompt},
47
+ {"role": "user", "content": f"{user_message}\n\nКонтекст: {context}"}
48
+ ]
49
+
50
+
51
+ response = client.chat.completions.create(
52
+ messages=messages,
53
+ model=MISTRAL_MODEL,
54
+ )
55
+
56
+ # Получение ответа от LLM
57
+ llm_response = response.choices[0].message.content
58
+ return llm_response
59
+
60
+
61
+
62
+
63
+ # Высота столбцов (в пикселях)
64
+ COLUMN_HEIGHT = 280
65
+
66
+ NUM_LINES = 12
67
+
68
+ # Интерфейс Gradio
69
+ with gr.Blocks() as demo:
70
+ gr.Markdown("# Интерфейс для анализа пресейла")
71
+
72
+ # Создаем два столбца: левый для загрузки файлов, правый для системного промпта
73
+ with gr.Row():
74
+ with gr.Column(scale=1): # Левый столбец
75
+ file1_input = gr.File(
76
+ label="Прикрепите информацию о вашем опыте",
77
+ height=COLUMN_HEIGHT/2,
78
+ )
79
+ file2_input = gr.File(
80
+ label="Прикрепите рассматриваемый запрос",
81
+ height=COLUMN_HEIGHT/2,
82
+ )
83
+
84
+ with gr.Column(scale=2): # Правый столбец
85
+ system_prompt_input = gr.Textbox(
86
+ label="Системный промпт",
87
+ placeholder="Введите системный промпт...",
88
+ lines=NUM_LINES, # Количество строк зависит от доступной высоты
89
+ max_lines=NUM_LINES,
90
+ interactive=True,
91
+ )
92
+
93
+
94
+ # Кнопка "Отправить"
95
+ send_button = gr.Button("Отправить")
96
+
97
+ # Текстовое поле для отображения результата
98
+ result_output = gr.Textbox(label="Результат", lines=5, interactive=False)
99
+
100
+ def respond(file1, file2, system_prompt):
101
+ # Обработка запроса (заглушка)
102
+ llm_response = process_query(file1, file2, system_prompt)
103
+ return llm_response
104
+
105
+ # Привязываем кнопку к функции обработки
106
+ send_button.click(
107
+ respond,
108
+ inputs=[file1_input, file2_input, system_prompt_input],
109
+ outputs=result_output
110
+ )
111
+
112
+ # Запуск приложения
113
+ demo.launch()