import gradio as gr from openai import OpenAI # Инициализация клиента DeepSeek client = OpenAI( api_key="sk-a02694cf3c8640c9ae60428ee2c5a62e", # <-- Вставьте свой ключ base_url="https://api.deepseek.com" ) def chat_with_deepseek(user_message, history): """ user_message: строка, введённая пользователем. history: список словарей [{"role":"user"|"assistant","content":"..."}], формат Gradio Chatbot (type="messages"). Возвращает (new_history, new_history, ""), где: - new_history — обновлённая история (чат) в формате messages - "" — чтобы очистить поле ввода """ # Собираем сообщения из history messages = [] for h in history: messages.append({"role": h["role"], "content": h["content"]}) # Добавляем текущее сообщение пользователя messages.append({"role": "user", "content": user_message}) # Запрос к deepseek-reasoner try: response = client.chat.completions.create( model="deepseek-reasoner", messages=messages ) assistant_content = response.choices[0].message.content except Exception as e: assistant_content = f"Ошибка при обращении к API: {e}" # Формируем новое состояние истории new_history = history + [ {"role": "user", "content": user_message}, {"role": "assistant", "content": assistant_content} ] # Третий элемент возвращаем пустой — для очистки поля ввода return new_history, new_history, "" with gr.Blocks( theme=gr.themes.Base( primary_hue="slate", secondary_hue="blue", neutral_hue="slate", text_size="md", font=["Arial", "sans-serif"] ), css=""" /* Фон приложения чёрный */ body { background-color: #000000 !important; } .block.block--main { background-color: #000000 !important; } .gradio-container { color: #ffffff !important; } /* Фон области чата */ #chatbot { background-color: #111111 !important; } """ ) as demo: # Верхняя часть: "заголовок" gr.HTML("""
Enter — отправить, Ctrl+Enter — новая строка
""") # Сам чат: храним историю в формате messages (OpenAI-стиль) chatbot = gr.Chatbot( label="Диалог", height=400, type="messages", elem_id="chatbot" ) # Поле для ввода текста (многострочное) msg = gr.Textbox( label="Ваш вопрос", placeholder="Введите сообщение...", lines=2, elem_id="user_input", ) # Скрытая кнопка: не отображается, но на неё будем "кликать" через JS hidden_send_btn = gr.Button( "Скрытая кнопка", visible=False, elem_id="hidden_send_btn" ) # Храним историю чата state = gr.State([]) # Логика при "клике" на скрытую кнопку hidden_send_btn.click( fn=chat_with_deepseek, inputs=[msg, state], outputs=[chatbot, state, msg], # msg получит "" scroll_to_output=True ) # JavaScript-код: # При Enter — отправка (клик по hidden_send_btn) # При Ctrl+Enter — перенос строки custom_js = """ """ gr.HTML(custom_js) # Запуск if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)