forked from boos/BoosAPI
docs: add model refresh health design
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
title: Model Refresh Health + Toast Feedback
|
||||||
|
date: 2026-03-10
|
||||||
|
owner: codex
|
||||||
|
status: approved
|
||||||
|
---
|
||||||
|
|
||||||
|
# Goal
|
||||||
|
When users click the "模型" refresh action, failed model discovery should mark the account runtime health as `unhealthy` and surface a clear failure toast. Success should show the discovered model names and count.
|
||||||
|
|
||||||
|
# Scope
|
||||||
|
- Applies to all account types (Session + API Key).
|
||||||
|
- Server determines success/failure and error category; UI uses returned payload for toast text.
|
||||||
|
|
||||||
|
# Non-goals
|
||||||
|
- Changing upstream adapters' auth logic.
|
||||||
|
- Altering auto-refresh schedules or background tasks.
|
||||||
|
|
||||||
|
# Architecture
|
||||||
|
- Update `refreshModelsForAccount(...)` to return structured outcome:
|
||||||
|
- `status`: `success` | `failed`
|
||||||
|
- `modelCount`
|
||||||
|
- `modelsPreview` (first N names)
|
||||||
|
- `errorCode` (e.g. `timeout`, `unauthorized`, `empty_models`, `unknown`)
|
||||||
|
- `errorMessage` (human-readable)
|
||||||
|
- On failure: write `runtimeHealth = unhealthy` with a reason derived from `errorCode`.
|
||||||
|
- `/api/models/check/:accountId` should return the above outcome.
|
||||||
|
- UI toast reads outcome and displays:
|
||||||
|
- Success: `已获取到模型:A、B、C(共 N 个)`
|
||||||
|
- Failure: `模型获取失败(请求超时)` / `模型获取失败,API Key 已无效` / `模型获取失败:<message>`
|
||||||
|
|
||||||
|
# Data Flow
|
||||||
|
1. User clicks "模型".
|
||||||
|
2. UI calls `/api/models/check/:accountId`.
|
||||||
|
3. Server refreshes models and returns structured outcome.
|
||||||
|
4. UI shows toast based on outcome and reloads list.
|
||||||
|
|
||||||
|
# Error Classification
|
||||||
|
- `timeout`: error message contains `timeout` / `timed out` / `请求超时`.
|
||||||
|
- `unauthorized`: HTTP 401/403 or message contains `invalid`, `unauthorized`, `无权`, `未提供令牌`.
|
||||||
|
- `empty_models`: request succeeded but model list empty.
|
||||||
|
- `unknown`: fallback for other errors.
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
- Unit tests for `refreshModelsForAccount`:
|
||||||
|
- Failure updates runtime health to `unhealthy`.
|
||||||
|
- Failure classification maps to the right `errorCode`.
|
||||||
|
- Success returns `modelsPreview` and `modelCount`.
|
||||||
|
- UI behavior: verify toast text for success vs. each failure category.
|
||||||
Reference in New Issue
Block a user