TestTesting123 commited on
Commit
3774104
·
verified ·
1 Parent(s): 193bb7a

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -0
app.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ from openai import OpenAI
4
+
5
+ # Проверка ключа
6
+ api_key = os.getenv("OPENROUTER_API_KEY")
7
+ if not api_key:
8
+ raise ValueError("OPENROUTER_API_KEY не найден в Secrets!")
9
+
10
+ # Клиент OpenRouter
11
+ client = OpenAI(
12
+ base_url="https://openrouter.ai/api/v1",
13
+ api_key=api_key
14
+ )
15
+
16
+ # Функция обработки сообщений
17
+ def ask_ai(user_input, role, history=[]):
18
+ if not user_input.strip():
19
+ return history, "Введите сообщение!"
20
+ try:
21
+ # Системный промпт в зависимости от выбранной роли
22
+ system_prompt = f"Ты бот-собеседователь. Роль: {role}. Задавай вопросы и оценивай ответы."
23
+ messages = [{"role": "system", "content": system_prompt}]
24
+
25
+ # Берем последние 6 сообщений (экономим токены)
26
+ for h in history[-12:]:
27
+ if isinstance(h, dict) and 'role' in h and 'content' in h:
28
+ messages.append(h)
29
+
30
+ # Добавляем текущее сообщение пользователя
31
+ messages.append({"role": "user", "content": str(user_input)})
32
+
33
+ # Вызов LLM с ограничением токенов
34
+ response = client.chat.completions.create(
35
+ model="anthropic/claude-3.5-sonnet",
36
+ messages=messages,
37
+ max_tokens=1000
38
+ )
39
+
40
+ answer = response.choices[0].message.content
41
+
42
+ # Сохраняем историю как словари
43
+ history.append({"role": "user", "content": user_input})
44
+ history.append({"role": "assistant", "content": answer})
45
+
46
+ return history, ""
47
+ except Exception as e:
48
+ return history, f"Ошибка при вызове AI: {e}"
49
+
50
+ # Gradio интерфейс
51
+ with gr.Blocks() as demo:
52
+ gr.Markdown("### 🟢 HR / Tech Interview Chatbot")
53
+
54
+ with gr.Row():
55
+ role_selector = gr.Dropdown(
56
+ choices=["HR", "Frontend", "Backend"],
57
+ value="HR",
58
+ label="Выберите роль собеседования"
59
+ )
60
+ clear_btn = gr.Button("Очистить чат")
61
+
62
+ chat = gr.Chatbot()
63
+ msg = gr.Textbox(placeholder="Напишите сообщение...")
64
+ state = gr.State([]) # история чата
65
+
66
+ # Кнопка Clear Chat
67
+ clear_btn.click(lambda: ([], ""), [], [chat, msg])
68
+
69
+ # Отправка сообщения
70
+ msg.submit(ask_ai, inputs=[msg, role_selector, state], outputs=[chat, msg])
71
+
72
+ # Запуск
73
+ demo.launch()