From 51a6e845d108cae491ea9cf6b0b11b28d1aa8ced Mon Sep 17 00:00:00 2001 From: burnintuna Date: Thu, 30 Jul 2026 17:07:02 +0900 Subject: [PATCH] Improve translation reliability and progress feedback --- .env.example | 7 + .gitignore | 1 + AGENTS.md | 28 +- README.md | 25 +- backend/auth.py | 59 ++- backend/llm_client.py | 33 +- backend/main.py | 543 ++++++++++++++++++++++---- backend/models.py | 17 + backend/prompts.py | 38 +- backend/sessions.py | 61 ++- frontend/src/api.ts | 29 +- frontend/src/stores/auth.ts | 13 +- frontend/src/stores/translation.ts | 241 +++++++++--- frontend/src/types.ts | 23 ++ frontend/src/views/LoginView.vue | 7 +- frontend/src/views/TranslatorView.vue | 29 +- requirements-dev.txt | 2 + requirements.txt | 2 +- tests/__init__.py | 0 tests/test_backend.py | 252 ++++++++++++ 20 files changed, 1194 insertions(+), 216 deletions(-) create mode 100644 requirements-dev.txt create mode 100644 tests/__init__.py create mode 100644 tests/test_backend.py diff --git a/.env.example b/.env.example index 2281e3b..330d923 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,9 @@ # JWT 시그니용 키 (변경 권장) JWT_SECRET_KEY=my-super-secret-key-change-me +# JWT_SECRET_KEY 미설정 시 생성할 키 파일 (기본: config/.jwt-secret) +# JWT_SECRET_FILE=config/.jwt-secret + # LLM 설정 파일 경로 (기본: config/llms.json) LLMS_CONFIG_PATH=config/llms.json @@ -15,3 +18,7 @@ PORT=8000 # 프론트엔드 빌드 폴더 경로 (기본: frontend/dist) FRONTEND_DIST_PATH=frontend/dist + +# 개별 LLM 요청 제한 시간(초)과 장문 분할 크기(문자 수) +LLM_TIMEOUT_SECONDS=180 +TRANSLATION_CHUNK_CHARS=1500 diff --git a/.gitignore b/.gitignore index 42fa114..18c2811 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ frontend/dist/ # Env files .env +config/.jwt-secret # IDE .vscode/ diff --git a/AGENTS.md b/AGENTS.md index 80e9b9b..818a716 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -19,7 +19,7 @@ Single-server deployment: `uvicorn backend.main:app` serves both API and fronten | Auth | JWT (PyJWT), bcrypt (direct via `bcrypt` module) | | LLM Client | OpenAI SDK (`openai`) — OpenAI-compatible API format | | Frontend | Vue 3 + Composition API `