feat(report): improve daily intelligence UX and price tracking
Some checks failed
CI / go-test (push) Has been cancelled
CI / scripts-regression (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / docker-build (push) Has been cancelled

This commit is contained in:
phamnazage-jpg
2026-05-27 17:23:08 +08:00
parent f274621013
commit f5b373caf4
29 changed files with 4257 additions and 801 deletions

View File

@@ -215,7 +215,7 @@ func fetchModels(cfg Config) ([]ModelInfo, error) {
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
lastErr = fmt.Errorf("非 200 响应: %d %s", resp.StatusCode, string(body))
lastErr = retry.HTTPStatusError{StatusCode: resp.StatusCode, Body: string(body)}
return lastErr
}
@@ -287,6 +287,38 @@ func parseModels(raw []byte) ([]ModelInfo, error) {
return models, nil
}
func deriveModality(model ModelInfo) string {
for _, capability := range model.Capabilities {
normalized := strings.ToLower(capability)
switch {
case strings.Contains(normalized, "vision"), strings.Contains(normalized, "image"):
return "multimodal"
case strings.Contains(normalized, "audio"):
return "audio"
case strings.Contains(normalized, "video"):
return "video"
case strings.Contains(normalized, "code"):
return "code"
}
}
hints := strings.ToLower(strings.Join([]string{model.ID, model.Name, model.Description}, " "))
switch {
case strings.Contains(hints, "video") && (strings.Contains(hints, "omni") || strings.Contains(hints, "vision") || strings.Contains(hints, "multimodal")):
return "multimodal"
case strings.Contains(hints, "vision") || strings.Contains(hints, "image") || strings.Contains(hints, "vl") || strings.Contains(hints, "omni") || strings.Contains(hints, "multimodal"):
return "multimodal"
case strings.Contains(hints, "audio") || strings.Contains(hints, "speech") || strings.Contains(hints, "voice"):
return "audio"
case strings.Contains(hints, "video"):
return "video"
case strings.Contains(hints, "code"):
return "code"
default:
return "text"
}
}
func getString(m map[string]any, key string) string {
if v, ok := m[key].(string); ok {
return v
@@ -443,7 +475,7 @@ func summarizeDB(connStr string, models []ModelInfo, batchSize int) error {
`,
"openrouter", m.ID, m.Name, m.Description, m.ContextLength,
jsonCapabilities(m.Capabilities), m.Created, isFree, "active",
rawPayload(m), providerID, "", "text",
rawPayload(m), providerID, "", deriveModality(m),
"official", now, batchID, collectorVersion,
"https://openrouter.ai/api/v1/models", now).Scan(&modelID)
if err != nil {