File size: 3,739 Bytes
5370228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import requests
import json
from config.settings import MISTRAL_API_KEY, MISTRAL_URL


class MistralService:
    def __init__(self):
        self.api_key = MISTRAL_API_KEY
        self.api_url = MISTRAL_URL

    def analyze_query(self, query):
        """
        Analyse la requête utilisateur pour distinguer la marque et le produit
        :param query:
        :return: JSON
        """

        if not self.api_key:
            return {"product": query, "brand": "", "quality_filter": "none", "explanation": "Pas de clé Mistral"}

        prompt = f"""Analyse cette requête de recherche alimentaire, tu es capable de différencier la marque et le produit, et réponds en JSON :

Requête: "{query}"

RÈGLES IMPORTANTES :
- Si c'est un nom de produit avec parfum/goût (ex: "danette chocolat", "yaourt fraise", "pizza 4 fromages"), alors TOUT est le PRODUIT
- Séparer produit/marque SEULEMENT si ton analyse en conclue que c'est une marque.
- Les parfums/goûts/saveurs ne sont PAS des marques : chocolat, vanille, fraise, pistache, caramel, etc.

Réponds uniquement avec ce format JSON :
{{
    "product": "nom du produit recherché",
    "brand": "marque si explicitement une VRAIE marque connue ou vide",
    "explanation": "explication courte"
}}

Exemples :
- "danette pistache" → {{"product": "danette pistache", "brand": "", "quality_filter": "none", "explanation": "Recherche produit Danette parfum pistache"}}
- "yaourt fraise" → {{"product": "yaourt fraise", "brand": "", "quality_filter": "none", "explanation": "Recherche yaourt parfum fraise"}}
- "pizza 4 fromages" → {{"product": "pizza 4 fromages", "brand": "", "quality_filter": "none", "explanation": "Recherche pizza 4 fromages"}}
- "yaourt danone fraise" → {{"product": "yaourt fraise", "brand": "danone", "quality_filter": "none", "explanation": "Yaourt fraise de la marque Danone"}}
- "pizza picard" → {{"product": "pizza", "brand": "picard", "quality_filter": "none", "explanation": "Pizzas de la marque Picard"}}
- "nutella" → {{"product": "nutella", "brand": "", "quality_filter": "none", "explanation": "Recherche produit Nutella"}}
- "coca cola" → {{"product": "coca cola", "brand": "", "quality_filter": "none", "explanation": "Recherche produit Coca Cola"}}
"""

        try:
            headers = {
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json"
            }

            data = {
                "model": "mistral-small",
                "messages": [{"role": "user", "content": prompt}],
                "temperature": 0.1,
                "max_tokens": 200
            }

            response = requests.post(self.api_url, headers=headers, json=data, timeout=10)

            if response.status_code == 200:
                result = response.json()
                content = result["choices"][0]["message"]["content"]

                content = content.strip()
                if content.startswith("```json"):
                    content = content[7:]
                if content.startswith("```"):
                    content = content[3:]
                if content.endswith("```"):
                    content = content[:-3]

                start_idx = content.find('{')
                end_idx = content.rfind('}')
                if start_idx != -1 and end_idx != -1:
                    content = content[start_idx:end_idx + 1]

                analysis = json.loads(content)
                print(f"🤖 Mistral understand : {analysis.get('explanation', '')}")
                return analysis

            else:
                print(f"❌ Mistral API error: {response.status_code}")

        except Exception as e:
            print(f"❌ Mistral error: {e}")