feat: [models.llm] request_timeout_secs config + 권장 모델 가이드 #162
Reference in New Issue
Block a user
Delete Branch "feat/llm-timeout-config"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
요약
v0.17.0 확장 도그푸딩 (2026-05-25 —
tasks/HOTFIXES.mdentry) 의 두 가지 follow-up 을 한 PR 에 묶음. additive — wire / 기존 config 호환.(1) timeout config 노브:
crates/kebab-llm-local/src/ollama.rs의 hard-codedREQUEST_TIMEOUT = 300s가 8B+ 모델 (gemma4:e4b 등) 의 CPU 추론 시간을 초과 →error: kb-rag: llm.generate_stream으로 떨어지던 문제.[models.llm] request_timeout_secs(default 300, env override 가능) 로 빼냄. 옛 config 가 키 누락해도 그대로 파싱.(2) 권장 모델 가이드: README 사전 요구 절 +
docs/SMOKE.mdollama 안내에 한 단락 — CPU only / RAM ≤ 16 GB 환경 ⇒ ≤ 4B Q4 모델 (gemma3:4b / qwen2.5:3b / phi3:mini) 권장 + 8B+ 시 timeout 사전 안내.변경 요약
LlmCfg.request_timeout_secs: u64additive (#[serde(default = "default_llm_request_timeout_secs")], default 300).Config::defaults()의 LlmCfg literal 갱신. env overrideKEBAB_MODELS_LLM_REQUEST_TIMEOUT_SECS.REQUEST_TIMEOUT상수 제거 —OllamaLanguageModel::new가Duration::from_secs(llm.request_timeout_secs)로 client 빌드. doc comment (line 51-55, 263-270) 도 동일 갱신.kebab-config— default 300 핀 / env override / legacy config (필드 누락) backward-compat parse.사용자 가시 영향
config.toml의[models.llm]절에request_timeout_secs = 1200(또는 env) 추가하면 8B+ 모델 시도 가능.kebab init가 생성하는 template config 에는 노출 안 함 (additive default field) — 사용자가 명시적으로 추가하거나 env override.검증
default_llm_request_timeout_secs_is_300env_overrides_models_llm_request_timeout_secslegacy_config_without_request_timeout_secs_uses_default(옛 config TOML 시뮬레이션)cargo test --workspace --no-fail-fast -j 1+cargo clippy --workspace --all-targets -- -D warningsgreen.시험 항목 (Test Plan)
config.toml(request_timeout_secs 키 없음) 로kebab ask실행 → 동일 동작 (300s).[models.llm] request_timeout_secs = 1200추가 → gemma4:e4b 같은 8B+ 모델 ask 시 timeout 안 걸림 (단 응답 시간만큼 RAM 점유).KEBAB_MODELS_LLM_REQUEST_TIMEOUT_SECS=60 kebab ask "..."환경에서 timeout 빠르게 검증.미진행 (scope 외)
crates/kebab-parse-image/src/ocr.rs의 동일한 hard-coded 300s — OCR 은 가벼운 inference 라 부담 적지만 일관성 측면에서 다음 round.kebab ask --stream(fb-33) 권장 강조 — UX 개선 후속.Assisted-by: Claude Code
v0.17.0 확장 도그푸딩 (2026-05-25) 에서 발견된 두 가지를 한 PR 에 묶음. (1) llm.generate_stream 의 hard-coded 300s timeout 을 config 노브로 빼냄. 8B+ 모델 (gemma4:e4b 등) 은 CPU only 환경에서 5분 안에 첫 RAG 답변 못 마치고 `error: kb-rag: llm.generate_stream` 으로 떨어지던 문제. - kebab-config::LlmCfg 에 request_timeout_secs: u64 additive 필드 (#[serde(default = "default_llm_request_timeout_secs")] default 300). 옛 config 가 키 누락해도 그대로 파싱 + 동일 동작. - env override KEBAB_MODELS_LLM_REQUEST_TIMEOUT_SECS. - kebab-llm-local::ollama.rs 의 REQUEST_TIMEOUT 상수 제거 → OllamaLanguageModel::new 가 Duration::from_secs( llm.request_timeout_secs) 로 reqwest client 빌드. doc comment 도 동일 갱신. - 신규 unit test 3 — default 300 핀 / env override / legacy config (필드 누락) backward-compat. (2) docs — README 사전 요구 절 + docs/SMOKE.md ollama 안내에 한 단락: CPU only / RAM ≤ 16 GB 환경 ⇒ ≤ 4B Q4 모델 권장 (gemma3:4b / qwen2.5:3b / phi3:mini). 8B+ 시도 시 timeout 패턴 사전 안내. request_timeout_secs 노브 사용법. HOTFIXES 2026-05-25 entry — 위 두 변경 + 미진행 사항 (kebab-parse-image OCR 의 같은 hard-coded 300s 는 scope 외 follow-up 으로 등재 + ask --stream 권장 강조 후속) 기록. workspace cargo test -j 1 + clippy 통과. 코드 변경은 backwards-compat (additive serde field) 라 기존 사용자 영향 없음. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>