Spaces:
Running
Running
# ui/chatbot_tab.py | |
import gradio as gr | |
from app.functions.database_handling import list_databases | |
from utils.helpers import extract_text_from_files | |
from app.llm_handling import answer_question | |
def create_chatbot_tab(): | |
"""Crea il tab 'Chatbot' dell'interfaccia Gradio.""" | |
def chat_upload_and_respond(files, chat_history, db_name): | |
"""Gestisce il caricamento dei file e aggiorna la chat con il contenuto.""" | |
if chat_history is None: | |
chat_history = [] | |
text = extract_text_from_files(files) | |
chat_history.append({ | |
"role": "assistant", | |
"content": f"π Contenuto dei documenti caricati:\n{text}" | |
}) | |
return chat_history | |
def respond(message, chat_history, db_name): | |
"""Genera una risposta alla domanda dell'utente e aggiorna la chat.""" | |
if chat_history is None: | |
chat_history = [] | |
new_messages = answer_question(message, db_name) | |
chat_history.extend(new_messages) | |
return "", chat_history | |
def clear_chat(): | |
"""Pulisce la cronologia della chat.""" | |
return [], [] | |
# Ottieni la lista aggiornata dei database | |
databases = list_databases() | |
with gr.Tab("Chatbot"): | |
with gr.Row(): | |
with gr.Column(scale=2): | |
# Dropdown per selezionare il database | |
db_name_chat = gr.Dropdown( | |
choices=databases, | |
label="Seleziona Database", | |
value="default_db" | |
) | |
# Componente Chatbot | |
chatbot = gr.Chatbot(label="Conversazione", type="messages") | |
# Input per la domanda | |
question_input = gr.Textbox( | |
label="Fai una domanda", | |
placeholder="Scrivi qui la tua domanda...", | |
lines=2 | |
) | |
# Bottoni per azioni | |
with gr.Row(): | |
ask_button = gr.Button("Invia") | |
clear_button = gr.Button("Pulisci Chat") | |
# Upload file con dimensioni ridotte | |
with gr.Row(): | |
file_input = gr.File( | |
label="Carica PDF/Docx/TXT per la conversazione", | |
file_types=[".pdf", ".docx", ".txt"], | |
file_count="multiple", | |
height="100px", | |
scale=3 | |
) | |
upload_button = gr.Button("Carica Documenti", scale=1) | |
# Stato della chat | |
chat_state = gr.State([]) | |
# Eventi per i bottoni | |
upload_button.click( | |
fn=chat_upload_and_respond, | |
inputs=[file_input, chat_state, db_name_chat], | |
outputs=chatbot | |
) | |
ask_button.click( | |
fn=respond, | |
inputs=[question_input, chat_state, db_name_chat], | |
outputs=[question_input, chatbot] | |
) | |
clear_button.click( | |
fn=clear_chat, | |
outputs=[chatbot, chat_state] | |
) | |
return | |