-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.example.json
More file actions
79 lines (79 loc) · 6.42 KB
/
Copy pathconfig.example.json
File metadata and controls
79 lines (79 loc) · 6.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
"_说明": "cmc-proxy 配置模板。复制为 config.json 并填入你的 commandcode API key。apiKey 请妥善保管, 不要提交到公开仓库。",
"port": 5411,
"host": "127.0.0.1",
"upstream": "https://api.commandcode.ai/provider",
"apiKey": "",
"_失败轮换说明": "switchOnFail: 轮换总开关, 支持布尔或 {text, image} 对象, 单布尔表示统一取值。true 时失败 1 次即切换 + TTL 冷却 (failTTL) 轮换: 文本请求按 defaultModels, 带图请求按 defaultVisionModels, 失败模型 TTL 内冷却跳过, 全部失效时返回上游失败结果。false 时不轮换。",
"switchOnFail": {
"text": true,
"image": true
},
"_带图前置路由说明": "visionAutoRoute: 带图请求前置路由开关 (默认 true)。true 时, 请求带图且决策出的模型判定不支持视觉 (判定为 modelCatalog 的 vision 字段与 defaultVisionModels 白名单的并集: 在名单内 / catalog vision:true 视为支持), 则不发该模型、改走 defaultVisionModels[0]; false 时保持现状 (先按原模型发, 失败靠 switchOnFail 轮换)。",
"visionAutoRoute": true,
"_历史图清理说明": "cleanHistoryImages: true 时, /v1/messages 转换链路检测到本轮(最后一条 user 消息)无新图, 会把历史里的图片块原位替换为占位文本 [历史图片已清理] 再转发 —— 历史图上游同样 400, 剥离后请求可安全回流默认模型, 带图路由只看新图, 会话不再被历史图钉死在视觉模型。替换确定性, 不破坏前缀缓存。默认 false。",
"cleanHistoryImages": true,
"_tool结果图说明": "toolResultImages: false 时丢弃 tool_result 内嵌图片 (折叠为 [image] 占位), 默认保留 (注入随后 user 消息透传)。",
"toolResultImages": true,
"_冷却说明": "failTTL: 模型失败后的冷却时间 ms, 冷却期内跳过该模型 (默认 30000)。",
"failTTL": 30000,
"_模型解析说明": "resolveModel: modelMap 未命中时的解析开关 (默认 true)。true: 按上游目录分层按序匹配 (精确 -> 大小写不敏感 -> 去 provider 前缀按裸名 -> 去 [*] 后缀), 命中即用, 未命中按请求类型回退 defaultModels[0]/defaultVisionModels[0]; false: 原样向上游请求 (不解析不回退)。",
"resolveModel": true,
"_模型目录说明": "modelCatalog: 模型参数数据文件路径 (相对 proxy.js 目录), 仅显式配置时加载 (无默认值)。存在且解析成功时用于计算单次请求的额度 (credit): 成本按牌价 priceUsdPerMTok 直接算, 额度 = 成本 × plan.credits ÷ 模型 monthlyCredits; offPeak.windows 高峰窗口 (UTC) 内以 peakUsdPerMTok 覆盖 input/output 牌价。文件不存在/读取失败静默跳过, 只是没有额度数据, 不影响转发与日志。加载成功打印日志并在启动 banner 显示模型数; 未配置时 banner 显示 '未配置'。",
"modelCatalog": "goat-prices.json",
"_jsonl日志说明": "jsonlLog: 结构化 JSONL 请求日志开关 (独立于 CMC_LOGGING_FILE 分级落盘)。true = 写 ROOT/requests.jsonl; 字符串 = 自定义路径 (相对 proxy.js 目录, 自动建目录); false/缺省 = 关闭。记录与终端 REQ/RES 两行同源的当前次请求数据 (会话/模型/用量/成本/缓存), 在 RES 输出时写一条 JSON, 供离线分析; 滚动/累计统计不入档。",
"jsonlLog": false,
"_jsonl按日切分说明": "jsonlRotateDays: JSONL 按本地时区按日切分 (仅对默认命名 requests.jsonl 生效; 自定义 jsonlLog 路径是精确文件, 不切分)。当日记录写热文件 requests.jsonl, 跨日(系统日期变化)时把热文件改名为 requests-YYYY-MM-DD.jsonl 归档并开新热文件; 归档保留 N 天, 启动/跨日时清理过期。默认 30; 0 或 'false' 关闭切分, 保持原单一 requests.jsonl 无限追加、不清理。也可用 CLI --jsonlRotateDays 覆盖。",
"jsonlRotateDays": 30,
"_串行化说明": "serializeSessionRequests: 同一会话的上游请求串行发送 (默认 true)。CC 的会话标题探测请求与主请求毫秒级并发时, 中转侧曾出现主请求 300s 无响应头悬挂; 串行化规避并发。排队中的请求若客户端断开会立即出队。",
"serializeSessionRequests": true,
"_首字节超时说明": "firstByteTimeout: 上游超过该毫秒数未返回响应头时主动中止并返回 502 (0=关闭, 兜底 undici 的 300s)。默认 120000。",
"firstByteTimeout": 120000,
"_模型映射说明": "modelMap: 客户端请求模型名的显式映射, 命中即用, 不区分请求类型 (文本/带图), 优先级最高, 置空即关闭。key 是客户端请求名, value 是转发到上游的模型名。",
"modelMap": {
"claude-sonnet-4-6": "deepseek/deepseek-v4-flash",
"claude-sonnet-4-5": "deepseek/deepseek-v4-flash",
"claude-sonnet-4-5-20250929": "deepseek/deepseek-v4-flash",
"claude-sonnet-4-5-20251101": "deepseek/deepseek-v4-flash",
"claude-sonnet-5": "deepseek/deepseek-v4-flash",
"claude-opus-4-x": "deepseek/deepseek-v4-flash",
"claude-opus-4-1": "deepseek/deepseek-v4-flash",
"claude-opus-4-6": "deepseek/deepseek-v4-flash",
"claude-opus-5": "deepseek/deepseek-v4-flash",
"claude-haiku-4-5": "deepseek/deepseek-v4-flash",
"claude-haiku-4-5-20251001": "deepseek/deepseek-v4-flash",
"gpt-5.3-codex": "gpt-5.6-sol",
"gpt-5.2-codex": "gpt-5.6-sol",
"gpt-5.1-codex": "gpt-5.6-sol"
},
"_默认模型说明": "defaultModels: 文本请求的轮换列表, 第一个作为文本默认模型。失败 1 次即切换, TTL 冷却后重试。模型 id 见 /v1/models。",
"defaultModels": [
"deepseek/deepseek-v4-flash",
"deepseek/deepseek-v4-flash-vision-exp",
"z-ai/glm-5.3-flash",
"Qwen/Qwen3.8-27B",
"xiaomi/mimo-v2.5"
],
"_视觉模型说明": "defaultVisionModels: 带图请求的轮换列表, 第一个作为视觉默认模型 (未带 model 的带图请求直接用它)。带图请求按此列表轮换找能处理图片的模型。",
"defaultVisionModels": [
"xiaomi/mimo-v2.5",
"z-ai/glm-5.3-flash",
"Qwen/Qwen3.8-27B"
],
"_屏蔽说明": "blockedModels: 这些模型在 GOAT 计划下不可用, 从 /v1/models 列表中隐藏, 避免客户端误选。",
"blockedModels": [
"claude-sonnet-4-6",
"claude-sonnet-5",
"claude-fable-5",
"claude-haiku-4-5-20251001",
"claude-opus-4-8",
"claude-opus-5",
"gpt-5.3-codex",
"gpt-5.4",
"gpt-5.4-mini",
"gpt-5.5",
"gpt-5.6-terra",
"gpt-5.6-luna",
"google/gemini-3.6-flash"
]
}