建立可扩展的提供商适配器注册表,实现动态服务发现与插槽管理: 架构改进: - 采用 Map 注册表替代 switch-case 硬编码,支持热插拔适配器 - 实现 acquireSlot/releaseSlot 机制,精确追踪活跃请求与等待队列 - 新增节点评分算法,综合考量并发数、队列长度、健康状态 核心能力: - 支持并发限制与队列等待,避免单节点过载 (concurrencyLimit/queueLimit) - 实现 Fallback 链式调用,429 错误自动切换备用凭证 - 添加请求级 IP 追踪,日志格式优化为 `clientIp:requestId` 配套更新: - 管理界面新增并发/队列配置字段与 Grok 逆向提供商选项 - 用量查询服务扩展 Grok 支持,同步剩余查询次数 (固定总量 80) - 新增并发测试脚本 (tests/concurrent-test.js),支持自定义并发数与 RPM 限制 配置项: - GROK_COOKIE_TOKEN, GROK_CF_CLEARANCE, GROK_USER_AGENT, GROK_BASE_URL
36 lines
1.6 KiB
JavaScript
36 lines
1.6 KiB
JavaScript
import { MODEL_PROTOCOL_PREFIX } from '../utils/common.js';
|
|
import { GeminiStrategy } from '../providers/gemini/gemini-strategy.js';
|
|
import { OpenAIStrategy } from '../providers/openai/openai-strategy.js';
|
|
import { ClaudeStrategy } from '../providers/claude/claude-strategy.js';
|
|
import { ResponsesAPIStrategy } from '../providers/openai/openai-responses-strategy.js';
|
|
import { CodexResponsesAPIStrategy } from '../providers/openai/codex-responses-strategy.js';
|
|
import { ForwardStrategy } from '../providers/forward/forward-strategy.js';
|
|
import { GrokStrategy } from '../providers/grok/grok-strategy.js';
|
|
|
|
/**
|
|
* Strategy factory that returns the appropriate strategy instance based on the provider protocol.
|
|
*/
|
|
class ProviderStrategyFactory {
|
|
static getStrategy(providerProtocol) {
|
|
switch (providerProtocol) {
|
|
case MODEL_PROTOCOL_PREFIX.GEMINI:
|
|
return new GeminiStrategy();
|
|
case MODEL_PROTOCOL_PREFIX.OPENAI:
|
|
return new OpenAIStrategy();
|
|
case MODEL_PROTOCOL_PREFIX.OPENAI_RESPONSES:
|
|
return new ResponsesAPIStrategy();
|
|
case MODEL_PROTOCOL_PREFIX.CLAUDE:
|
|
return new ClaudeStrategy();
|
|
case MODEL_PROTOCOL_PREFIX.CODEX:
|
|
return new CodexResponsesAPIStrategy();
|
|
case MODEL_PROTOCOL_PREFIX.FORWARD:
|
|
return new ForwardStrategy();
|
|
case MODEL_PROTOCOL_PREFIX.GROK:
|
|
return new GrokStrategy();
|
|
default:
|
|
throw new Error(`Unsupported provider protocol: ${providerProtocol}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
export { ProviderStrategyFactory };
|