rick commited on
Commit
d6ece0d
·
unverified ·
1 Parent(s): 5771329

ajout de la notion de doute dans la detection de language

Browse files
Files changed (1) hide show
  1. core/DetectLanguage.py +68 -83
core/DetectLanguage.py CHANGED
@@ -1,99 +1,29 @@
1
  #coding: utf-8
2
-
3
- # Standard libraries
4
- #import json
5
- #import re
6
-
7
  from os import getenv
8
- from typing import Any
9
- #from typing import Dict
10
- #from typing import IO
11
- #from typing import List
12
  from typing import Optional
13
- #from typing import Tuple
14
- from typing import Union
15
- #from io import BytesIO
16
-
17
- # Third-party libraries
18
  import requests
19
 
20
  from openai import OpenAI
21
- #from pydub import AudioSegment
22
-
23
- def check_openai_api_key(api_key):
24
- import openai
25
- client = openai.OpenAI(api_key=api_key)
26
- try:
27
- client.models.list()
28
- except openai.AuthenticationError:
29
- return False
30
- else:
31
- return True
32
-
33
-
34
- class PRESET_MODELS:
35
- # for detect language with GPT-4o-mini and GPT-4o models:
36
- # meta-paramaters presets (check_level:(low, medium, high), deterministict: (maximum, medium, minimum))
37
- def get_preset__detect_language(check_level: str = "medium", deterministic: str = "medium"):
38
- if check_level == "low":
39
- if deterministic == "maximum":
40
- return {"temperature": 0.1, "frequency_penalty": 0.5, "presence_penalty": 0.5}
41
- elif deterministic == "medium":
42
- return {"temperature": 0.2, "frequency_penalty": 0.5, "presence_penalty": 0.5}
43
- elif deterministic == "minimum":
44
- return {"temperature": 0.3, "frequency_penalty": 0.5, "presence_penalty": 0.5}
45
- elif check_level == "medium":
46
- if deterministic == "maximum":
47
- return {"temperature": 0.1, "frequency_penalty": 0.2, "presence_penalty": 0.2}
48
- elif deterministic == "medium":
49
- return {"temperature": 0.2, "frequency_penalty": 0.2, "presence_penalty": 0.2}
50
- elif deterministic == "minimum":
51
- return {"temperature": 0.3, "frequency_penalty": 0.2, "presence_penalty": 0.2}
52
- elif check_level == "high":
53
- if deterministic == "maximum":
54
- return {"temperature": 0.01, "frequency_penalty": 0.1, "presence_penalty": 0.1}
55
- elif deterministic == "medium":
56
- return {"temperature": 0.05, "frequency_penalty": 0.1, "presence_penalty": 0.1}
57
- elif deterministic == "minimum":
58
- return {"temperature": 0.1, "frequency_penalty": 0.1, "presence_penalty": 0.1}
59
- else:
60
- return {"temperature": 0.2, "frequency_penalty": 0.2, "presence_penalty": 0.2}
61
 
62
  def detect_language(input_text: str,
63
  temperature: Optional[float] = 0.2,
64
  context_window: Optional[int] = 128,
65
- model: Optional[str] = "gpt-4o-mini"
66
  ) -> str:
67
  """
68
- Détecte la langue d'un texte donné.
69
-
70
- Args:
71
- input_text (str): Le texte dont il faut détecter la langue.
72
- temperature (float): La température pour le modèle de langage. Par défaut à 0.2.
73
- context_window (int): Longueur de la fenêtre de contexte à utiliser pour la détection.
74
-
75
- Returns:
76
- str: La langue détectée au format ISO-639-1.
77
-
78
- Raises:
79
- ValueError: Si la réponse de l'API est invalide.
80
- requests.RequestException: En cas d'erreur de communication avec l'API.
81
  """
82
  system_prompt = (
83
  "Agissez comme une fonction de détection de langue. "
84
- "Je fournirai du texte dans n'importe quelle langue, et vous détecterez sa langue. "
85
- "Fournissez le résultat de votre détection au format ISO-639-1. "
86
- "Votre réponse doit représenter l'argument `language` et ne contenir "
87
- "que sa valeur sous forme de chaîne. "
88
- "Fournir la langue d'entrée au format ISO-639-1 améliorera la précision et la latence."
89
  )
 
90
  try:
91
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
92
 
