Priority routing desk

把 fast 流量推上优先通道

这里控制 fast.ycai.cloud 的请求是否在转发前写入 service_tier=priority。当前不注入 priority,更改后只影响后续请求。

Injection已关闭
Version0.1.175
Image2fc3e1cf3c1d

注入配置

保留核心控制:一个开关、两个响应头超时。页面不再暴露 service_tier 编辑,固定为 priority。

启用 priority 注入
开启后,匹配的 OpenAI 兼容 JSON 请求会在代理层自动带上 priority。
常规 responses / chat completions 等请求的响应头等待时间。
compact 路径通常更慢;这里可单独放宽。

最近日志

只显示最近三天的 warn / error / exception 日志,并自动脱敏 API Key / Authorization。

UI 最近日志
最近三天暂无 warn/error 日志
Fast Proxy 最近日志
2026-10-08 08:39:59,464 ERROR proxy error path=/responses: [Errno 104] Connection reset by peer
Traceback (most recent call last):
2026-10-09 10:06:16,149 ERROR proxy error path=/responses: [Errno 104] Connection reset by peer
Traceback (most recent call last):
2026-10-09 16:58:59,925 ERROR proxy error path=/responses: [Errno 104] Connection reset by peer
Traceback (most recent call last):
sub2api 最近日志
2026-10-07T15:51:37.898+0800	WARN	slog	logger/slog_handler.go:55	openai_token_cache_get_failed	{"service": "sub2api", "env": "production", "account_id": 236, "error": "redis: nil"}
2026-10-08T01:32:30.806+0800	WARN	slog	logger/slog_handler.go:55	account_upstream_error	{"service": "sub2api", "env": "production", "account_id": 236, "status_code": 503}
2026-10-08T01:32:30.808+0800	WARN	handler/openai_gateway_handler.go:942	openai.upstream_failover_switching	{"service": "sub2api", "env": "production", "component": "http", "request_id": "23dd3681-1089-4e2f-b2e4-049f6d731272", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "5576e060-79b9-436c-815f-564610ccf204", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 17, "group_id": 2, "model": "gpt-6.1-sol", "stream": true, "account_id": 236, "upstream_status": 503, "switch_count": 1, "max_switches": 10}
2026-10-08T01:32:30.818+0800	WARN	handler/openai_gateway_handler.go:673	openai.account_select_failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "23dd3681-1089-4e2f-b2e4-049f6d731272", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "5576e060-79b9-436c-815f-564610ccf204", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 17, "group_id": 2, "model": "gpt-6.1-sol", "stream": true, "error": "no available OpenAI accounts supporting model: gpt-6.1-sol (pool=1, filtered: excluded=1)", "excluded_account_count": 1}
2026-10-08T03:39:23.232+0800	WARN	service/pricing_service.go:890	[Pricing] Warning: 6 model(s) carry cache above-tier prices without a base cache price; that cache item bills at $0 until the catalog/override supplies the base: gemini-2.5-pro(cache_creation_input_token_cost_above_200k_tokens), gemini-3-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-high(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-low(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview-customtools(cache_creation_input_token_cost_above_200k_tokens)	{"service": "sub2api", "env": "production", "component": "service.pricing", "legacy_printf": true}
2026-10-08T07:49:23.221+0800	WARN	service/pricing_service.go:589	[Pricing] Hash mismatch warning: remote=cbecf56c data=445848c4 (hash file may be out of sync)	{"service": "sub2api", "env": "production", "component": "service.pricing", "legacy_printf": true}
2026-10-08T07:49:23.243+0800	WARN	service/pricing_service.go:890	[Pricing] Warning: 6 model(s) carry cache above-tier prices without a base cache price; that cache item bills at $0 until the catalog/override supplies the base: gemini-2.5-pro(cache_creation_input_token_cost_above_200k_tokens), gemini-3-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-high(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-low(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview-customtools(cache_creation_input_token_cost_above_200k_tokens)	{"service": "sub2api", "env": "production", "component": "service.pricing", "legacy_printf": true}
2026-10-08T13:48:57.230+0800	WARN	slog	logger/slog_handler.go:55	account_upstream_error	{"service": "sub2api", "env": "production", "account_id": 236, "status_code": 503}
2026-10-08T13:48:57.234+0800	WARN	handler/openai_gateway_handler.go:942	openai.upstream_failover_switching	{"service": "sub2api", "env": "production", "component": "http", "request_id": "c391f51b-fa85-4c44-8fdc-95ec14a98035", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "b6e0fa01-8f4c-4441-9259-3cfb190b2e7d", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 20, "group_id": 2, "model": "gpt-5.6-terra", "stream": false, "account_id": 236, "upstream_status": 503, "switch_count": 1, "max_switches": 10}
2026-10-08T13:48:57.238+0800	WARN	handler/openai_gateway_handler.go:673	openai.account_select_failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "c391f51b-fa85-4c44-8fdc-95ec14a98035", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "b6e0fa01-8f4c-4441-9259-3cfb190b2e7d", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 20, "group_id": 2, "model": "gpt-5.6-terra", "stream": false, "error": "no available OpenAI accounts supporting model: gpt-5.6-terra (pool=1, filtered: excluded=1)", "excluded_account_count": 1}
2026-10-08T13:54:31.303+0800	WARN	slog	logger/slog_handler.go:55	sync_upstream_models_failed	{"service": "sub2api", "env": "production", "account_id": 3, "kind": "upstream"}
2026-10-08T13:54:38.919+0800	WARN	slog	logger/slog_handler.go:55	openai_quota_query_failed	{"service": "sub2api", "env": "production", "account_id": 3, "status": 401, "body": "{\n  \"error\": {\n    \"message\": \"Provided authentication token is expired.\",\n    \"type\": null,\n    \"code\": \"token_expired\",\n    \"param\": null\n  },\n  \"status\": 401,\n  \"detail\": {\n    \"code\": \"token_expired\",\n    \"message\": \"Provided authentica...(29 more)"}
2026-10-08T13:54:39.639+0800	WARN	slog	logger/slog_handler.go:55	openai_quota_query_failed	{"service": "sub2api", "env": "production", "account_id": 3, "status": 401, "body": "{\n  \"error\": {\n    \"message\": \"Provided authentication token is expired.\",\n    \"type\": null,\n    \"code\": \"token_expired\",\n    \"param\": null\n  },\n  \"status\": 401,\n  \"detail\": {\n    \"code\": \"token_expired\",\n    \"message\": \"Provided authentica...(29 more)"}
2026-10-08T14:30:12.403+0800	WARN	handler/openai_gateway_handler.go:942	openai.upstream_failover_switching	{"service": "sub2api", "env": "production", "component": "http", "request_id": "9458140a-56e9-4548-aba2-950a4d2a4b2a", "client_request_id": "", "path": "/responses", "method": "POST", "client_request_id": "280a3967-d1ff-4090-a7c5-78b35efabc7a", "component": "handler.openai_gateway.responses", "user_id": 4, "api_key_id": 3, "group_id": 2, "model": "gpt-6-astra", "stream": true, "account_id": 236, "upstream_status": 502, "switch_count": 1, "max_switches": 10}
2026-10-08T14:30:12.409+0800	WARN	handler/openai_gateway_handler.go:673	openai.account_select_failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "9458140a-56e9-4548-aba2-950a4d2a4b2a", "client_request_id": "", "path": "/responses", "method": "POST", "client_request_id": "280a3967-d1ff-4090-a7c5-78b35efabc7a", "component": "handler.openai_gateway.responses", "user_id": 4, "api_key_id": 3, "group_id": 2, "model": "gpt-6-astra", "stream": true, "error": "no available OpenAI accounts supporting model: gpt-6-astra (pool=1, filtered: excluded=1)", "excluded_account_count": 1}
2026-10-08T15:09:10.728+0800	WARN	handler/openai_gateway_handler.go:899	openai.pool_mode_same_account_retry	{"service": "sub2api", "env": "production", "component": "http", "request_id": "0314944a-6aed-4666-aa79-b4e222c52c6b", "client_request_id": "", "path": "/responses", "method": "POST", "client_request_id": "692ed48a-2ea9-43c5-8979-e193202c4221", "component": "handler.openai_gateway.responses", "user_id": 4, "api_key_id": 3, "group_id": 2, "model": "gpt-6-astra", "stream": true, "account_id": 236, "upstream_status": 503, "retry_limit": 3, "retry_count": 1, "retry_delay": 500}
2026-10-08T17:07:14.952+0800	WARN	slog	logger/slog_handler.go:55	account_upstream_error	{"service": "sub2api", "env": "production", "account_id": 236, "status_code": 503}
2026-10-08T17:07:14.954+0800	WARN	handler/openai_gateway_handler.go:942	openai.upstream_failover_switching	{"service": "sub2api", "env": "production", "component": "http", "request_id": "b20ac7e4-4790-4236-944d-8429b85d6a15", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "348ba584-5c39-4840-977c-fe464b279734", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 20, "group_id": 2, "model": "gpt-5.6-terra", "stream": false, "account_id": 236, "upstream_status": 503, "switch_count": 1, "max_switches": 10}
2026-10-08T17:07:14.956+0800	WARN	handler/openai_gateway_handler.go:673	openai.account_select_failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "b20ac7e4-4790-4236-944d-8429b85d6a15", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "348ba584-5c39-4840-977c-fe464b279734", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 20, "group_id": 2, "model": "gpt-5.6-terra", "stream": false, "error": "no available OpenAI accounts supporting model: gpt-5.6-terra (pool=1, filtered: excluded=1)", "excluded_account_count": 1}
2026-10-09T06:39:23.256+0800	WARN	service/pricing_service.go:890	[Pricing] Warning: 6 model(s) carry cache above-tier prices without a base cache price; that cache item bills at $0 until the catalog/override supplies the base: gemini-2.5-pro(cache_creation_input_token_cost_above_200k_tokens), gemini-3-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-high(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-low(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview-customtools(cache_creation_input_token_cost_above_200k_tokens)	{"service": "sub2api", "env": "production", "component": "service.pricing", "legacy_printf": true}
2026-10-09T15:05:00.231+0800	WARN	handler/request_body_read_log.go:31	read request body failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "c5c87d93-845e-49e8-a2be-469a6725ea90", "client_request_id": "", "path": "/responses", "method": "POST", "client_request_id": "59261400-ce64-4ba3-b42d-89f253636d20", "component": "handler.openai_gateway.responses", "user_id": 4, "api_key_id": 3, "group_id": 2, "error_kind": "truncated_body", "content_encoding": "identity", "content_length": 1975819}
2026-10-09T17:10:01.608+0800	WARN	slog	logger/slog_handler.go:55	account_upstream_error	{"service": "sub2api", "env": "production", "account_id": 236, "status_code": 503}
2026-10-09T17:10:01.618+0800	WARN	handler/openai_gateway_handler.go:942	openai.upstream_failover_switching	{"service": "sub2api", "env": "production", "component": "http", "request_id": "15076978-efb9-4a04-ace7-d0c6ead935f9", "client_request_id": "", "path": "/responses", "method": "POST", "client_request_id": "8b6e9516-f9bc-453d-86d4-669d5644b7c0", "component": "handler.openai_gateway.responses", "user_id": 3, "api_key_id": 4, "group_id": 2, "model": "gpt-6.1-sol", "stream": true, "account_id": 236, "upstream_status": 503, "switch_count": 1, "max_switches": 10}
2026-10-09T17:10:01.632+0800	WARN	handler/openai_gateway_handler.go:673	openai.account_select_failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "15076978-efb9-4a04-ace7-d0c6ead935f9", "client_request_id": "", "path": "/responses", "method": "POST", "client_request_id": "8b6e9516-f9bc-453d-86d4-669d5644b7c0", "component": "handler.openai_gateway.responses", "user_id": 3, "api_key_id": 4, "group_id": 2, "model": "gpt-6.1-sol", "stream": true, "error": "no available OpenAI accounts supporting model: gpt-6.1-sol (pool=1, filtered: excluded=1)", "excluded_account_count": 1}
2026-10-09T17:46:16.993+0800	WARN	slog	logger/slog_handler.go:55	openai_quota_query_failed	{"service": "sub2api", "env": "production", "account_id": 3, "status": 401, "body": "{\n  \"error\": {\n    \"message\": \"Your authentication token has expired. Please try refreshing it.\",\n    \"type\": \"invalid_request_error\",\n    \"code\": \"token_expired\",\n    \"param\": null\n  },\n  \"status\": 401,\n  \"detail\": {\n    \"code\": \"token_exp...(94 more)"}
2026-10-09T17:46:17.501+0800	WARN	slog	logger/slog_handler.go:55	openai_quota_query_failed	{"service": "sub2api", "env": "production", "account_id": 3, "status": 401, "body": "{\n  \"error\": {\n    \"message\": \"Your authentication token has expired. Please try refreshing it.\",\n    \"type\": \"invalid_request_error\",\n    \"code\": \"token_expired\",\n    \"param\": null\n  },\n  \"status\": 401,\n  \"detail\": {\n    \"code\": \"token_exp...(94 more)"}
2026-10-09T17:48:09.210+0800	WARN	slog	logger/slog_handler.go:55	openai_token_cache_get_failed	{"service": "sub2api", "env": "production", "account_id": 3, "error": "redis: nil"}
2026-10-09T19:18:58.311+0800	WARN	handler/openai_gateway_handler.go:942	openai.upstream_failover_switching	{"service": "sub2api", "env": "production", "component": "http", "request_id": "29c0b9bb-1131-4cc5-a6b7-704f01279d31", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "66b0acbf-c3d6-41e8-a5de-d593849a33ad", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 17, "group_id": 2, "model": "gpt-6.1-sol", "stream": true, "account_id": 3, "upstream_status": 502, "switch_count": 1, "max_switches": 10}
2026-10-09T19:22:54.087+0800	WARN	handler/openai_gateway_handler.go:959	openai.forward_failed	{"service": "sub2api", "env": "production", "component": "http", "request_id": "e9473480-00e8-4182-b0e0-62f7f0974b4b", "client_request_id": "", "path": "/v1/responses", "method": "POST", "client_request_id": "7243ac6c-983c-4679-9057-09eee4a458e0", "component": "handler.openai_gateway.responses", "user_id": 2, "api_key_id": 17, "group_id": 2, "model": "gpt-6.1-sol", "stream": true, "account_id": 236, "fallback_error_response_written": false, "upstream_error_response_already_written": false, "error": "stream read error: stream error: stream ID 9; INTERNAL_ERROR; received from peer"}
2026-10-10T05:19:23.240+0800	WARN	service/pricing_service.go:890	[Pricing] Warning: 6 model(s) carry cache above-tier prices without a base cache price; that cache item bills at $0 until the catalog/override supplies the base: gemini-2.5-pro(cache_creation_input_token_cost_above_200k_tokens), gemini-3-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-high(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-low(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview(cache_creation_input_token_cost_above_200k_tokens), gemini-3.1-pro-preview-customtools(cache_creation_input_token_cost_above_200k_tokens)	{"service": "sub2api", "env": "production", "component": "service.pricing", "legacy_printf": true}