Document LLM SSOT implementation progress

This commit is contained in:
happybell80 2026-03-16 09:50:24 +09:00
parent 1b3a0a5632
commit ec676720ff
3 changed files with 60 additions and 1 deletions

View File

@ -11,6 +11,7 @@
- troubleshooting: `troubleshooting/260316_workspace_config_루트기준_SSOT와_하드코딩_분산_문제오픈.md`
- research: `research/260315_모델SSOT_하드코딩_분산과_workspace_config_로컬이식_통합리서치.md`
- plans: `plans/260316_llm_model_ssot_transition_계획.md`
- worklog: `worklog/260316_llm_model_ssot_1차구현_및_로컬검증.md`
### 닫힌 문제
@ -99,6 +100,7 @@
- Calendar Skill 자동휴일감지 행동제어 구현 및 검증 `worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md`
- 브리핑 조회 윈도우 직전 영업일 기준 확장 `worklog/260310_briefing_window_직전영업일기준_확장.md`
- Company X 내부문서 RAG 근거응답 구현 및 시나리오 검증 `worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md`
- LLM 모델 SSOT 1차구현 및 로컬검증 `worklog/260316_llm_model_ssot_1차구현_및_로컬검증.md`
## Scenarios

View File

@ -9,7 +9,7 @@
## 상태
- planned
- in_progress
## 목표
@ -186,6 +186,10 @@
- 문서 변경은 `DOCS` 레포 안에서만 롤백 판단합니다.
- 과도기에는 `workspace-config/runtime.env``rb8001/.env`를 이전 값으로 되돌리는 것이 가장 작은 운영 롤백 단위입니다.
## 진행 기록
- 로컬 1차 구현 및 검증: [260316 LLM 모델 SSOT 1차구현 및 로컬검증](../worklog/260316_llm_model_ssot_1차구현_및_로컬검증.md)
## 닫힘 조건
1. 사용자가 "주 모델을 `--`로 바꾸자"라고 했을 때 기본 수정 지점이 `workspace-config/runtime.env`로 답됩니다.

View File

@ -0,0 +1,53 @@
tags: [worklog, llm, ssot, workspace-config, skill-news, skill-slack, rb8001]
# 260316 LLM 모델 SSOT 1차구현 및 로컬검증
## 상위 원칙
- [LLM 모델 SSOT 전환 계획](../plans/260316_llm_model_ssot_transition_계획.md)
- [모델 SSOT 하드코딩 분산과 workspace-config 로컬이식 통합 리서치](../research/260315_모델SSOT_하드코딩_분산과_workspace_config_로컬이식_통합리서치.md)
- [workspace-config 루트기준 SSOT와 하드코딩 분산 문제 오픈](../troubleshooting/260316_workspace_config_루트기준_SSOT와_하드코딩_분산_문제오픈.md)
## 상태
- local-implemented
- server-runtime-unverified
## 이번 작업에서 구현한 것
- `rb8001`
- `LLMRequest.model`을 자유 문자열로 열어 새 모델명 변경 시 코드 수정이 필요 없게 맞췄습니다.
- `internal_llm_service -> LLMRequest` 경로에 `model` 전달을 실제로 연결했습니다.
- `/api/llm/*`, `/complete` 엔드포인트가 요청 모델값을 실제 내부 호출로 전달하게 맞췄습니다.
- `GeminiHandler``GEMINI_MODEL` 재조회와 `ir_analyzer.py`의 모델 fallback 체인을 제거했습니다.
- `coldmail_llm_classifier.py`, `diary/generator.py`, `headlines_workflow.py`를 공용 LLM 경로 중심으로 정리했습니다.
- `skill-slack`
- `digest.py`, `action_extractor.py`, `summarizer.py`의 모델 하드코딩을 제거하고 `DEFAULT_LLM_MODEL` 단일 설정을 따르게 맞췄습니다.
- `skill-news`
- 서비스 코드가 `GEMINI_MODEL` 대신 `DEFAULT_LLM_MODEL`만 읽도록 바꿨습니다.
- `docker-compose.yml`, `.env.example`, `README.md`를 같은 계약으로 맞췄습니다.
- `app/core/config.py`를 추가해 서비스 내부 모델 설정 진입점을 한 곳으로 모았습니다.
## 로컬 검증
- `python3 -m compileall`
- `rb8001` 변경 파일과 `skill-slack`, `skill-news` 앱 전체 기준으로 문법 검증 통과
- `pytest -q skill-news/tests/test_sea_news_filter.py skill-news/tests/test_sea_news_endpoint.py`
- `5 passed`
- `1 failed`
- 실패 이유: 현재 로컬 테스트 환경에 `pytest-asyncio` 플러그인이 없어 async 테스트 1건이 실행되지 못함
- `pytest -q rb8001/tests/test_gemini_streaming.py rb8001/tests/test_headlines_workflow.py`
- 실행 환경 의존성 부족으로 수집 단계에서 중단
- 확인된 누락: `pydantic_settings`, `slack_sdk`
## 의미
- 이제 기본 목표였던 "모델 이걸로 바꾸자" 요청에 대해, 코드상 주요 기준은 `DEFAULT_LLM_MODEL`로 수렴했습니다.
- 특히 `skill-slack``skill-news`가 서비스별 독자 모델 키를 따르지 않고 같은 키 이름을 쓰게 된 점이 1차 구현의 핵심입니다.
- 다만 `workspace-config/runtime.env`가 실제 컨테이너 런타임에서 서비스별 `.env`보다 어떤 우선순위로 적용되는지는 서버/실행 환경 확인이 아직 남아 있습니다.
## 남은 확인
- 서버 런타임에서 `DEFAULT_LLM_MODEL`이 실제로 `workspace-config/runtime.env` 1곳 수정으로 바뀌는지 확인
- `skill-news/docker-compose.yml``env_file` 추가가 운영 배포 환경과 충돌하지 않는지 확인
- `rb8001` 테스트 환경 의존성(`pydantic_settings`, `slack_sdk`) 정리 후 관련 테스트 재실행