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())
|