# VNTranslator - Benutzerdefinierter MT-Kit
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 = "Sie sind ein professioneller Übersetzer, spezialisiert auf Übersetzungen von {SOURCE_LANG} nach {TARGET_LANG} für Visual Novels. \
Ihnen wird Text zur Verfügung gestellt, bitte übersetzen Sie ihn und liefern Sie die beste Übersetzung: {SOURCE_TEXT}"
app = Flask(__name__)
@app.route('/translate', methods=['GET'])
def translate():
print("===== Neue Anfrage =====")
print(f"{request.method} {request.path}")
source_text = request.args.get("text", "")
source_lang = request.args.get("sl", "Japanisch")
target_lang = request.args.get("tl", "Englisch")
if not source_text:
print(f"Err: Fehlender Text!")
return f"Err: Fehlender Text!", 400
# Dekodiere Text & formatiere 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}")
# Header setzen
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}",
}
# Daten setzen
data = {
"model": OPENAI_MODEL,
"messages": [
{"role": "system", "content": prompt},
{"role": "user", "content": source_text},
],
"temperature": 0.7,
}
# Anfrage senden
try:
response = requests.post(OPENAI_API_URL, headers=headers, json=data)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"Err: Anfrage fehlgeschlagen: {e}")
return f"Err: Anfrage fehlgeschlagen: {e}", 500
# Antwort extrahieren
try:
response_data = response.json()
translation = response_data["choices"][0]["message"]["content"]
except (KeyError, IndexError) as e:
print(f"Err: Ungültige Antwort: {e}")
return f"Err: Ungültige Antwort: {e}", 500
# Antwort zurückgeben
print(f"Antwort: {translation}\n")
return translation, response.status_code
if __name__ == '__main__':
app.run(debug=APP_DEBUG, host=APP_HOST, port=APP_PORT)