File size: 3,212 Bytes
1d46e48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import uuid
from typing import Dict, List, Optional
from datetime import datetime
import json

# Pour Groq Chat API (si vous utilisez Groq)
import requests
from config import GROQ_API_KEY, GROQ_CHAT_MODEL

# Stockage en mémoire (remplacez par une base de données en production)
conversation_store: Dict[str, List[Dict]] = {}

def generate_chat_response(
    user_input: str,
    conversation_id: Optional[str] = None,
    system_prompt: Optional[str] = None
) -> str:
    """
    Génère une réponse de chatbot pour une entrée utilisateur
    """
    # 1. Gérer la conversation
    if not conversation_id:
        conversation_id = str(uuid.uuid4())
        conversation_store[conversation_id] = []
    
    # 2. Ajouter le message utilisateur à l'historique
    conversation_store[conversation_id].append({
        "role": "user",
        "content": user_input,
        "timestamp": datetime.now().isoformat()
    })
    
    # 3. Préparer le prompt système
    if not system_prompt:
        system_prompt = """Tu es un assistant vocal amical et utile. 
        Tes réponses doivent être naturelles à l'oral, concises 
        (max 2-3 phrases) et adaptées à une synthèse vocale."""
    
    # 4. Préparer les messages pour l'API Groq
    messages = [{"role": "system", "content": system_prompt}]
    
    # Ajouter l'historique (limité aux derniers messages pour le contexte)
    history = conversation_store[conversation_id][-5:]  # Derniers 5 échanges
    for msg in history:
        messages.append({"role": msg["role"], "content": msg["content"]})
    
    # 5. Appeler l'API Groq Chat
    try:
        response_text = call_groq_chat_api(messages)
    except Exception as e:
        # Fallback simple
        response_text = f"Désolé, je ne peux pas répondre pour le moment. Erreur: {str(e)}"
    
    # 6. Ajouter la réponse à l'historique
    conversation_store[conversation_id].append({
        "role": "assistant",
        "content": response_text,
        "timestamp": datetime.now().isoformat()
    })
    
    return response_text

def call_groq_chat_api(messages: List[Dict]) -> str:
    """
    Appelle l'API Groq Chat
    """
    if not GROQ_API_KEY:
        raise RuntimeError("GROQ_API_KEY non configurée")
    
    url = "https://api.groq.com/openai/v1/chat/completions"
    
    headers = {
        "Authorization": f"Bearer {GROQ_API_KEY}",
        "Content-Type": "application/json"
    }
    
    payload = {
        "model": GROQ_CHAT_MODEL,
        "messages": messages,
        "temperature": 0.7,
        "max_tokens": 150,  # Limité pour les réponses vocales
        "top_p": 0.9,
    }
    
    response = requests.post(url, headers=headers, json=payload, timeout=30)
    response.raise_for_status()
    
    result = response.json()
    return result["choices"][0]["message"]["content"]

def get_conversation_history(conversation_id: str) -> List[Dict]:
    """
    Récupère l'historique d'une conversation
    """
    return conversation_store.get(conversation_id, [])

def clear_conversation(conversation_id: str):
    """
    Efface une conversation
    """
    if conversation_id in conversation_store:
        del conversation_store[conversation_id]