# VNTranslator - Kit MT personnalisé
from flask import Flask, request
import json
import requests
import urllib.parse
APP_DEBUG = True
APP_HOST = "127.0.0.1"
APP_PORT = 5454
OPENAI_API_URL = "https://api.openai.com/v1/chat/completions"
OPENAI_API_KEY = "VOTRE_CLE_API"
OPENAI_MODEL = "gpt-4o-mini"
OPENAI_PROMPT = "Vous êtes un traducteur professionnel spécialisé dans la traduction de {SOURCE_LANG} vers {TARGET_LANG} pour les romans visuels. \
Vous recevrez un texte, veuillez le traduire et fournir la meilleure traduction : {SOURCE_TEXT}"
app = Flask(__name__)
@app.route('/translate', methods=['GET'])
def translate():
print("===== Nouvelle requête =====")
print(f"{request.method} {request.path}")
source_text = request.args.get("text", "")
source_lang = request.args.get("sl", "Japanese")
target_lang = request.args.get("tl", "English")
if not source_text:
print(f"Err : Texte manquant !")
return f"Err : Texte manquant !", 400
# Décoder le texte et formater l'invite
source_text = urllib.parse.unquote(source_text)
prompt = OPENAI_PROMPT.format(SOURCE_LANG=source_lang, TARGET_LANG=target_lang, SOURCE_TEXT=source_text).strip()
print(json.dumps({'source_lang': source_lang, 'target_lang': target_lang, 'text': source_text}, ensure_ascii=False, indent=4))
print(f"Invite : {prompt}")
# Définir l'en-tête
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}",
}
# Définir les données
data = {
"model": OPENAI_MODEL,
"messages": [
{"role": "system", "content": prompt},
{"role": "user", "content": source_text},
],
"temperature": 0.7,
}
# Envoyer la requête
try:
response = requests.post(OPENAI_API_URL, headers=headers, json=data)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"Err : Échec de la requête : {e}")
return f"Err : Échec de la requête : {e}", 500
# Extraire la réponse
try:
response_data = response.json()
translation = response_data["choices"][0]["message"]["content"]
except (KeyError, IndexError) as e:
print(f"Err : Réponse invalide : {e}")
return f"Err : Réponse invalide : {e}", 500
# Retourner la réponse
print(f"Réponse : {translation}\n")
return translation, response.status_code
if __name__ == '__main__':
app.run(debug=APP_DEBUG, host=APP_HOST, port=APP_PORT)