Korgik_asistent / app.py
Korgik12's picture
Create app.py
0e1ad0f verified
import gradio as gr
import google.generativeai as genai
import os
# Функция для инициализации Gemini
def init_gemini(api_key):
try:
genai.configure(api_key=api_key)
model = genai.GenerativeModel('gemini-pro')
return model, None
except Exception as e:
return None, f"Ошибка инициализации Gemini: {str(e)}"
# Основная функция для чата
def chat_with_gemini(message, history, api_key):
try:
model, error = init_gemini(api_key)
if error:
return error
# Форматируем историю
chat_history = []
for human, ai in history:
chat_history.append({"role": "user", "parts": [human]})
chat_history.append({"role": "model", "parts": [ai]})
# Создаем чат
chat = model.start_chat(history=chat_history)
response = chat.send_message(message)
return response.text
except Exception as e:
return f"Ошибка: {str(e)}"
# Функция проверки API ключа
def check_api_key(api_key):
if not api_key or api_key.strip() == "":
return gr.update(visible=True), "Введите ваш API-ключ"
try:
model, error = init_gemini(api_key)
if error:
return gr.update(visible=True), f"Ошибка: {error}"
# Тестовый запрос
response = model.generate_content("Ответь 'Готов к работе!'")
return gr.update(visible=False), "Ключ проверен! Можете начинать общение."
except Exception as e:
return gr.update(visible=True), f"Ключ не прошел проверку: {str(e)}"
# Интерфейс
with gr.Blocks(theme=gr.themes.Soft(), title="Мой ИИ-Ассистент (Gemini)") as demo:
gr.Markdown("## 🚀 Мой Личный ИИ-Ассистент на основе Google Gemini")
gr.Markdown("Получите бесплатный API ключ на [ai.google.dev](https://ai.google.dev/)")
with gr.Row():
api_key = gr.Textbox(
label="Google Gemini API Key",
placeholder="Введите ваш API-ключ здесь...",
type="password",
lines=1
)
check_btn = gr.Button("Проверить ключ", variant="primary")
key_status = gr.Markdown("Статус: Ожидание ввода ключа")
with gr.Column(visible=False) as chat_column:
chatbot = gr.Chatbot(height=400)
msg = gr.Textbox(label="Ваше сообщение", placeholder="Напишите что-нибудь...")
with gr.Row():
submit_btn = gr.Button("Отправить", variant="primary")
clear_btn = gr.Button("Очистить")
# Обработчики событий
check_btn.click(
fn=check_api_key,
inputs=[api_key],
outputs=[chat_column, key_status]
)
def respond(message, chat_history, api_key):
if not api_key:
return "", chat_history + [[message, "Введите API-ключ"]]
bot_message = chat_with_gemini(message, chat_history, api_key)
chat_history.append((message, bot_message))
return "", chat_history
msg.submit(respond, [msg, chatbot, api_key], [msg, chatbot])
submit_btn.click(respond, [msg, chatbot, api_key], [msg, chatbot])
clear_btn.click(lambda: None, None, chatbot, queue=False)
if __name__ == "__main__":
demo.launch()