Add dual model support: M2M100 and NLLB-200

- Added optional 'model' parameter to translation request (default: m2m100)
- M2M100: 105 languages, Apache 2.0 License (commercial OK)
- NLLB-200: 200 languages, CC-BY-NC 4.0 License (non-commercial only)
- Updated /api/translate endpoint to accept model selection
- Updated /api/supported-languages to show languages per model
- Added comprehensive language name mappings for all NLLB-200 languages
- Both models can be used independently with automatic model loading
- Model information includes license and commercial use status

Example usage:
- Default (M2M100): {"text": "Hello", "source_lang": "en", "target_lang": "ko"}
- NLLB-200: {"text": "Hello", "source_lang": "en", "target_lang": "ko", "model": "nllb200"}

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
jungwoo choi
2025-11-11 15:57:00 +09:00
parent 228f6c38e5
commit 28e26d19b6
3 changed files with 434 additions and 61 deletions

View File

@ -1,5 +1,5 @@
from pydantic import BaseModel, Field, field_validator
from typing import Optional
from typing import Optional, Literal
class TranslationRequest(BaseModel):
@ -7,6 +7,10 @@ class TranslationRequest(BaseModel):
text: str = Field(..., description="Text to translate", min_length=1, max_length=5000)
source_lang: str = Field(..., description="Source language code (e.g., 'en', 'ms', 'bn', etc.)", min_length=2, max_length=5)
target_lang: str = Field(..., description="Target language code (e.g., 'en', 'ms', 'bn', etc.)", min_length=2, max_length=5)
model: Literal["m2m100", "nllb200"] = Field(
default="m2m100",
description="Translation model to use: 'm2m100' (105 langs, Apache 2.0, commercial OK) or 'nllb200' (200 langs, CC-BY-NC, non-commercial only)"
)
@field_validator('source_lang', 'target_lang')
@classmethod
@ -19,7 +23,8 @@ class TranslationRequest(BaseModel):
"example": {
"text": "Selamat pagi, apa khabar?",
"source_lang": "ms",
"target_lang": "en"
"target_lang": "en",
"model": "m2m100"
}
}