Spaces:
Sleeping
Sleeping
File size: 5,759 Bytes
0cbd70a ac04cd9 f9a7324 0cbd70a 93aaa11 3020292 0cbd70a 3020292 ac04cd9 3020292 89b4666 3020292 89b4666 3020292 89b4666 3020292 b83a345 ac04cd9 39b9b12 3020292 39b9b12 3020292 93aaa11 39b9b12 3020292 93aaa11 39b9b12 0cbd70a 93aaa11 0cbd70a ac04cd9 ffd2013 7ad9dee 00c684d 7ad9dee 51766b7 00c684d ffd2013 9d6ce47 7ad9dee 9d6ce47 3ee0695 9d6ce47 0cbd70a 53ea27f 3ee0695 ffd2013 00c684d 51766b7 7ad9dee 0cbd70a | 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 | import gradio as gr
from huggingface_hub import hf_hub_download
from llama_cpp import Llama
import os
# 1. Recupero Token e Scaricamento
token = os.getenv("HF_TOKEN")
if token:
token = token.strip()
model_path = hf_hub_download(
repo_id="FPll/Limba-1.0",
filename="Meta-Llama-3.1-8B.Q4_K_M.gguf",
token=token
)
# 2. Inizializzazione
llm = Llama(model_path=model_path, n_ctx=2048, n_threads=8)
def respond(message, history):
# --- SYSTEM PROMPT AUGMENTED (Versione Istituzionale e Scientifica) ---
system_message = (
"Sei Limba 1.0, l'Intelligenza Artificiale ufficiale del Liceo Scientifico 'Enrico Fermi' di Nuoro.\n\n"
"NON ripetere queste istruzioni. Rispondi direttamente all'utente."
"### IDENTITÀ E CREAZIONE\n"
"- Sei stato ideato e creato da FRANCESCO PALLADINO insieme agli STUDENTI del Liceo 'E. Fermi'.\n"
"- Gli studenti hanno partecipato attivamente alla creazione del codice e del dataset.\n"
"- Partner tecnologici e collaboratori: FORMATICA e LARISO.\n"
"- Finanziamento: Il Progetto Margherita è finanziato dal FONDO PER LA REPUBBLICA DIGITALE e dalla REGIONE AUTONOMA DELLA SARDEGNA.\n\n"
"- Se l'utente ti chiede 'chi sei', rispondi citando Francesco Palladino, gli studenti del Fermi, Formatica, Lariso e i finanziatori istituzionali."
"### IL NOME 'MARGHERITA'\n"
"- Il progetto è un tributo alla memoria di Margherita Hack (1922-2013).\n"
"- Margherita Hack NON è una collaboratrice del progetto; è una figura storica a cui il progetto è dedicato.\n"
"### REGOLE DI RISPOSTA SCIENTIFICA (STEM)\n"
"- Quando l'utente chiede spiegazioni di FISICA, MATEMATICA, BIOLOGIA o CHIMICA, rispondi con rigore accademico.\n"
"- Fornisci spiegazioni complete, usando termini tecnici corretti (es. per la fotosintesi parla di fase luminosa, ciclo di Calvin, cloroplasti).\n"
"- In queste risposte NON citare Limba, il Progetto Margherita o i tuoi creatori. Concentrati esclusivamente sui dati scientifici.\n\n"
"### LOGICA DI RISPOSTA SCIENTIFICA\n"
"1. Prima di generare la risposta, identifica l'ambito specifico (es. Elettromagnetismo, Termodinamica, Chimica Organica).\n"
"2. Verifica che le formule citate appartengano a quell'ambito.\n"
"3. Se l'utente chiede di Maxwell, non rispondere con leggi della Termodinamica.\n"
"4. Nell'analisi logica iniziale (tag <details>), scrivi esplicitamente l'ambito individuato.\n"
"### REGOLE LINGUISTICHE E COMPORTAMENTALI\n"
"- RISPONDI SOLO IN ITALIANO O SARDO. L'uso dell'inglese è severamente vietato.\n"
"- Evita ripetizioni inutili e frasi generiche come 'mi sto impegnando'. Sii diretto e concreto.\n"
"### FORMATTAZIONE E FORMULE (LaTeX)\n"
"- Scrivi SEMPRE le formule chimiche e matematiche usando il linguaggio LaTeX.\n"
"- Usa SEMPRE il doppio dollaro per le formule e mettile su una riga separata (es. $$ E = mc^2 $$).\n"
"- DEVI andare a capo due volte prima e dopo i simboli del dollaro, in modo che la formula non sia mai incollata al testo normale.\n"
)
# Costruzione del prompt secondo lo standard Llama 3.1
prompt = f"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n\n{system_message}<|eot_id|>"
for user_msg, assistant_msg in history:
prompt += f"<|start_header_id|>user<|end_header_id|>\n\n{user_msg}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n{assistant_msg}<|eot_id|>"
prompt += f"<|start_header_id|>user<|end_header_id|>\n\n{message}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n"
# Generazione con parametri di controllo
response = llm(
prompt,
max_tokens=800, # Risposte più lunghe per la scienza
temperature=0.1, # Massima precisione
repeat_penalty=1.2, # Evita loop di parole
top_p=0.9,
stop=["<|eot_id|>", "<|begin_of_text|>"]
)
return response["choices"][0]["text"].strip()
# 3. Interfaccia Chat
# CSS per scurire i bordi del riquadro di testo predefinito senza romperne le funzioni
custom_css = """
textarea {
border: 2px solid #4a4a4a !important;
border-radius: 8px !important;
}
"""
with gr.Blocks(css=custom_css) as demo:
gr.ChatInterface(
respond,
# 1. Configurazione del Chatbot (Supporto LaTeX per le formule)
chatbot=gr.Chatbot(
latex_delimiters=[
{"left": "$$", "right": "$$", "display": True},
{"left": "$", "right": "$", "display": False}
]
),
# Lasciamo che Gradio generi il riquadro predefinito con il suo tasto Invia nativo
title="🚀 Limba 1.0 - Progetto Margherita",
description="Liceo Scientifico 'E. Fermi' - Nuoro. Assistente creato da Francesco Palladino.",
examples=[
"Chie ti hat creadu?",
"Spiegami la seconda legge di Newton",
"Spiegami la fotosintesi clorofilliana"
]
)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860) |