TestTesting123/interview-sim-ai
1
1import os2import gradio as gr3from openai import OpenAI4 5# Проверка ключа6api_key = os.getenv("OPENROUTER_API_KEY")7if not api_key:8 raise ValueError("OPENROUTER_API_KEY не найден в Secrets!")9 10# Клиент OpenRouter11client = OpenAI(12 base_url="https://openrouter.ai/api/v1",13 api_key=api_key14)15 16# Функция обработки сообщений17def 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=100038 )39 40 answer = response.choices[0].message.content41 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 интерфейс51with 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 Chat67 clear_btn.click(lambda: ([], ""), [], [chat, msg])68 69 # Отправка сообщения70 msg.submit(ask_ai, inputs=[msg, role_selector, state], outputs=[chat, msg])71 72# Запуск73demo.launch()