Update app.py
Browse files
app.py
CHANGED
|
@@ -14,6 +14,10 @@ if not os.path.exists(musl_path):
|
|
| 14 |
import gradio as gr
|
| 15 |
from huggingface_hub import hf_hub_download
|
| 16 |
from llama_cpp import Llama
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
|
| 18 |
REPO_ID = "FPll/limba-mentor-llama3-gguf"
|
| 19 |
FILENAME = "Meta-Llama-3.1-8B.Q4_K_M.gguf"
|
|
@@ -33,15 +37,41 @@ llm = Llama(
|
|
| 33 |
verbose=False
|
| 34 |
)
|
| 35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
def respond(message, history):
|
| 37 |
# 1. IL SALVAVITA: Emette un segnale vuoto per impedire a Gradio di andare in crash (StopAsyncIteration)
|
| 38 |
partial_message = ""
|
| 39 |
yield partial_message
|
| 40 |
|
| 41 |
try:
|
| 42 |
-
# Estrazione sicura del testo nel caso Gradio invii un dizionario
|
| 43 |
msg_text = message.get("text", "") if isinstance(message, dict) else str(message)
|
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
system_instruction = (
|
| 46 |
"Sei Limba 2.0, creato da Francesco Palladino. Sei un modello di linguaggio che parla sardo (LSC) e italiano.\n"
|
| 47 |
"REGOLE DA RISPETTARE:\n"
|
|
@@ -49,6 +79,7 @@ def respond(message, history):
|
|
| 49 |
"2. Se l'utente chiede una formula o se nella risposta scrivi formule, usa il formato LaTeX racchiuso tra doppi simboli di dollaro ($$) su una riga separata, esempio: $$E=mc^2$$.\n"
|
| 50 |
"3. Se l'utente ti saluta (es. 'Ciao', 'Buongiorno'), rispondi esclusivamente con: 'Salude! So Limba 2.0, comente ti potzo agiudare?' e fermati.\n"
|
| 51 |
"4. Se l'utente fa una richiesta su un argomento specifico, rispondi alla richiesta in modo completo e accurato.\n"
|
|
|
|
| 52 |
)
|
| 53 |
|
| 54 |
few_shot = (
|
|
|
|
| 14 |
import gradio as gr
|
| 15 |
from huggingface_hub import hf_hub_download
|
| 16 |
from llama_cpp import Llama
|
| 17 |
+
import wikipedia
|
| 18 |
+
|
| 19 |
+
# 1. Imposta Wikipedia Ufficialmente in Sardo (LSC/Logudorese/Campidanese)
|
| 20 |
+
wikipedia.set_lang("sc")
|
| 21 |
|
| 22 |
REPO_ID = "FPll/limba-mentor-llama3-gguf"
|
| 23 |
FILENAME = "Meta-Llama-3.1-8B.Q4_K_M.gguf"
|
|
|
|
| 37 |
verbose=False
|
| 38 |
)
|
| 39 |
|
| 40 |
+
def cerca_su_wikipedia(query):
|
| 41 |
+
"""Cerca su Wikipedia in sardo e restituisce un piccolo riassunto"""
|
| 42 |
+
try:
|
| 43 |
+
# Pulisce la domanda per trovare meglio l'argomento (es. da "Chi è Grazia Deledda?" a "Grazia Deledda")
|
| 44 |
+
query_pulita = query.replace("Chie est", "").replace("Chi è", "").replace("Cos'è", "").replace("Ite est", "").strip()
|
| 45 |
+
|
| 46 |
+
risultati = wikipedia.search(query_pulita, results=1)
|
| 47 |
+
if risultati:
|
| 48 |
+
titolo = risultati[0]
|
| 49 |
+
riassunto = wikipedia.summary(titolo, sentences=3) # Prende le prime 3 frasi
|
| 50 |
+
return f"[INFORMATZIONES CORTAS DAE WIKIPEDIA: {riassunto}]"
|
| 51 |
+
return ""
|
| 52 |
+
except Exception as e:
|
| 53 |
+
# Se la pagina non esiste o c'è un errore, proseguiamo senza
|
| 54 |
+
return ""
|
| 55 |
+
|
| 56 |
def respond(message, history):
|
| 57 |
# 1. IL SALVAVITA: Emette un segnale vuoto per impedire a Gradio di andare in crash (StopAsyncIteration)
|
| 58 |
partial_message = ""
|
| 59 |
yield partial_message
|
| 60 |
|
| 61 |
try:
|
|
|
|
| 62 |
msg_text = message.get("text", "") if isinstance(message, dict) else str(message)
|
| 63 |
|
| 64 |
+
# --- IL TRUCCO RAG (Retrieval-Augmented Generation) ---
|
| 65 |
+
contesto_wiki = cerca_su_wikipedia(msg_text)
|
| 66 |
+
|
| 67 |
+
if contesto_wiki:
|
| 68 |
+
# Se trova qualcosa, lo inietta di nascosto nella domanda
|
| 69 |
+
msg_arricchito = f"{contesto_wiki}\n\nRispondi alla seguente domanda basandoti ESCLUSIVAMENTE sulle informatziones de Wikipedia fornite qui sopra. Domanda: {msg_text}"
|
| 70 |
+
else:
|
| 71 |
+
# Se non trova niente, fa una domanda normale
|
| 72 |
+
msg_arricchito = msg_text
|
| 73 |
+
# ------------------------------------------------------
|
| 74 |
+
|
| 75 |
system_instruction = (
|
| 76 |
"Sei Limba 2.0, creato da Francesco Palladino. Sei un modello di linguaggio che parla sardo (LSC) e italiano.\n"
|
| 77 |
"REGOLE DA RISPETTARE:\n"
|
|
|
|
| 79 |
"2. Se l'utente chiede una formula o se nella risposta scrivi formule, usa il formato LaTeX racchiuso tra doppi simboli di dollaro ($$) su una riga separata, esempio: $$E=mc^2$$.\n"
|
| 80 |
"3. Se l'utente ti saluta (es. 'Ciao', 'Buongiorno'), rispondi esclusivamente con: 'Salude! So Limba 2.0, comente ti potzo agiudare?' e fermati.\n"
|
| 81 |
"4. Se l'utente fa una richiesta su un argomento specifico, rispondi alla richiesta in modo completo e accurato.\n"
|
| 82 |
+
"5. Se ricevi informazioni con il tag [INFORMATZIONES CORTAS DAE WIKIPEDIA], usale per rispondere senza inventare ASSOLUTAMENTE nulla. Traduci in sardo se necessario.\n"
|
| 83 |
)
|
| 84 |
|
| 85 |
few_shot = (
|