Add OpenRouter provider with DeepSeek support - best value for translation (.14/M tokens)
This commit is contained in:
27
main.py
27
main.py
@@ -277,7 +277,7 @@ async def translate_document(
|
||||
file: UploadFile = File(..., description="Document file to translate (.xlsx, .docx, or .pptx)"),
|
||||
target_language: str = Form(..., description="Target language code (e.g., 'es', 'fr', 'de')"),
|
||||
source_language: str = Form(default="auto", description="Source language code (default: auto-detect)"),
|
||||
provider: str = Form(default="google", description="Translation provider (google, ollama, deepl, libre, openai)"),
|
||||
provider: str = Form(default="openrouter", description="Translation provider (openrouter, google, ollama, deepl, libre, openai)"),
|
||||
translate_images: bool = Form(default=False, description="Translate images with multimodal Ollama/OpenAI model"),
|
||||
ollama_model: str = Form(default="", description="Ollama model to use (also used for vision if multimodal)"),
|
||||
system_prompt: str = Form(default="", description="Custom system prompt with context or instructions for LLM translation"),
|
||||
@@ -285,6 +285,8 @@ async def translate_document(
|
||||
libre_url: str = Form(default="https://libretranslate.com", description="LibreTranslate server URL"),
|
||||
openai_api_key: str = Form(default="", description="OpenAI API key"),
|
||||
openai_model: str = Form(default="gpt-4o-mini", description="OpenAI model to use (gpt-4o-mini is cheapest with vision)"),
|
||||
openrouter_api_key: str = Form(default="", description="OpenRouter API key"),
|
||||
openrouter_model: str = Form(default="deepseek/deepseek-chat", description="OpenRouter model (deepseek/deepseek-chat is best value)"),
|
||||
cleanup: bool = Form(default=True, description="Delete input file after translation")
|
||||
):
|
||||
"""
|
||||
@@ -361,9 +363,19 @@ async def translate_document(
|
||||
await cleanup_manager.track_file(output_path, ttl_minutes=60)
|
||||
|
||||
# Configure translation provider
|
||||
from services.translation_service import GoogleTranslationProvider, DeepLTranslationProvider, LibreTranslationProvider, OllamaTranslationProvider, OpenAITranslationProvider, translation_service
|
||||
from services.translation_service import GoogleTranslationProvider, DeepLTranslationProvider, LibreTranslationProvider, OllamaTranslationProvider, OpenAITranslationProvider, OpenRouterTranslationProvider, translation_service
|
||||
|
||||
if provider.lower() == "deepl":
|
||||
if provider.lower() == "openrouter":
|
||||
api_key = openrouter_api_key.strip() if openrouter_api_key else os.getenv("OPENROUTER_API_KEY", "")
|
||||
if not api_key:
|
||||
raise HTTPException(status_code=400, detail="OpenRouter API key not provided. Get one at https://openrouter.ai/keys")
|
||||
model_to_use = openrouter_model.strip() if openrouter_model else "deepseek/deepseek-chat"
|
||||
custom_prompt = build_full_prompt(system_prompt, glossary)
|
||||
logger.info(f"Using OpenRouter model: {model_to_use}")
|
||||
if custom_prompt:
|
||||
logger.info(f"Custom system prompt provided ({len(custom_prompt)} chars)")
|
||||
translation_provider = OpenRouterTranslationProvider(api_key, model_to_use, custom_prompt)
|
||||
elif provider.lower() == "deepl":
|
||||
if not config.DEEPL_API_KEY:
|
||||
raise HTTPException(status_code=400, detail="DeepL API key not configured")
|
||||
translation_provider = DeepLTranslationProvider(config.DEEPL_API_KEY)
|
||||
@@ -391,8 +403,15 @@ async def translate_document(
|
||||
if custom_prompt:
|
||||
logger.info(f"Custom system prompt provided ({len(custom_prompt)} chars)")
|
||||
translation_provider = OllamaTranslationProvider(config.OLLAMA_BASE_URL, model_to_use, model_to_use, custom_prompt)
|
||||
else:
|
||||
elif provider.lower() == "google":
|
||||
translation_provider = GoogleTranslationProvider()
|
||||
else:
|
||||
# Default to OpenRouter with DeepSeek (best value)
|
||||
api_key = openrouter_api_key.strip() if openrouter_api_key else os.getenv("OPENROUTER_API_KEY", "")
|
||||
if api_key:
|
||||
translation_provider = OpenRouterTranslationProvider(api_key, "deepseek/deepseek-chat", build_full_prompt(system_prompt, glossary))
|
||||
else:
|
||||
translation_provider = GoogleTranslationProvider()
|
||||
|
||||
# Update the global translation service
|
||||
translation_service.provider = translation_provider
|
||||
|
||||
Reference in New Issue
Block a user