Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
"""
|
| 2 |
-
🪶 Council Matters Classifier – PT
|
| 3 |
"""
|
| 4 |
|
| 5 |
import gradio as gr
|
|
@@ -9,6 +9,7 @@ import re
|
|
| 9 |
from pathlib import Path
|
| 10 |
from scipy.sparse import hstack, csr_matrix
|
| 11 |
|
|
|
|
| 12 |
try:
|
| 13 |
import torch
|
| 14 |
from transformers import AutoTokenizer, AutoModel
|
|
@@ -123,35 +124,38 @@ class PortugueseClassifier:
|
|
| 123 |
predicted_labels.sort(key=lambda x: x["probability"], reverse=True)
|
| 124 |
return predicted_labels
|
| 125 |
|
| 126 |
-
|
| 127 |
# ---------------- Load Classifier ----------------
|
| 128 |
classifier = PortugueseClassifier()
|
| 129 |
|
| 130 |
# ---------------- Suggestions ----------------
|
| 131 |
suggestions = [
|
| 132 |
-
"Pelo Senhor Presidente foi presente a esta reunião a informação n.º
|
| 133 |
-
"Pelo Senhor Presidente foram presentes a esta reunião os documentos relativos à assunção de compromissos plurianuais
|
| 134 |
-
"-BALANCETE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
]
|
| 136 |
example_idx = 0
|
| 137 |
|
| 138 |
-
|
| 139 |
def next_example():
|
| 140 |
global example_idx
|
| 141 |
example_idx = (example_idx + 1) % len(suggestions)
|
| 142 |
return suggestions[example_idx]
|
| 143 |
|
| 144 |
-
|
| 145 |
def prev_example():
|
| 146 |
global example_idx
|
| 147 |
example_idx = (example_idx - 1 + len(suggestions)) % len(suggestions)
|
| 148 |
return suggestions[example_idx]
|
| 149 |
|
| 150 |
-
|
| 151 |
def use_suggestion(suggestion):
|
| 152 |
return suggestion
|
| 153 |
|
| 154 |
-
|
| 155 |
def classify_display(text):
|
| 156 |
preds = classifier.predict(text)
|
| 157 |
if not preds:
|
|
@@ -161,127 +165,37 @@ def classify_display(text):
|
|
| 161 |
label = p["label"]
|
| 162 |
prob = p["probability"]
|
| 163 |
conf = p["confidence"]
|
| 164 |
-
color = {"high": "#
|
| 165 |
-
chips += f"<span class='output-chip' style='border-color:{color};color:{color}'>{label} ({prob:.0%})</span>"
|
| 166 |
return f"<div style='display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:10px'>{chips}</div>"
|
| 167 |
|
| 168 |
-
|
| 169 |
-
# ---------------- CSS Light ----------------
|
| 170 |
custom_css = """
|
| 171 |
-
body,
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
}
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
}
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
border-radius: 10px !important;
|
| 187 |
-
border: 1px solid #ccc !important;
|
| 188 |
-
}
|
| 189 |
-
|
| 190 |
-
button {
|
| 191 |
-
background-color: #0069d9 !important;
|
| 192 |
-
color: white !important;
|
| 193 |
-
font-weight: 600 !important;
|
| 194 |
-
border-radius: 8px !important;
|
| 195 |
-
border: none !important;
|
| 196 |
-
}
|
| 197 |
-
|
| 198 |
-
button:hover {
|
| 199 |
-
background-color: #0056b3 !important;
|
| 200 |
-
}
|
| 201 |
-
|
| 202 |
-
.output-chip {
|
| 203 |
-
background-color: #f8f9fa;
|
| 204 |
-
padding: 5px 12px;
|
| 205 |
-
border-radius: 8px;
|
| 206 |
-
font-weight: 500;
|
| 207 |
-
border: 1px solid #ddd;
|
| 208 |
-
}
|
| 209 |
-
|
| 210 |
-
.suggestion-box {
|
| 211 |
-
background-color: #f1f5ff;
|
| 212 |
-
border-radius: 10px;
|
| 213 |
-
border: 1px solid #c8d6fa;
|
| 214 |
-
padding: 10px;
|
| 215 |
-
display: flex;
|
| 216 |
-
align-items: center;
|
| 217 |
-
justify-content: center;
|
| 218 |
-
color: #111;
|
| 219 |
-
margin-top: 25px;
|
| 220 |
-
position: relative;
|
| 221 |
-
}
|
| 222 |
-
|
| 223 |
-
.arrow-btn {
|
| 224 |
-
width: 25px;
|
| 225 |
-
height: 25px;
|
| 226 |
-
font-size: 12px;
|
| 227 |
-
padding: 0;
|
| 228 |
-
background: none;
|
| 229 |
-
border: none;
|
| 230 |
-
color: #004aad;
|
| 231 |
-
cursor: pointer;
|
| 232 |
-
font-weight: bold;
|
| 233 |
-
}
|
| 234 |
-
|
| 235 |
-
.arrow-btn:hover {
|
| 236 |
-
color: #002f6c;
|
| 237 |
-
transform: scale(1.2);
|
| 238 |
-
}
|
| 239 |
-
|
| 240 |
-
.use-btn {
|
| 241 |
-
background-color:#004aad !important;
|
| 242 |
-
color:#fff !important;
|
| 243 |
-
font-weight:600 !important;
|
| 244 |
-
border-radius:6px !important;
|
| 245 |
-
padding:3px 8px !important;
|
| 246 |
-
margin-left:5px;
|
| 247 |
-
}
|
| 248 |
-
|
| 249 |
-
.use-btn:hover {
|
| 250 |
-
background-color:#0069d9 !important;
|
| 251 |
-
}
|
| 252 |
-
|
| 253 |
-
.suggestion-box .prev-btn {
|
| 254 |
-
position: absolute;
|
| 255 |
-
top: 5px;
|
| 256 |
-
left: 5px;
|
| 257 |
-
}
|
| 258 |
-
|
| 259 |
-
.suggestion-box .next-btn {
|
| 260 |
-
position: absolute;
|
| 261 |
-
top: 5px;
|
| 262 |
-
right: 5px;
|
| 263 |
-
}
|
| 264 |
-
|
| 265 |
-
.suggestion-box .suggestion-text {
|
| 266 |
-
width: 100%;
|
| 267 |
-
text-align: center;
|
| 268 |
-
border:none;
|
| 269 |
-
background:none;
|
| 270 |
-
color:#111;
|
| 271 |
-
font-weight:500;
|
| 272 |
-
padding-top:8px;
|
| 273 |
-
overflow-y: scroll;
|
| 274 |
-
}
|
| 275 |
"""
|
| 276 |
|
| 277 |
-
|
| 278 |
# ---------------- Gradio UI ----------------
|
| 279 |
with gr.Blocks(css=custom_css, theme="gradio/soft") as demo:
|
| 280 |
gr.Markdown("## 🏛️ **Council Matters Classifier – PT**")
|
| 281 |
-
gr.Markdown("###
|
|
|
|
|
|
|
| 282 |
|
| 283 |
-
|
| 284 |
-
classify_btn = gr.Button("Classificar")
|
| 285 |
output = gr.HTML()
|
| 286 |
classify_btn.click(fn=classify_display, inputs=input_text, outputs=output)
|
| 287 |
|
|
@@ -289,7 +203,7 @@ with gr.Blocks(css=custom_css, theme="gradio/soft") as demo:
|
|
| 289 |
prev_btn = gr.Button("⟨", elem_classes="prev-btn arrow-btn")
|
| 290 |
suggestion_display = gr.Textbox(value=suggestions[0], interactive=False, elem_classes="suggestion-text")
|
| 291 |
next_btn = gr.Button("⟩", elem_classes="next-btn arrow-btn")
|
| 292 |
-
use_btn = gr.Button("
|
| 293 |
|
| 294 |
prev_btn.click(fn=prev_example, outputs=suggestion_display)
|
| 295 |
next_btn.click(fn=next_example, outputs=suggestion_display)
|
|
|
|
| 1 |
"""
|
| 2 |
+
🪶 Council Matters Classifier – PT
|
| 3 |
"""
|
| 4 |
|
| 5 |
import gradio as gr
|
|
|
|
| 9 |
from pathlib import Path
|
| 10 |
from scipy.sparse import hstack, csr_matrix
|
| 11 |
|
| 12 |
+
|
| 13 |
try:
|
| 14 |
import torch
|
| 15 |
from transformers import AutoTokenizer, AutoModel
|
|
|
|
| 124 |
predicted_labels.sort(key=lambda x: x["probability"], reverse=True)
|
| 125 |
return predicted_labels
|
| 126 |
|
|
|
|
| 127 |
# ---------------- Load Classifier ----------------
|
| 128 |
classifier = PortugueseClassifier()
|
| 129 |
|
| 130 |
# ---------------- Suggestions ----------------
|
| 131 |
suggestions = [
|
| 132 |
+
"Pelo Senhor Presidente foi presente a esta reunião a informação n.º º ****** da Secção de Urbanismo e Fiscalização -- Serviço de Obras Particulares. \nPonderado e analisado o assunto o Executivo Municipal deliberou por unanimidade aprovar o projeto de arquitetura relativo ao Processo de obras n.º ***** -- EDIFIC.",
|
| 133 |
+
"Pelo Senhor Presidente foram presentes a esta reunião os documentos relativos à assunção de compromissos plurianuais relativos à Loja do Cidadão, em Alandroal que se anexam à presente ata. \nPonderado e analisado o assunto o Executivo Municipal deliberou por maioria, com os votos a favor dos eleitos pelo PS e a abstenção da eleita pelo Nós, Cidadãos, aprovar a assunção de compromissos plurianuais. \nReferiu o Sr. Presidente que o FAM enviou então o parecer necessário para aprovação destes dois pontos e que refere que \"atendendo ao exposto propõe que a Direção Executiva do FAM emita parecer prévio positivo à proposta de modificação ao orçamento municipal de 2024 apresentado pela Câmara Municipal\". ",
|
| 134 |
+
"-BALANCETE:\n-Operações orçamentas respeitante ao dia vinte e seis de março do corrente ano, é de um milhão oitocentos e onze mil quinhentos e quinze euros e noventa cêntimos.",
|
| 135 |
+
"-APOIO SOLICITADO CEAN-CENTRO EDUCATIVO ALICE NABEIRO-VIAGEM DE FINALISTAS-ANO 2024:\n-Apreciação da informação (registo 5911) dos serviços financeiros, referente ao assunto em epígrafe, que a seguir se transcreve:-“ Na sequência da documentação apresentada pelo CEAN – Centro Educativo Alice Nabeiro no âmbito da realização de uma Viagem de Finalistas a Paris, e após análise dos referidos documentos da mencionada entidade e visto a atividade preponderante ser de índole educativo e social, o valor que sugiro quantifica-se em 500,00 (quinhentos euros) o qual considero razoável para o tipo de atividade referida. O valor sugerido tem cobertura orçamental através da Grande Opção do Plano, 2 232 2011/5044 – Transferências Correntes para Instituições Culturais, cuja dotação global prevista nos Documentos Previsionais para o Exercício 2023 é de 150.000,00 €. Pelo exposto e para efeitos de apreciação por parte de V. Exas., é tudo o que me cabe informar, acerca do assunto mencionado em epígrafe”.\n-A CÂMARA DELIBEROU, POR UNANIMIDADE, ATRIBUIR UM APOIO NO VALOR DE 500,00€ (QUINHENTOS EUROS) AO CEAN-CENTRO EDUCATIVO ALICE NABEIRO, TENDO EM VISTA AJUDAR A CUSTEAR A VIAGEM DE FINALISTA 2024."
|
| 136 |
+
"-APOIO SOLICITADO PELA ASSOCIAÇÃO CULTURAL AXPRESS-ARTE - FESTIVAL INTERNACIONAL DE DANÇA:\n-Apreciação da informação (registo 5835) dos serviços financeiros, referente ao assunto em epígrafe, que a seguir se transcreve:-“ Na sequência da documentação apresentada pela Axpress-Arte – Associação Cultural para o exercício 2024, e em face da documentação apresentada pela referida instituição no âmbito da candidatura referida em epigrafe, e após análise dos referidos documentos da mencionada entidade e visto a atividade preponderante ser de índole cultural, o valor que sugiro quantifica-se em 3.000,00 (três mil euros) anuais o qual considero razoável para este tipo de atividade. O valor sugerido tem cobertura orçamental através da Grande Opção do Plano, 2 251 2011/5075 – Transferências Correntes para Instituições Culturais, cuja dotação global prevista nos Documentos Previsionais para o Exercício 2024 é de 90.000,00 €. Sendo o Histórico dos últimos anos de atribuição de apoios para a referida instituição o seguinte:\n\n————————————Quadro de Apoios 2019 – 2023————————————\nAno,Valor em Euros\n2019,0,00\n2020,0,00\n2021,0,00\n2022,3.000,00\n2023,3.000,00\n————————————————————————————————————————————————————— \n-Pelo exposto e para efeitos de apreciação por parte de V. Exas., é tudo o que me cabe informar, acerca do assunto mencionado em epígrafe”.\n-A CÂMARA DELIBEROU, POR UNANIMIDADE, ATRIBUIR UM APOIO NO VALOR DE 3.000,00€ (TRÊS MIL EUROS) À ASSOCIAÇÃO CULTURAL AXPRESS-ARTE, TENDO EM VISTA A REALIZAÇÃO DO FESTIVAL INTERNACIONAL DE DANÇA.",
|
| 137 |
+
"Presente declaração, emitida pelo Senhor Presidente da Câmara em 07.junho.2024, para ratificação, constante da plataforma de gestão documental SigmaDoc Web/NIPG: 19890/24_Pendente: 100707.\n\nDocumentos que se dão como inteiramente reproduzidos na presente ata e ficam, para todos os efeitos legais, arquivados em pasta própria existente para o efeito.\n\nA Câmara deliberou, ao abrigo da n.º 3, do artigo 35.º do RJAL, aprovado pela Lei n.º 75/2013, de 12 de setembro, na sua redação atual, ratificar a Declaração emitida pelo Senhor Presidente da Camara em 07.junho.2024, em que o Município da Covilhã pretende ceder apoio logístico, institucional e/ou monetário para o evento \"18.ª Santa Bebiana\", atividade esta levada a cabo pela Casa do Povo do Paul, no âmbito da candidatura ao “Cultura ao Centro 2024, da CCDRC”.",
|
| 138 |
+
"3.2. – ICOVI, Infraestruturas e Concessões da Covilhã, EM\n\nFoi presente à Câmara informação constante da plataforma de gestão documental SigmaDoc Web/NIPG: 15508/24_Pendente: 101576, relativa ao ofício da ICOVI – Infraestruturas e Concessões da Covilhã, EM, com a referência 11/23, datado de 02.abril.2024, no qual informa o Resultado Antes de Impostos de 2023 negativo no valor de - 176.266,35€ (cento e setenta e seis mil, duzentos e sessenta e seis euros e trinta e cinco cêntimos) e solicita a cobertura desse resultado.\n\nDocumento que se dá como inteiramente reproduzido na presente ata e fica, para todos os efeitos legais, arquivado em pasta própria existente para o efeito.\n\nO Senhor Vereador Ricardo Miguel Correia Leitão Ferreira da Silva criticou o facto de a empresa somente enviar à Câmara um pedido do valor sem pelo menos enviar o relatório e contas.\n\nNão participou na discussão e votação do presente assunto o Senhor Vereador José Miguel Ribeiro Oliveira, nos termos previstos no n.º 6 do artigo 55.º do Anexo I da Lei nº. 75/2013, de 12 de setembro que aprova o RJAL, conjugado com o artigo 69.º do CPA – Código do Procedimento Administrativo, aprovado pelo Decreto-lei n.º 4/2015, de 7 de janeiro, na nova redação, por exercer as funções de Presidente do Conselho da Administração.\n\nA Câmara deliberou, com o voto contra dos Senhores Vereadores Ricardo Miguel Correia Leitão Ferreira da Silva e Jorge Humberto Martins Simões, tendo em conta que a Empresa Municipal ICOVI – Infraestruturas e Concessões da Covilhã, EM, apresenta um Resultado Antes de Impostos de 2023 negativo no valor de - 176.266,35€ (cento e setenta e seis mil, duzentos e sessenta e seis euros e trinta e cinco cêntimos), nos termos da legislação aplicável, aprovar e efetuar uma transferência financeira no valor de 176.266,35€ (cento e setenta e seis mil, duzentos e sessenta e seis euros e trinta e cinco cêntimos)",
|
| 139 |
+
"Presente à Câmara informação, constante da distribuição no sistema informático de gestão documental com a referência EDOC/2022/27808, propondo a ratificação do Aditamento ao Contrato de Comparticipação entre o Instituto da Habitação e da Reabilitação Urbana, I.P. e o Município da Covilhã, destinado à Construção de edifício multifamiliar para 12 Alojamentos de Emergência (BNAUT).\n\nDocumentos que se dão como inteiramente reproduzidos na presente ata e ficam, para todos os efeitos legais, arquivados em pasta própria existente para o efeito.\n\nA Câmara deliberou ratificar o Aditamento ao Contrato de Comparticipação entre o Instituto da Habitação e da Reabilitação Urbana, I.P. e o Município da Covilhã – BNAUT, em que as Partes acordam em proceder à alteração do n.º 1 da Cláusula Terceira, do n.º 1 da Cláusula Quarta e da alínea a) do nº 1 da Cláusula Sexta do Contrato, e que tem por objeto a concessão de um apoio financeiro não reembolsável destinado a financiar a realização do projeto designado por “Construção de edifício multifamiliar para alojamento de emergência na Rua Comendador Gomes Correia n.º 39 a 65”, enquadrado no Aviso n.º 02/CO2-i02/2021, em que a Entidade Beneficiária é a Beneficiária Final, entidade globalmente responsável pela execução do Projeto de investimento ora contratualizado.",
|
| 140 |
+
"O Presidente da Câmara apresentou declaração de inexistência de conflitos de interesse relativamente aos procedimentos da ordem do dia da presente reunião, constantes dos pontos 1 a 7 e 9 a 18, que se dá aqui por reproduzida e fica arquivada em pasta anexa ao livro de atas.",
|
| 141 |
+
"7. TRÂNSITO – FREGUESIA DE PRAZINS SANTO TIRSO E CORVITE – ALTERAÇÃO DE TRÂNSITO NA TRAVESSA DO CAMPO NOVO - Presente a seguinte proposta: “Por forma a incrementar as condições de segurança e acessibilidade local dos moradores, a Junta de Freguesia submeteu proposta de alteração de trânsito na Travessa do Campo Novo, Freguesia de Prazins Santo Tirso e Corvite, no tramo compreendido entre a Travessa Nova do Campo Novo e a Rua 24 de Junho, aprovada pela Assembleia de Freguesia. Considerando os constrangimentos associados ao reduzido perfil transversal da Travessa do Campo Novo, a alteração potenciará o incremento da segurança rodoviária local, bem como a mitigação da prática de estacionamento em contravenção, submete-se à apreciação Camarária conforme postura anexa.” A postura e as atas dos órgãos executivo e deliberativo da Freguesia dão-se aqui por reproduzidos e ficam arquivados em pasta anexa ao livro de atas. DELIBERADO, POR UNANIMIDADE, SUBMETER À APROVAÇÃO DA ASSEMBLEIA MUNICIPAL.",
|
| 142 |
+
"1. Ata da reunião pública do Executivo Municipal de 11 de novembro de 2024.\nAprovada, por unanimidade, pelos presentes na reunião pública do Executivo Municipal de 11 de novembro de 2024.",
|
| 143 |
]
|
| 144 |
example_idx = 0
|
| 145 |
|
|
|
|
| 146 |
def next_example():
|
| 147 |
global example_idx
|
| 148 |
example_idx = (example_idx + 1) % len(suggestions)
|
| 149 |
return suggestions[example_idx]
|
| 150 |
|
|
|
|
| 151 |
def prev_example():
|
| 152 |
global example_idx
|
| 153 |
example_idx = (example_idx - 1 + len(suggestions)) % len(suggestions)
|
| 154 |
return suggestions[example_idx]
|
| 155 |
|
|
|
|
| 156 |
def use_suggestion(suggestion):
|
| 157 |
return suggestion
|
| 158 |
|
|
|
|
| 159 |
def classify_display(text):
|
| 160 |
preds = classifier.predict(text)
|
| 161 |
if not preds:
|
|
|
|
| 165 |
label = p["label"]
|
| 166 |
prob = p["probability"]
|
| 167 |
conf = p["confidence"]
|
| 168 |
+
color = {"high": "#00ff88", "medium": "#ffd966", "low": "#ff6666"}[conf]
|
| 169 |
+
chips += f"<span class='output-chip' style='border-color:{color}80;color:{color}'>{label} ({prob:.0%})</span>"
|
| 170 |
return f"<div style='display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:10px'>{chips}</div>"
|
| 171 |
|
| 172 |
+
# ---------------- CSS atualizado ----------------
|
|
|
|
| 173 |
custom_css = """
|
| 174 |
+
body { background-color: #0c0c0c; color: #f1f1f1; font-family: 'Inter', sans-serif; }
|
| 175 |
+
.gradio-container { background-color: #0c0c0c; color: #f1f1f1; }
|
| 176 |
+
h2, h3 { text-align: center; color: #00b4ff; font-weight: 600; }
|
| 177 |
+
textarea { background-color: #181818 !important; color: #fff !important; border-radius: 10px !important; border: 1px solid #333 !important; }
|
| 178 |
+
button { background-color: #007aff !important; color: white !important; font-weight: 600 !important; border-radius: 8px !important; border: none !important; }
|
| 179 |
+
button:hover { background-color: #00aaff !important; }
|
| 180 |
+
.output-chip { background-color: #1a1a1a; padding: 5px 12px; border-radius: 8px; font-weight: 500; border: 1px solid #007aff33; }
|
| 181 |
+
.suggestion-box { background-color: #112f50; border-radius: 10px; border: 1px solid #1f3c5a; padding: 10px; display: flex; align-items: center; justify-content: center; color: #eee; margin-top: 25px; position: relative; overflow: scroll; } .arrow-btn { width: 25px; height: 25px; font-size: 12px; padding: 0; background: none; border: none; color: #e0f0ff; cursor: pointer; font-weight: bold; }
|
| 182 |
+
|
| 183 |
+
.arrow-btn:hover { color: #ffffff; transform: scale(1.3); }
|
| 184 |
+
.use-btn { background-color:#66b3ff !important; color:#000 !important; font-weight:600 !important; border-radius:6px !important; padding:3px 8px !important; margin-left:5px;}
|
| 185 |
+
.use-btn:hover { background-color:#99ccff !important; }
|
| 186 |
+
.suggestion-box .prev-btn { position: absolute; top: 5px; left: 5px; }
|
| 187 |
+
.suggestion-box .next-btn { position: absolute; top: 5px; right: 5px; }
|
| 188 |
+
.suggestion-box .suggestion-text { width: 100%; text-align: center; border:none; background:none; color:#eee; font-weight:500; padding-top:8px; overflow-y: scroll;}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 189 |
"""
|
| 190 |
|
|
|
|
| 191 |
# ---------------- Gradio UI ----------------
|
| 192 |
with gr.Blocks(css=custom_css, theme="gradio/soft") as demo:
|
| 193 |
gr.Markdown("## 🏛️ **Council Matters Classifier – PT**")
|
| 194 |
+
gr.Markdown("### Insert your text (in portuguese):")
|
| 195 |
+
|
| 196 |
+
input_text = gr.Textbox(label="", placeholder="Write your text (in portuguese)...", lines=6)
|
| 197 |
|
| 198 |
+
classify_btn = gr.Button("Classify")
|
|
|
|
| 199 |
output = gr.HTML()
|
| 200 |
classify_btn.click(fn=classify_display, inputs=input_text, outputs=output)
|
| 201 |
|
|
|
|
| 203 |
prev_btn = gr.Button("⟨", elem_classes="prev-btn arrow-btn")
|
| 204 |
suggestion_display = gr.Textbox(value=suggestions[0], interactive=False, elem_classes="suggestion-text")
|
| 205 |
next_btn = gr.Button("⟩", elem_classes="next-btn arrow-btn")
|
| 206 |
+
use_btn = gr.Button("Use", elem_classes="use-btn")
|
| 207 |
|
| 208 |
prev_btn.click(fn=prev_example, outputs=suggestion_display)
|
| 209 |
next_btn.click(fn=next_example, outputs=suggestion_display)
|