feat(stream-logging): implement detailed stream logging modes and update related documentation
This commit is contained in:
parent
df8293494f
commit
d8e0fda594
10 changed files with 536 additions and 25 deletions
|
|
@ -129,6 +129,7 @@
|
|||
- `model-trends` 는 `response_model -> routed_model -> request_model -> unknown` 순서로 모델 키를 결정한다.
|
||||
- response length 계열 endpoint는 `completion_tokens` 가 있는 요청만 집계한다.
|
||||
- `response-length-histogram` 은 긴 꼬리 분포를 읽기 쉽도록 로그 간격 bin을 반환한다.
|
||||
- stream response body 저장 방식은 `DETAIL_STREAM_LOG_MODE=compact|raw|both|off` 로 제어한다. 기본값 `compact` 는 raw SSE를 저장하지 않고 누적된 thinking/content/tool call/usage JSON을 저장하며, 기존 raw SSE 로그는 관리자 UI에서 계속 파싱된다.
|
||||
- 자세한 내용은 [docs/analytics.md](./analytics.md) 참고.
|
||||
|
||||
### Dashboard Summary
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ SPA는 `/dashboard`를 라우터 base로 사용하고, 관리자 API는 계속 `
|
|||
- 공통 필터는 기간(`7`, `30`, `90`일)과 backend 선택이다.
|
||||
- 상단 summary strip 뒤에 일별 volume, reliability, response time, model trends, response length 분포 패널이 배치된다.
|
||||
- 상세 raw request 확인은 계속 `DetailLogs` 화면이 담당한다.
|
||||
- `DetailLogs` 의 Conversation 탭은 non-stream completion JSON, 기존 raw SSE stream 문자열, 신규 compact stream JSON(`kyush.chat_stream.compact.v1`)을 모두 파싱한다.
|
||||
- 자세한 내용은 [docs/analytics.md](./analytics.md) 참고.
|
||||
|
||||
## Model Management UI
|
||||
|
|
|
|||
|
|
@ -215,7 +215,16 @@ Indexes: `idx_backend_metrics_backend`, `idx_backend_metrics_date`
|
|||
| request_headers | TEXT | JSON 문자열 |
|
||||
| request_body | TEXT | JSON 또는 raw 문자열 |
|
||||
| response_headers | TEXT | JSON 문자열 |
|
||||
| response_body | TEXT | JSON 또는 raw 문자열 |
|
||||
| response_body | TEXT | JSON 또는 raw 문자열. stream 상세 로그는 기본적으로 `kyush.chat_stream.compact.v1` JSON으로 저장되며, `DETAIL_STREAM_LOG_MODE=raw` 인 경우 기존 raw SSE 문자열로 저장된다 |
|
||||
| created_at | TEXT | UTC ISO timestamp |
|
||||
|
||||
Indexes: `idx_request_logs_created_at`, `idx_request_logs_local_date`, `idx_request_logs_user`, `idx_request_logs_backend`, `idx_request_logs_endpoint`, `idx_request_logs_detail_logged`
|
||||
|
||||
### Stream response body formats
|
||||
|
||||
기존 월별 DB의 raw SSE 문자열은 계속 유효하다. 새 stream 로그는 `DETAIL_STREAM_LOG_MODE` 값에 따라 아래 형식 중 하나로 저장된다.
|
||||
|
||||
- `compact`(기본): `response_body` 가 `{"format":"kyush.chat_stream.compact.v1", ...}` JSON 문자열이다. 반복되는 chunk 공통 필드(`id`, `object`, `created`, `model`)는 한 번만 저장하고, `choices[].reasoning`, `choices[].content`, `choices[].tool_calls[].function.arguments` 는 누적 문자열로 저장한다.
|
||||
- `raw`: `response_body` 가 기존처럼 `data: ...\n\n` 형태의 raw SSE 문자열이다.
|
||||
- `both`: `response_body` 가 `{"format":"kyush.chat_stream.raw.v1","compact":...,"raw_sse":"..."}` JSON 문자열이다.
|
||||
- `off`: stream `response_body` 를 저장하지 않는다.
|
||||
|
|
|
|||
|
|
@ -54,6 +54,11 @@ server/src/
|
|||
- `core.db` 에는 `admin_sessions`, `admin_api_tokens` 도 함께 저장된다
|
||||
- `core.db` 에는 `backend_models`, `model_rewrites` 도 저장된다
|
||||
- 시간 경계 계산은 `TZ` 기준이다
|
||||
- 상세 로그가 켜진 stream 응답은 `DETAIL_STREAM_LOG_MODE` 에 따라 저장된다
|
||||
- `compact`(기본): SSE chunk를 전달하면서 동시에 누적 파싱해 반복 필드를 제거한 `kyush.chat_stream.compact.v1` JSON을 `response_body`에 저장한다
|
||||
- `raw`: 기존 동작처럼 raw SSE 문자열 전체를 저장한다
|
||||
- `both`: compact JSON과 raw SSE를 함께 담은 `kyush.chat_stream.raw.v1` JSON을 저장한다
|
||||
- `off`: stream `response_body` 저장을 생략한다. request/response headers와 request body는 detail logging 설정에 따라 계속 저장된다
|
||||
|
||||
## Model Routing
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue