Ajout génération de messages par IA via l'abonnement ChatGPT
- Provider chatgpt de LiteLLM (Sign in with ChatGPT, sans clé API) - Module ia.py : login device-code, token local portable (.chatgpt/), génération streaming - Routes /api/message, /api/ia/login, /api/ia/status - UI : boutons Générer/Peaufiner par prospect, connexion ChatGPT + modèle IA dans les Paramètres
This commit is contained in:
39
app.py
39
app.py
@@ -12,6 +12,7 @@ from flask import Flask, Response, jsonify, request, send_file, stream_with_cont
|
||||
|
||||
import excel
|
||||
import extractor
|
||||
import ia
|
||||
import scraper
|
||||
import trajet
|
||||
|
||||
@@ -42,6 +43,7 @@ CONFIG_DEFAUT = {
|
||||
"Seriez-vous disponible pour en échanger ?\n\n"
|
||||
"Bien cordialement,"
|
||||
),
|
||||
"ia_modele": ia.MODELE_DEFAUT,
|
||||
}
|
||||
|
||||
app = Flask(__name__, static_folder="static")
|
||||
@@ -309,7 +311,7 @@ def api_config_lire():
|
||||
def api_config_ecrire():
|
||||
donnees = request.get_json(silent=True) or {}
|
||||
config = lire_config()
|
||||
for cle in ("adresse_depart", "modele_message"):
|
||||
for cle in ("adresse_depart", "modele_message", "ia_modele"):
|
||||
if cle in donnees:
|
||||
config[cle] = str(donnees[cle])
|
||||
for cle in ("conso_l_100km", "prix_carburant", "cout_peage_km"):
|
||||
@@ -327,6 +329,41 @@ def api_config_ecrire():
|
||||
return jsonify({"ok": True, "config": config})
|
||||
|
||||
|
||||
@app.get("/api/ia/status")
|
||||
def api_ia_status():
|
||||
return jsonify(ia.statut_login())
|
||||
|
||||
|
||||
@app.post("/api/ia/login")
|
||||
def api_ia_login():
|
||||
try:
|
||||
return jsonify(ia.lancer_login())
|
||||
except Exception as e:
|
||||
return jsonify({"error": "login", "message": f"Échec du démarrage de la connexion : {e}"}), 502
|
||||
|
||||
|
||||
@app.post("/api/message")
|
||||
def api_message():
|
||||
donnees = request.get_json(silent=True) or {}
|
||||
prospect = donnees.get("prospect") or {}
|
||||
mode = donnees.get("mode") or "generer"
|
||||
if not prospect.get("Nom du prospect"):
|
||||
return jsonify({"error": "prospect_vide", "message": "Prospect sans nom."}), 400
|
||||
config = lire_config()
|
||||
try:
|
||||
message = ia.generer_message(
|
||||
prospect, config.get("modele_message", ""), mode,
|
||||
nom_modele=config.get("ia_modele") or ia.MODELE_DEFAUT,
|
||||
)
|
||||
return jsonify({"message": message})
|
||||
except ia.IANonConnecte as e:
|
||||
return jsonify({"error": "non_connecte", "message": str(e)}), 401
|
||||
except ia.IAErreur as e:
|
||||
return jsonify({"error": "ia", "message": str(e)}), 502
|
||||
except Exception as e:
|
||||
return jsonify({"error": "erreur", "message": f"Échec de la génération : {e}"}), 500
|
||||
|
||||
|
||||
@app.get("/api/distance/<int:idx>")
|
||||
def api_distance(idx):
|
||||
lignes = lire_prospects()
|
||||
|
||||
Reference in New Issue
Block a user