🖼️
이미지를 드래그하거나 클릭해서 업로드
JPG, PNG, WEBP 지원
번역된 텍스트가 여기에 표시됩니다.
📄
문서를 드래그하거나 클릭해서 업로드
지원 포맷: DOCX · PPTX · XLSX · HWPX · TXT · MD · CSV
텍스트를 입력하면 언어 감지 후 vLLM(TranslateGemma)으로 번역합니다. source_lang을 지정하면 감지를 건너뜁니다. 최대 10,000자.
Client
│
├─ POST /api/translate
│ { text, source_lang?, target_lang }
│
▼
FastAPI
│
├─ [source_lang 미입력] ──► LangDetect API
│ ◄── "ko"
│
└─ POST {TRANSLATEGEMMA_API_BASE}/chat/completions
{ model, messages, chat_template_kwargs:
{ source_lang_code, target_lang_code } }
│
▼
{ translated_text, source_lang, target_lang }
curl -X POST http://localhost:8000/api/translate \
-H "Content-Type: application/json" \
-d '{
"text": "안녕하세요",
"source_lang": "ko",
"target_lang": "en"
}'
# 응답
{
"translated_text": "Hello.",
"source_lang": "ko",
"target_lang": "en"
}
vLLM의 OpenAI 호환 /chat/completions 엔드포인트를 사용합니다. chat_template_kwargs는 vLLM 전용 파라미터입니다.
※ model 기본값: LLM42-Translate — TRANSLATEGEMMA_MODEL 환경변수로 재정의 가능
curl -X POST http://<TRANSLATEGEMMA_API_BASE>/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "LLM42-Translate",
"messages": [
{ "role": "user", "content": "안녕하세요" }
],
"chat_template_kwargs": {
"source_lang_code": "ko",
"target_lang_code": "en"
},
"max_tokens": 2048,
"temperature": 0.3,
"stop": ["<end_of_turn>"],
"skip_special_tokens": false
}'
# 응답
{
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello."
}
}
]
}
이미지를 base64 또는 URL로 전달하면 vLLM 멀티모달 모델이 이미지 내 텍스트를 OCR하여 번역합니다. source_lang 미입력 시 ko를 기본값으로 사용합니다 (이미지는 언어 자동 감지 미지원).
Client
│
├─ POST /api/translate/image
│ { image_base64 | image_url,
│ source_lang?, target_lang }
│
▼
FastAPI
│
├─ [source_lang 미입력] → 기본값 "ko" 사용
│ (이미지는 언어 자동 감지 미지원)
│
└─ POST {TRANSLATEGEMMA_API_BASE}/chat/completions
messages[].content = [{
type: "image_url",
image_url: { url: "data:image/jpeg;base64,..." }
}]
│
▼
{ translated_text, source_lang, target_lang }
curl -X POST http://localhost:8000/api/translate/image \
-H "Content-Type: application/json" \
-d '{
"image_base64": "<BASE64_STRING>",
"image_mime_type": "image/jpeg",
"source_lang": "ko",
"target_lang": "en"
}'
curl -X POST http://localhost:8000/api/translate/image \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/image.jpg",
"source_lang": "ko",
"target_lang": "en"
}'
# 응답
{
"translated_text": "Hello, World!",
"source_lang": "ko",
"target_lang": "en"
}
※ model 기본값: LLM42-Translate — TRANSLATEGEMMA_MODEL 환경변수로 재정의 가능
curl -X POST http://<TRANSLATEGEMMA_API_BASE>/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "LLM42-Translate",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,<BASE64>"
}
}
]
}
],
"chat_template_kwargs": {
"source_lang_code": "ko",
"target_lang_code": "en"
},
"max_tokens": 2048,
"temperature": 0.3,
"stop": ["<end_of_turn>"],
"skip_special_tokens": false
}'
DOCX·PPTX·XLSX·HWPX·TXT·MD·CSV 문서를 업로드하면 단락 단위로 분해 후 최대 10개를 병렬 번역합니다. SSE 스트림으로 진행률을 실시간 수신하고, 완료 후 별도 요청으로 번역 파일을 다운로드합니다.
① 번역 요청 (SSE)
─────────────────────────────────────
Client
└─ POST /api/translate/document/stream
?target_lang=en
multipart/form-data: file=report.docx
FastAPI
├─ 언어 감지 (첫 단락 샘플 → LangDetect)
├─ ZIP 파싱 → 단락 추출
└─ asyncio.gather + Semaphore(10) 병렬 번역
│
├─ data: {"type":"progress","completed":1,"total":42}
├─ data: {"type":"progress","completed":2,"total":42}
├─ ...
└─ data: {"type":"done","job_id":"<uuid>"}
② 파일 다운로드 (별도 요청)
─────────────────────────────────────
Client
└─ GET /api/translate/document/result/<uuid>
← report_translated.docx
Content-Disposition: attachment
curl -X POST \ "http://localhost:8000/api/translate/document/stream?target_lang=en" \ -F "file=@report.docx"
# SSE 스트림 응답
data: {"type":"progress","completed":1,"total":42}
data: {"type":"progress","completed":2,"total":42}
...
data: {"type":"done","job_id":"550e8400-e29b-41d4..."}
curl -OJ \ "http://localhost:8000/api/translate/document/result/<job_id>"
진행률 없이 완료 시 바로 파일을 반환합니다. 소규모 문서에 적합합니다.
curl -X POST \ "http://localhost:8000/api/translate/document?target_lang=en" \ -F "file=@report.docx" \ -o report_translated.docx
이미지를 드래그하거나 클릭해서 업로드
JPG, PNG, WEBP 지원
문서를 드래그하거나 클릭해서 업로드