File size: 6,513 Bytes
56fd21a 7299972 b88df70 ea4670b af49a43 b88df70 68b95db b88df70 68b95db 56fd21a 5855a4f 7299972 b88df70 8037dca 68b95db b88df70 080d622 b88df70 c629e49 b88df70 2aa225e b88df70 56fd21a b88df70 5193d26 b88df70 0e8391a b88df70 5193d26 b88df70 68b95db b88df70 68b95db b88df70 ea4670b f4e115f 7d17621 f4e115f b88df70 f4e115f 68b95db b88df70 f4e115f b88df70 f4e115f 68b95db f4e115f b88df70 68b95db b88df70 f4e115f 68b95db b88df70 68b95db b88df70 f4e115f b88df70 f4e115f 84f1cd4 56fd21a f4e115f b88df70 f4e115f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
import os
import sys
import threading
import time
# Установка конфигурационной директории для Matplotlib
os.environ['MPLCONFIGDIR'] = os.path.join(os.getcwd(), 'cache', 'matplotlib')
# Создаем директорию с правильными правами
os.makedirs(os.environ['MPLCONFIGDIR'], exist_ok=True)
import gradio as gr
import uvicorn
import requests
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
# Add project root to Python path
current_dir = os.path.abspath(os.path.dirname(__file__))
if current_dir not in sys.path:
sys.path.insert(0, current_dir)
# Import our main application
from api.fastapi_server import app as fastapi_app
# Run FastAPI server in a separate thread
def run_fastapi():
uvicorn.run(fastapi_app, host="0.0.0.0", port=8000)
# Start FastAPI in a background thread
fastapi_thread = threading.Thread(target=run_fastapi, daemon=True)
fastapi_thread.start()
# Wait for FastAPI to start
time.sleep(5)
# Create a Gradio interface that will proxy requests to FastAPI
def chat_with_api(message, conversation_id=None):
try:
response = requests.post(
"http://127.0.0.1:8000/chat",
json={"message": message, "conversation_id": conversation_id}
)
if response.status_code == 200:
data = response.json()
return data["response"], data["conversation_id"]
else:
return f"Error: {response.status_code} - {response.text}", conversation_id
except Exception as e:
return f"API connection error: {str(e)}", conversation_id
def build_kb():
try:
response = requests.post("http://127.0.0.1:8000/build-kb")
if response.status_code == 200:
return f"Success: {response.json()['message']}"
else:
return f"Error: {response.status_code} - {response.text}"
except Exception as e:
return f"API connection error: {str(e)}"
# Добавим функцию проверки статуса базы знаний
def check_kb_status():
try:
response = requests.get("http://127.0.0.1:8000/")
if response.status_code == 200:
data = response.json()
if data["knowledge_base_exists"]:
kb_info = data["kb_info"]
# Добавляем проверки на None и значения по умолчанию
version = kb_info.get('version', 'N/A')
size = kb_info.get('size', 0)
return f"✅ База знаний готова к работе\nВерсия: {version}\nРазмер: {size:.2f if size else 0} MB"
else:
return "❌ База знаний не создана. Нажмите кнопку 'Create/Update Knowledge Base'"
except Exception as e:
return f"❌ Ошибка проверки статуса: {str(e)}"
# Create the Gradio interface
with gr.Blocks(title="Status Law Assistant", theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🤖 Status Law Assistant")
with gr.Row():
with gr.Column(scale=1):
# Кнопки управления базой знаний
build_kb_btn = gr.Button("Create/Update Knowledge Base", variant="primary")
check_status_btn = gr.Button("Check Status")
kb_status = gr.Textbox(
label="Knowledge Base Status",
value="Checking status...",
interactive=False
)
# Привязываем обе кнопки
build_kb_btn.click(build_kb, inputs=None, outputs=kb_status)
check_status_btn.click(check_kb_status, inputs=None, outputs=kb_status)
gr.Markdown("### 💬 Chat Interface")
conversation_id = gr.State(None)
with gr.Row():
with gr.Column(scale=2):
# Улучшенный интерфейс чата
chatbot = gr.Chatbot(
label="Conversation",
height=400,
show_label=False,
bubble_full_width=False
)
with gr.Row():
msg = gr.Textbox(
label="Введите ваш вопрос здесь",
placeholder="Напишите ваш вопрос и нажмите Enter...",
scale=4
)
submit_btn = gr.Button("Отправить", variant="primary", scale=1)
# Добавляем очистку истории
clear_btn = gr.Button("Очистить историю")
def clear_history():
return [], None
def respond(message, chat_history, conv_id):
if not message.strip():
return chat_history, conv_id
chat_history.append([message, ""])
response, new_conv_id = chat_with_api(message, conv_id)
chat_history[-1][1] = response
return chat_history, new_conv_id
# Привязываем обработчики
msg.submit(respond, [msg, chatbot, conversation_id], [chatbot, conversation_id])
submit_btn.click(respond, [msg, chatbot, conversation_id], [chatbot, conversation_id])
clear_btn.click(clear_history, None, [chatbot, conversation_id])
# Добавляем информацию об использовании
with gr.Accordion("ℹ️ Как использовать", open=False):
gr.Markdown("""
1. Сначала нажмите кнопку **Create/Update Knowledge Base** для создания базы знаний
2. Дождитесь сообщения об успешном создании базы
3. Введите ваш вопрос в текстовое поле и нажмите Enter или кнопку "Отправить"
4. Используйте кнопку "Очистить историю" для начала новой беседы
""")
if __name__ == "__main__":
# Проверяем статус базы знаний при запуске
initial_status = check_kb_status()
# Launch Gradio interface
demo.launch(
server_name="0.0.0.0",
server_port=7860,
share=False
)
#demo.launch(server_name="0.0.0.0", server_port=7860, share=False)
|