Refactor model handling and agent construction; remove deprecated example script
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
# Vogliamo usare una versione di linux leggera con già uv installato
|
||||
# Infatti scegliamo l'immagine ufficiale di uv che ha già tutto configurato
|
||||
# Nel caso in cui si volesse usare un'altra immagine di base che ha magari CUDA
|
||||
# bisognerebbe installare uv manualmente come descritto nel README
|
||||
|
||||
FROM ghcr.io/astral-sh/uv:python3.12-alpine
|
||||
|
||||
# Dopo aver definito la workdir mi trovo già in essa
|
||||
@@ -22,4 +19,4 @@ COPY LICENSE .
|
||||
COPY src ./src
|
||||
|
||||
# Comando di default all'avvio dell'applicazione
|
||||
CMD ["python", "src/example.py"]
|
||||
CMD ["python", "src/app.py"]
|
||||
|
||||
14
README.md
14
README.md
@@ -12,7 +12,7 @@ Per l'installazione si può utilizzare un approccio tramite **uv** (manuale) opp
|
||||
|
||||
Prima di avviare l'applicazione è però necessario configurare correttamente le API keys e installare Ollama per l'utilizzo dei modelli locali, altrimenti il progetto, anche se installato correttamente, non riuscirà a partire.
|
||||
|
||||
## API Keys
|
||||
### API Keys
|
||||
Le API Keys puoi ottenerle tramite i seguenti servizi:
|
||||
- **Google AI**: [Google AI Studio](https://makersuite.google.com/app/apikey) (gratuito con limiti)
|
||||
- **Anthropic**: [Anthropic Console](https://console.anthropic.com/)
|
||||
@@ -21,14 +21,11 @@ Le API Keys puoi ottenerle tramite i seguenti servizi:
|
||||
|
||||
Nota che alcune API sono gratuite con limiti di utilizzo, altre sono a pagamento. Google offre attualmente l'accesso gratuito con limiti ragionevoli.
|
||||
|
||||
## Ollama (Modelli Locali)
|
||||
### Ollama (Modelli Locali)
|
||||
Per utilizzare modelli AI localmente, è necessario installare Ollama:
|
||||
|
||||
**1. Installazione Ollama**:
|
||||
- **Linux**:
|
||||
```sh
|
||||
curl -fsSL https://ollama.com/install.sh | sh
|
||||
```
|
||||
- **Linux**: `curl -fsSL https://ollama.com/install.sh | sh`
|
||||
- **macOS/Windows**: Scarica l'installer da [https://ollama.com/download/windows](https://ollama.com/download/windows)
|
||||
|
||||
**2. GPU Support (Raccomandato)**:
|
||||
@@ -37,10 +34,7 @@ Per utilizzare la GPU con Ollama, assicurati di avere NVIDIA CUDA Toolkit instal
|
||||
- **Documentazione WSL**: [CUDA WSL User Guide](https://docs.nvidia.com/cuda/wsl-user-guide/index.html)
|
||||
|
||||
**3. Installazione Modelli**:
|
||||
Esempio per installare un modello locale:
|
||||
```sh
|
||||
ollama pull gemma3:4b
|
||||
```
|
||||
Esempio per installare un modello locale: `ollama pull gpt-oss`
|
||||
|
||||
### Variabili d'Ambiente
|
||||
|
||||
|
||||
@@ -19,15 +19,11 @@ dependencies = [
|
||||
# ✅ per fare una UI web semplice con input e output
|
||||
"gradio",
|
||||
|
||||
# ❌ per l'elaborazione del linguaggio naturale in locale (https://huggingface.co/learn/llm-course/chapter1/3?fw=pt)
|
||||
#"transformers",
|
||||
# ❌ per fare chiamate a modelli indipendentemente dal modello specifico (astrae meglio rispetto a openai)
|
||||
#"langchain",
|
||||
# ✅ per costruire agenti (ovvero modelli che possono fare più cose tramite tool) https://github.com/agno-agi/agno
|
||||
# altamente consigliata dato che ha anche tools integrati per fare scraping, calcoli e molto altro
|
||||
# oltre a questa è necessario installare anche le librerie specifiche per i modelli che si vogliono usare
|
||||
"agno",
|
||||
# ✅ Modelli supportati e installati (aggiungere qui sotto quelli che si vogliono usare)
|
||||
"google-genai",
|
||||
# ☑️ per usare modelli in locale
|
||||
"ollama",
|
||||
]
|
||||
|
||||
65
src/app.py
65
src/app.py
@@ -1,8 +1,63 @@
|
||||
import agno
|
||||
import gradio
|
||||
import dotenv
|
||||
import requests
|
||||
from dotenv import load_dotenv
|
||||
from enum import Enum
|
||||
|
||||
from agno.agent import Agent
|
||||
from agno.models.base import BaseModel
|
||||
from agno.models.google import Gemini
|
||||
from agno.models.ollama import Ollama
|
||||
from agno.tools.reasoning import ReasoningTools
|
||||
|
||||
class Model(Enum):
|
||||
"""
|
||||
Enum per i modelli supportati.
|
||||
Aggiungere nuovi modelli qui se necessario.
|
||||
Per quanto riguarda Ollama, i modelli dovrano essere scaricati e installati
|
||||
localmente seguendo le istruzioni di https://ollama.com/docs/guide/install-models
|
||||
"""
|
||||
GEMINI = "gemini-2.0-flash" # API online
|
||||
OLLAMA = "llama3.1" # little and fast (7b) but not so good
|
||||
OLLAMA_GPT = "gpt-oss" # a bit big (13b) but very good (almost like gemini API)
|
||||
OLLAMA_GEMMA = "gemma3:4b" # no tool support
|
||||
OLLAMA_DEEP = "deepseek-r1:8b" # no tool support
|
||||
OLLAMA_QWEN = "qwen3:8b" # good
|
||||
|
||||
def get_model(model: Model, instructions:str = None) -> BaseModel:
|
||||
"""
|
||||
Restituisce un'istanza del modello specificato.
|
||||
"""
|
||||
name = model.value
|
||||
|
||||
if model in {Model.GEMINI}:
|
||||
return Gemini(name, instructions=instructions)
|
||||
elif model in {Model.OLLAMA, Model.OLLAMA_GPT, Model.OLLAMA_GEMMA, Model.OLLAMA_DEEP, Model.OLLAMA_QWEN}:
|
||||
return Ollama(name, instructions=instructions)
|
||||
|
||||
raise ValueError(f"Modello non supportato: {model}")
|
||||
|
||||
def build_agent(model:Model, instructions: str) -> Agent:
|
||||
"""
|
||||
Costruisce un agente con il modello e le istruzioni specificate.
|
||||
"""
|
||||
return Agent(
|
||||
model=get_model(model, instructions=instructions),
|
||||
tools=[ReasoningTools()],
|
||||
instructions=instructions,
|
||||
markdown=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Hello World!")
|
||||
# da fare assolutamente prima di usare tutto perchè carica le variabili d'ambiente
|
||||
# come le API key nel nostro caso
|
||||
load_dotenv()
|
||||
|
||||
prompt = "Scrivi una poesia su un gatto."
|
||||
instructions = "Rispondi in italiano e molto brevemente. Usa tabelle per visualizzare i dati."
|
||||
|
||||
gemini = build_agent(Model.GEMINI, instructions=instructions).run(prompt)
|
||||
print(f"Risposta Gemini:\n{gemini.content}\n==============================")
|
||||
|
||||
ollama = build_agent(Model.OLLAMA_GPT, instructions=instructions).run(prompt)
|
||||
print(f"\nRisposta Ollama GPT:\n{ollama.content}\n==============================")
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
from agno.agent import Agent
|
||||
from agno.models.google import Gemini
|
||||
from agno.tools.reasoning import ReasoningTools
|
||||
from dotenv import load_dotenv
|
||||
import ollama
|
||||
from ollama_demo import generate_text
|
||||
|
||||
def run_gemini_poem():
|
||||
load_dotenv()
|
||||
reasoning_agent = Agent(
|
||||
model=Gemini(),
|
||||
tools=[ReasoningTools()],
|
||||
instructions="Use tables to display data.",
|
||||
markdown=True,
|
||||
)
|
||||
result = reasoning_agent.run("Scrivi una poesia su un gatto. Sii breve.")
|
||||
print(result.content)
|
||||
|
||||
def run_ollama_codegemma_poem():
|
||||
prompt = "Scrivi una poesia su un gatto. Sii breve."
|
||||
response = generate_text(model="gpt-oss:latest", prompt=prompt)
|
||||
print(response)
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Risposta Gemini:")
|
||||
run_gemini_poem()
|
||||
print("\nRisposta Ollama GPT-OSS:")
|
||||
run_ollama_codegemma_poem()
|
||||
Reference in New Issue
Block a user