93
- #################
94
-
95
  response = client.chat.completions.create(
96
- model=f"{model}",
97
  temperature=temperature,
98
  messages=[
99
  {
@@ -105,26 +35,81 @@ def detect_language(input_text: str,
105
  "content": input_text
106
  }
107
  ],
108
- frequency_penalty=0.2,
109
- presence_penalty=0,
110
  max_tokens=context_window
111
  )
112
- detected_language = response.choices[0].message.content
113
- if not detected_language:
114
- raise ValueError("La réponse de l'API est vide")
115
- return detected_language
 
 
 
 
 
 
 
 
 
116
  except requests.RequestException as e:
117
  raise requests.RequestException(f"Erreur de communication avec l'API : {str(e)}")
118
  except Exception as e:
119
  raise ValueError(f"Erreur inattendue lors de la détection de la langue : {str(e)}")
120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
 
122
  if __name__ == "__main__":
 
 
 
 
123
  input_text = "Hello, how are you?"
124
  detected_language = detect_language(input_text)
125
  print(f"La langue détectée est : {detected_language}")
126
 
127
- input_text = "Bonjour, comment ça va?"
128
  detected_language = detect_language(input_text)
129
  print(f"La langue détectée est : {detected_language}")
130
 
 
 
 
 
 
 
 
 
 
 
1
  #coding: utf-8
 
 
 
 
 
2
  from os import getenv
 
 
 
 
3
  from typing import Optional
 
 
 
 
 
4
  import requests
5
 
6
  from openai import OpenAI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
  def detect_language(input_text: str,
9
  temperature: Optional[float] = 0.2,
10
  context_window: Optional[int] = 128,
11
+ model: Optional[str] = "gpt-4o-mini"
12
  ) -> str:
13
  """
14
+ Détecte la langue d'un texte donné avec une vérification croisée si doute.
 
 
 
 
 
 
 
 
 
 
 
 
15
  """
16
  system_prompt = (
17
  "Agissez comme une fonction de détection de langue. "
18
+ "Fournissez la langue d'entrée au format ISO-639-1. "
19
+ "Si vous avez un doute ou une incertitude, indiquez 'doute'."
 
 
 
20
  )
21
+
22
  try:
23
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
24
 
 
 
25
  response = client.chat.completions.create(
26
+ model=model,
27
  temperature=temperature,
28
  messages=[
29
  {
 
35
  "content": input_text
36
  }
37
  ],
 
 
38
  max_tokens=context_window
39
  )
40
+
41
+ detected_language = response.choices[0].message.content.strip()
42
+
43
+ # Si le modèle indique un doute, faire appel à un modèle plus précis ou à un autre service de vérification
44
+ if "doute" in detected_language.lower():
45
+ print("[INFO] - (detect_language) : Doute détecté, appel d'un modèle plus précis.")
46
+ return call_precise_language_model(input_text)
47
+
48
+ if detected_language:
49
+ return detected_language
50
+ else:
51
+ raise ValueError("La réponse de l'API est vide ou invalide.")
52
+
53
  except requests.RequestException as e:
54
  raise requests.RequestException(f"Erreur de communication avec l'API : {str(e)}")
55
  except Exception as e:
56
  raise ValueError(f"Erreur inattendue lors de la détection de la langue : {str(e)}")
57
 
58
+ def call_precise_language_model(input_text: str) -> str:
59
+ """
60
+ Appelle un second modèle plus précis pour vérifier la langue en cas de doute.
61
+ """
62
+ precise_prompt = (
63
+ "Agissez comme un détecteur de langue très précis. "
64
+ "Fournissez la langue d'entrée au format ISO-639-1. "
65
+ )
66
+
67
+ try:
68
+ client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
69
+
70
+ # Modèle plus précis
71
+ response = client.chat.completions.create(
72
+ model="gpt-4", # Un modèle plus lourd et précis
73
+ temperature=0.1,
74
+ messages=[
75
+ {
76
+ "role": "system",
77
+ "content": precise_prompt
78
+ },
79
+ {
80
+ "role": "user",
81
+ "content": input_text
82
+ }
83
+ ],
84
+ max_tokens=128
85
+ )
86
+
87
+ precise_language = response.choices[0].message.content.strip()
88
+ return precise_language
89
+
90
+ except Exception as e:
91
+ raise ValueError(f"Erreur lors de la vérification précise de la langue : {str(e)}")
92
+
93
 
94
  if __name__ == "__main__":
95
+ input_text = "Bonjour, comment ça va ?"
96
+ detected_language = detect_language(input_text)
97
+ print(f"La langue détectée est : {detected_language}")
98
+
99
  input_text = "Hello, how are you?"
100
  detected_language = detect_language(input_text)
101
  print(f"La langue détectée est : {detected_language}")
102
 
103
+ input_text = "Hola, ¿cómo estás?"
104
  detected_language = detect_language(input_text)
105
  print(f"La langue détectée est : {detected_language}")
106
 
107
+ # 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
108
+
109
+ input_text = "Cool raoul, j'y peut rien man, c'est la vie, c'est comme ça"
110
+ detected_language = detect_language(input_text)
111
+ print(f"La langue détectée est : {detected_language}")
112
+
113
+ input_text = "Bordel de merde, le cousin s'est fait choper par les flics avec du shit sur lui."
114
+ detected_language = detect_language(input_text)
115
+ print(f"La langue détectée est : {detected_language}")