Spaces:
Paused
Paused
rick
commited on
ajout de la notion de doute dans la detection de language
Browse files- 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
|
| 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 |
-
"
|
| 85 |
-
"
|
| 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=
|
| 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 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 = "
|
| 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}")
|