File size: 4,198 Bytes
c76b52d
 
5771329
c76b52d
 
 
7638888
5771329
 
 
d6ece0d
5771329
c76b52d
d6ece0d
c76b52d
 
 
d6ece0d
 
c76b52d
d6ece0d
c76b52d
 
 
 
d6ece0d
c76b52d
 
 
 
 
 
 
 
 
 
 
 
 
d6ece0d
 
 
 
 
 
 
 
 
 
 
 
 
c76b52d
 
 
 
 
d6ece0d
 
 
 
 
 
 
 
 
 
 
 
 
 
2c0a8da
d6ece0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7638888
 
d6ece0d
 
 
 
7638888
 
 
 
d6ece0d
7638888
 
 
d6ece0d
 
 
 
 
 
 
 
 
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#coding: utf-8
from os import getenv
from typing import Optional
import requests

from openai import OpenAI

def detect_language(input_text: str, 
                    temperature: Optional[float] = 0.2, 
                    context_window: Optional[int] = 128,
                    model: Optional[str] = "gpt-4o-mini"
                    ) -> str:
    """
    Détecte la langue d'un texte donné avec une vérification croisée si doute.
    """
    system_prompt = (
        "Agissez comme une fonction de détection de langue. "
        "Fournissez la langue d'entrée au format ISO-639-1. "
        "Si vous avez un doute ou une incertitude, indiquez 'doute'."
    )
    
    try:
        client = OpenAI(api_key=getenv("OPENAI_API_KEY"))

        response = client.chat.completions.create(
            model=model,
            temperature=temperature,
            messages=[
                {
                    "role": "system",
                    "content": system_prompt
                },
                {
                    "role": "user",
                    "content": input_text
                }
            ],
            max_tokens=context_window
        )

        detected_language = response.choices[0].message.content.strip()

        # Si le modèle indique un doute, faire appel à un modèle plus précis ou à un autre service de vérification
        if "doute" in detected_language.lower():
            print("[INFO] - (detect_language) : Doute détecté, appel d'un modèle plus précis.")
            return call_precise_language_model(input_text)

        if detected_language:
            return detected_language
        else:
            raise ValueError("La réponse de l'API est vide ou invalide.")
    
    except requests.RequestException as e:
        raise requests.RequestException(f"Erreur de communication avec l'API : {str(e)}")
    except Exception as e:
        raise ValueError(f"Erreur inattendue lors de la détection de la langue : {str(e)}")

def call_precise_language_model(input_text: str) -> str:
    """
    Appelle un second modèle plus précis pour vérifier la langue en cas de doute.
    """
    precise_prompt = (
        "Agissez comme un détecteur de langue très précis. "
        "Fournissez la langue d'entrée au format ISO-639-1. "
    )
    
    try:
        client = OpenAI(api_key=getenv("OPENAI_API_KEY"))

        # Modèle plus précis
        response = client.chat.completions.create(
            model="gpt-4o",  # Un modèle plus lourd et précis
            temperature=0.1,
            messages=[
                {
                    "role": "system",
                    "content": precise_prompt
                },
                {
                    "role": "user",
                    "content": input_text
                }
            ],
            max_tokens=128
        )

        precise_language = response.choices[0].message.content.strip()
        return precise_language

    except Exception as e:
        raise ValueError(f"Erreur lors de la vérification précise de la langue : {str(e)}")


if __name__ == "__main__":
    input_text = "Bonjour, comment ça va ?"
    detected_language = detect_language(input_text)
    print(f"La langue détectée est : {detected_language}")

    input_text = "Hello, how are you?"
    detected_language = detect_language(input_text)
    print(f"La langue détectée est : {detected_language}")

    input_text = "Hola, ¿cómo estás?"
    detected_language = detect_language(input_text)
    print(f"La langue détectée est : {detected_language}")

    # maintenant des entrees plus longues, mais surtout plus ambigues, il faut comprendre la langue meme si le texte est ambigu ou melange des mots mirroirs ou des mots provenant de plusieurs langues

    input_text = "Cool raoul, j'y peut rien man, c'est la vie, c'est comme ça"
    detected_language = detect_language(input_text)
    print(f"La langue détectée est : {detected_language}")

    input_text = "Bordel de merde, le cousin s'est fait choper par les flics avec du shit sur lui."
    detected_language = detect_language(input_text)
    print(f"La langue détectée est : {detected_language}")