Spaces:
Sleeping
Sleeping
File size: 4,012 Bytes
6fda6cd 50bda4c 6fda6cd 9880f9c 5bf0a57 9880f9c 959acaa 9880f9c 959acaa 9880f9c 959acaa 9880f9c 959acaa 9880f9c 959acaa 9880f9c 959acaa 9880f9c 959acaa 50bda4c 5bf0a57 0f0fe40 a4870ae 0f0fe40 a4870ae 9c71730 0f0fe40 50bda4c 9c71730 50bda4c a4870ae 50bda4c 69c8c5d 0f0fe40 a4870ae 50bda4c 69c8c5d 50bda4c 0f0fe40 50bda4c 69c8c5d 0f0fe40 | 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 | import gradio as gr
from utils import call_openrouter
# app.py
custom_css = """
@import url('https://fonts.googleapis.com/css2?family=Alegreya+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap');
/* 1. Aplicação Global com tamanho aumentado */
body, .gradio-container, .gr-button, .gr-form, p, span {
font-family: 'Alegreya Sans', sans-serif !important;
font-size: 20px !important; /* Tamanho base para labels e botões */
}
/* 2. Foco total na legibilidade do Input e Output */
textarea,
.input-container textarea,
.output-class textarea,
[data-testid="textbox"] {
font-family: 'Alegreya Sans', sans-serif !important;
font-size: 24px !important; /* Tamanho generoso para o Grego e a Análise */
line-height: 1.5 !important;
padding: 15px !important;
}
/* 3. Ajuste do Markdown (o relatório gerado) */
.prose, .markdown-text, .prose p {
font-family: 'Alegreya Sans', sans-serif !important;
font-size: 22px !important;
line-height: 1.6 !important;
}
/* 4. Títulos do Relatório */
.prose h1, .prose h2, .prose h3 {
font-family: 'Alegreya Sans', sans-serif !important;
font-weight: 700 !important;
color: #2b5797 !important;
}
/* 5. Cores de seleção do Thomas (preservadas) */
.selected { background-color: #2b5797 !important; color: white !important; }
.selected span { color: white !important; font-weight: bold !important; }
.item.selected, .item:hover { background-color: #2b5797 !important; color: white !important; }
"""
# 2. Definição das listas de modelos para exibição
MODELS_A = ["anthropic/claude-3.5-sonnet", "openai/gpt-4o", "google/gemini-pro-1.5"]
MODELS_B = ["google/gemini-flash-1.5", "mistralai/mistral-7b-instruct", "cohere/command-r"]
# 3. Função que atualiza a lista de modelos na tela
def update_model_display(mode):
chain = MODELS_A if "Alta" in mode else MODELS_B
display_text = "### 🔗 Cadeia de Modelos Ativa:\n"
for m in chain:
display_text += f"- `{m}`\n"
return display_text
# 4. Função que processa a interface (O QUE ESTAVA FALTANDO)
def process_interface(passage, mode, category):
if not passage.strip():
return "Por favor, insira um texto.", None, "Aguardando entrada..."
# Chama a função turbinada do utils
report, model_used = call_openrouter(passage, mode, category)
# Gera arquivo para download
file_path = "analise_completa.txt"
with open(file_path, "w", encoding="utf-8") as f:
f.write(report)
return report, file_path, f"Finalizado com: {model_used}"
# 5. Construção da Interface Gradio
with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🏛️ Assistente de Análise Filológica")
with gr.Row():
input_text = gr.Textbox(label="Passagem em Latim ou Grego", lines=8)
with gr.Row():
with gr.Column():
radio_mode = gr.Radio(["Alta Precisão (Filológica)", "Custo-Benefício"],
label="Modo de Operação", value="Alta Precisão (Filológica)")
model_info_display = gr.Markdown(update_model_display("Alta Precisão (Filológica)"))
radio_cat = gr.Radio(["Syntax", "Morphology", "Semantics"],
label="Protocolo de Análise", value="Syntax")
# Evento para mudar a lista de modelos quando o usuário trocar o Radio
radio_mode.change(fn=update_model_display, inputs=radio_mode, outputs=model_info_display)
btn = gr.Button("Gerar Análise Completa", variant="primary")
output_report = gr.Textbox(label="Relatório de Análise", lines=15)
output_file = gr.File(label="Baixar Relatório (.txt)")
status = gr.Markdown("Pronto para iniciar.")
# Conexão do botão com a função definida no item 4
btn.click(
fn=process_interface,
inputs=[input_text, radio_mode, radio_cat],
outputs=[output_report, output_file, status]
)
if __name__ == "__main__":
demo.launch() |