File size: 1,941 Bytes
11c4c8e
0b058a7
 
11c4c8e
46bd85e
 
11c4c8e
46bd85e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11c4c8e
0b058a7
46bd85e
 
 
0b058a7
 
 
 
 
 
 
 
11c4c8e
0b058a7
46bd85e
0b058a7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46bd85e
 
0b058a7
11c4c8e
 
 
0b058a7
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
import gradio as gr
from llama_cpp import Llama
from huggingface_hub import hf_hub_download

# Variabile globale vuota per il modello
llm = None

def load_model_if_needed():
    global llm
    if llm is None:
        # Questo avverrà solo al PRIMO messaggio
        print("Scaricamento e caricamento del modello in corso (attendi)...")
        model_path = hf_hub_download(
            repo_id="FPll/limba-mentor-llama3-gguf", 
            filename="Meta-Llama-3.1-8B.Q4_K_M.gguf" 
        )
        llm = Llama(
            model_path=model_path, 
            n_ctx=4096, 
            n_threads=2, 
            verbose=False
        )
    return llm

def generate_response(message, history):
    # Chiama la funzione per assicurarsi che il modello sia caricato
    model = load_model_if_needed()
    
    messages = [
        {"role": "system", "content": "Sei Limba, un assistente alla programmazione esperto, diretto e preciso."}
    ]
    
    for user_msg, bot_msg in history:
        messages.append({"role": "user", "content": user_msg})
        messages.append({"role": "assistant", "content": bot_msg})
        
    messages.append({"role": "user", "content": message})
    
    response = model.create_chat_completion(
        messages=messages,
        max_tokens=512,
        stream=True
    )
    
    partial_message = ""
    for chunk in response:
        if "choices" in chunk and len(chunk["choices"]) > 0:
            delta = chunk["choices"][0].get("delta", {})
            if "content" in delta:
                partial_message += delta["content"]
                yield partial_message

demo = gr.ChatInterface(
    fn=generate_response,
    title="Limba 2.0",
    description="Il tuo assistente esperto. Nota: Il PRIMO messaggio richiederà 1-2 minuti di attesa per avviare il motore interno.",
    examples=["Come posso ottimizzare un loop in Python?"],
    theme="soft"
)

if __name__ == "__main__":
    demo.launch()