llm_ticket3/utils/script_default_ollama.py
2025-04-30 17:45:17 +02:00

151 lines
6.9 KiB
Python

import requests
import json
import os
from datetime import datetime
# Configuration
MODEL_NAME = "llama3.2-vision:90b-instruct-q8_0"
OLLAMA_URL = "http://217.182.105.173:11434"
def get_model_settings():
# Endpoint Ollama pour obtenir les informations du modèle
model_url = f"{OLLAMA_URL}/api/show"
headers = {
"Content-Type": "application/json"
}
data = {
"name": MODEL_NAME
}
try:
print(f"🔄 Tentative de récupération des paramètres depuis Ollama...")
response = requests.post(model_url, headers=headers, json=data)
if response.status_code == 200:
try:
# S'assurer que nous avons un JSON valide
if isinstance(response.text, str):
settings = json.loads(response.text)
else:
settings = response.json()
# Créer un dossier 'settings' s'il n'existe pas
os.makedirs('settings', exist_ok=True)
# Sauvegarder la réponse brute pour debug
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
raw_filename = f"settings/ollama_raw_{timestamp}.json"
with open(raw_filename, 'w', encoding='utf-8') as f:
json.dump(settings, f, indent=2, ensure_ascii=False)
print(f"✅ Réponse brute sauvegardée dans: {raw_filename}")
# Créer la configuration avec des valeurs par défaut
config = {
"model_name": MODEL_NAME,
"ollama_url": OLLAMA_URL,
"parameters": {
# Paramètres fondamentaux
"temperature": 0.7,
"top_p": 0.95,
"top_k": 40,
# Système de pénalités
"repeat_penalty": 1.1,
"presence_penalty": 0.2,
"frequency_penalty": 0.2,
# Paramètres de longueur et contexte
"num_predict": 1024, # alias pour max_tokens
"num_keep": 0, # tokens à conserver
"stop": [], # séquences d'arrêt
# Paramètres Mirostat
"mirostat": 0, # 0 = désactivé, 1 = v1, 2 = v2
"mirostat_eta": 0.1, # taux d'apprentissage
"mirostat_tau": 5.0, # cible de surprise
# Paramètres de contrôle avancé
"logit_bias": {}, # biais pour certains tokens
"p_min": 0.05, # probabilité minimale pour le sampling
"repeat_last_n": 64, # nombre de tokens à considérer pour la pénalité de répétition
# Paramètres système
"num_ctx": 4096, # taille du contexte
"num_thread": 4, # threads CPU
"num_gpu": 1, # nombre de GPU
"seed": 0, # graine aléatoire (0 = aléatoire)
# Paramètres de streaming
"stream": True, # activation du streaming
# Optimisations mémoire
"mmap": True, # utilisation de mmap
"mlock": False, # verrouillage en mémoire
# Paramètres expérimentaux
"num_batch": 512, # taille du batch
"num_beam": 1, # beam search (1 = désactivé)
"tfs_z": 1.0, # tail free sampling
"typical_p": 1.0, # typical sampling
}
}
# Mettre à jour avec les valeurs reçues si elles existent
if isinstance(settings, dict):
if 'parameters' in settings:
params = settings['parameters']
if isinstance(params, dict):
config['parameters'].update(params)
# Sauvegarder la configuration dans un fichier Python
config_filename = "settings/model_config.py"
with open(config_filename, 'w', encoding='utf-8') as f:
f.write("# Configuration automatiquement générée pour le modèle\n")
f.write(f"# Date de génération: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
f.write("MODEL_CONFIG = {\n")
for key, value in config.items():
if isinstance(value, dict):
f.write(f" '{key}': {{\n")
for k, v in value.items():
f.write(f" '{k}': {repr(v)},\n")
f.write(" },\n")
else:
f.write(f" '{key}': {repr(value)},\n")
f.write("}\n")
# Sauvegarder aussi en JSON
config_json_filename = "settings/model_config.json"
with open(config_json_filename, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
print(f"✅ Configuration générée dans: {config_filename}")
print(f"✅ Configuration JSON sauvegardée dans: {config_json_filename}")
print("\nParamètres récupérés:")
print(json.dumps(config, indent=2, ensure_ascii=False))
except json.JSONDecodeError as e:
print(f"❌ Erreur de décodage JSON: {str(e)}")
print("Réponse reçue:", response.text[:200])
else:
print(f"❌ Erreur {response.status_code}: {response.text}")
# Essayons de lister les modèles disponibles
list_url = f"{OLLAMA_URL}/api/tags"
list_response = requests.get(list_url)
if list_response.status_code == 200:
models = list_response.json()
print("\n📋 Modèles disponibles:")
for model in models.get('models', []):
print(f"- {model.get('name', 'Unknown')}")
except requests.exceptions.RequestException as e:
print(f"❌ Erreur de connexion: {str(e)}")
print("\nVérifiez que:")
print(f"1. Le serveur Ollama est accessible sur {OLLAMA_URL}")
print(f"2. Le modèle {MODEL_NAME} est bien installé")
if __name__ == "__main__":
get_model_settings()