12effa1a51
- step-9/: config.py, rag.py, retrieve.py → root; test_ollama.py → ollama/ - step-7/: eliminata, già coperta da ollama/ - sys.path aggiornati in rag.py, retrieve.py, ingest.py, check_env.py (step-7 e ollama) - Riferimenti step-9/config.py → config.py in tutti i file
67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test chat locale Ollama — senza RAG, senza ChromaDB.
|
|
Uso: python ollama/test_ollama.py
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
import urllib.error
|
|
import urllib.request
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
import config as _cfg
|
|
|
|
OLLAMA_URL = _cfg.OLLAMA_URL
|
|
MODEL = _cfg.OLLAMA_MODEL
|
|
TEMPERATURE = _cfg.TEMPERATURE
|
|
NO_THINK = _cfg.NO_THINK
|
|
|
|
|
|
def chat(prompt: str) -> str:
|
|
payload = json.dumps({
|
|
"model": MODEL,
|
|
"prompt": prompt,
|
|
"stream": False,
|
|
"think": not NO_THINK,
|
|
"options": {"temperature": TEMPERATURE},
|
|
}).encode()
|
|
req = urllib.request.Request(
|
|
f"{OLLAMA_URL}/api/generate",
|
|
data=payload,
|
|
headers={"Content-Type": "application/json"},
|
|
method="POST",
|
|
)
|
|
with urllib.request.urlopen(req, timeout=300) as resp:
|
|
return json.loads(resp.read())["response"].strip()
|
|
|
|
|
|
def main() -> int:
|
|
print(f"─── Chat Ollama ──────────────────────────────── (exit per uscire)")
|
|
print(f" Modello : {MODEL}")
|
|
print(f" Thinking : {'off' if NO_THINK else 'on'}")
|
|
print()
|
|
|
|
while True:
|
|
try:
|
|
user = input("Tu: ").strip()
|
|
except (EOFError, KeyboardInterrupt):
|
|
print("\nUscita.")
|
|
break
|
|
if not user:
|
|
continue
|
|
if user.lower() == "exit":
|
|
break
|
|
try:
|
|
reply = chat(user)
|
|
print(f"\nAssistente: {reply}\n")
|
|
except (urllib.error.URLError, OSError) as e:
|
|
print(f"❌ Errore: {e}")
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|