#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}")