# VNTranslator - Kit MT personalizado
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 = "YOUR_API_KEY"
OPENAI_MODEL = "gpt-4o-mini"
OPENAI_PROMPT = "Eres un traductor profesional especializado en la traducción de {SOURCE_LANG} a {TARGET_LANG} para Novelas Visuales. \
Se te proporcionará texto, por favor tradúcelo y proporciona la mejor traducción: {SOURCE_TEXT}"
app = Flask(__name__)
@app.route('/translate', methods=['GET'])
def translate():
print("===== Nueva solicitud =====")
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: ¡Texto faltante!")
return f"Err: ¡Texto faltante!", 400
# Decodificar texto y formatear el prompt
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"Prompt: {prompt}")
# Establecer encabezado
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}",
}
# Establecer datos
data = {
"model": OPENAI_MODEL,
"messages": [
{"role": "system", "content": prompt},
{"role": "user", "content": source_text},
],
"temperature": 0.7,
}
# Enviar solicitud
try:
response = requests.post(OPENAI_API_URL, headers=headers, json=data)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"Err: Falló la solicitud: {e}")
return f"Err: Falló la solicitud: {e}", 500
# Extraer respuesta
try:
response_data = response.json()
translation = response_data["choices"][0]["message"]["content"]
except (KeyError, IndexError) as e:
print(f"Err: Respuesta inválida: {e}")
return f"Err: Respuesta inválida: {e}", 500
# Devolver respuesta
print(f"Respuesta: {translation}\n")
return translation, response.status_code
if __name__ == '__main__':
app.run(debug=APP_DEBUG, host=APP_HOST, port=APP_PORT)