@jsonstudio/rcc 0.89.3 → 0.89.168
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +240 -179
- package/config/modules.json +1 -11
- package/dist/build-info.js +3 -3
- package/dist/build-info.js.map +1 -1
- package/dist/client/gemini-cli/gemini-cli-protocol-client.d.ts +16 -0
- package/dist/client/gemini-cli/gemini-cli-protocol-client.js +56 -0
- package/dist/client/gemini-cli/gemini-cli-protocol-client.js.map +1 -0
- package/dist/client/openai/chat-protocol-client.js.map +1 -1
- package/dist/config/modules.json +1 -11
- package/dist/core/provider-health-manager.d.ts +17 -0
- package/dist/core/provider-health-manager.js +66 -0
- package/dist/core/provider-health-manager.js.map +1 -0
- package/dist/error-handling/route-error-hub.d.ts +48 -0
- package/dist/error-handling/route-error-hub.js +131 -0
- package/dist/error-handling/route-error-hub.js.map +1 -0
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/llmswitch/bridge.d.ts +2 -0
- package/dist/modules/llmswitch/bridge.js +17 -0
- package/dist/modules/llmswitch/bridge.js.map +1 -1
- package/dist/modules/pipeline/utils/colored-logger.d.ts +14 -0
- package/dist/modules/pipeline/utils/colored-logger.js +48 -0
- package/dist/modules/pipeline/utils/colored-logger.js.map +1 -0
- package/dist/modules/pipeline/utils/debug-logger.d.ts +2 -0
- package/dist/modules/pipeline/utils/debug-logger.js +36 -0
- package/dist/modules/pipeline/utils/debug-logger.js.map +1 -1
- package/dist/providers/auth/gemini-cli-userinfo-helper.d.ts +53 -0
- package/dist/providers/auth/gemini-cli-userinfo-helper.js +152 -0
- package/dist/providers/auth/gemini-cli-userinfo-helper.js.map +1 -0
- package/dist/providers/auth/oauth-auth.js +3 -2
- package/dist/providers/auth/oauth-auth.js.map +1 -1
- package/dist/providers/auth/oauth-lifecycle.js +21 -20
- package/dist/providers/auth/oauth-lifecycle.js.map +1 -1
- package/dist/providers/auth/oauth-logger.d.ts +1 -0
- package/dist/providers/auth/oauth-logger.js +21 -0
- package/dist/providers/auth/oauth-logger.js.map +1 -0
- package/dist/providers/compat/compat-directory-loader.js +2 -55
- package/dist/providers/compat/compat-directory-loader.js.map +1 -1
- package/dist/providers/compat/compatibility-factory.d.ts +4 -4
- package/dist/providers/compat/compatibility-factory.js +108 -0
- package/dist/providers/compat/compatibility-factory.js.map +1 -1
- package/dist/providers/compat/glm/glm-compatibility.d.ts +2 -2
- package/dist/providers/compat/glm/glm-compatibility.js +7 -7
- package/dist/providers/compat/glm/glm-compatibility.js.map +1 -1
- package/dist/providers/compat/glm/index.js +0 -6
- package/dist/providers/compat/glm/index.js.map +1 -1
- package/dist/providers/compat/iflow/iflow-compatibility.d.ts +1 -1
- package/dist/providers/compat/iflow/iflow-compatibility.js +6 -6
- package/dist/providers/compat/iflow/iflow-compatibility.js.map +1 -1
- package/dist/providers/compat/index.d.ts +0 -6
- package/dist/providers/compat/index.js +0 -7
- package/dist/providers/compat/index.js.map +1 -1
- package/dist/providers/compat/lmstudio-compatibility.d.ts +2 -2
- package/dist/providers/compat/lmstudio-compatibility.js +4 -4
- package/dist/providers/compat/lmstudio-compatibility.js.map +1 -1
- package/dist/providers/compat/passthrough-compatibility.d.ts +1 -1
- package/dist/providers/compat/passthrough-compatibility.js +3 -3
- package/dist/providers/compat/passthrough-compatibility.js.map +1 -1
- package/dist/providers/compat/profiles/chat/glm/index.d.ts +6 -0
- package/dist/providers/compat/profiles/chat/glm/index.js +6 -0
- package/dist/providers/compat/profiles/chat/glm/index.js.map +1 -0
- package/dist/providers/compat/profiles/chat/iflow/index.d.ts +6 -0
- package/dist/providers/compat/profiles/chat/iflow/index.js +6 -0
- package/dist/providers/compat/profiles/chat/iflow/index.js.map +1 -0
- package/dist/providers/compat/profiles/chat/lmstudio/index.d.ts +6 -0
- package/dist/providers/compat/profiles/chat/lmstudio/index.js +6 -0
- package/dist/providers/compat/profiles/chat/lmstudio/index.js.map +1 -0
- package/dist/providers/compat/profiles/chat/qwen/index.d.ts +6 -0
- package/dist/providers/compat/profiles/chat/qwen/index.js +6 -0
- package/dist/providers/compat/profiles/chat/qwen/index.js.map +1 -0
- package/dist/providers/compat/profiles/compat/passthrough/index.d.ts +6 -0
- package/dist/providers/compat/profiles/compat/passthrough/index.js +6 -0
- package/dist/providers/compat/profiles/compat/passthrough/index.js.map +1 -0
- package/dist/providers/compat/profiles/responses/c4m/index.d.ts +6 -0
- package/dist/providers/compat/profiles/responses/c4m/index.js +6 -0
- package/dist/providers/compat/profiles/responses/c4m/index.js.map +1 -0
- package/dist/providers/compat/profiles/responses/default/index.d.ts +6 -0
- package/dist/providers/compat/profiles/responses/default/index.js +6 -0
- package/dist/providers/compat/profiles/responses/default/index.js.map +1 -0
- package/dist/providers/compat/profiles/responses/fai/index.d.ts +6 -0
- package/dist/providers/compat/profiles/responses/fai/index.js +6 -0
- package/dist/providers/compat/profiles/responses/fai/index.js.map +1 -0
- package/dist/providers/compat/profiles/responses/fc/index.d.ts +6 -0
- package/dist/providers/compat/profiles/responses/fc/index.js +6 -0
- package/dist/providers/compat/profiles/responses/fc/index.js.map +1 -0
- package/dist/providers/compat/qwen/index.js +0 -6
- package/dist/providers/compat/qwen/index.js.map +1 -1
- package/dist/providers/compat/qwen-compatibility.d.ts +2 -2
- package/dist/providers/compat/qwen-compatibility.js +4 -4
- package/dist/providers/compat/qwen-compatibility.js.map +1 -1
- package/dist/providers/compat/register-compat-module.d.ts +8 -0
- package/dist/providers/compat/register-compat-module.js +53 -0
- package/dist/providers/compat/register-compat-module.js.map +1 -0
- package/dist/providers/compat/responses/c4m-responses-compatibility.d.ts +6 -2
- package/dist/providers/compat/responses/c4m-responses-compatibility.js +85 -3
- package/dist/providers/compat/responses/c4m-responses-compatibility.js.map +1 -1
- package/dist/providers/compat/standard-compatibility-utils.js +45 -15
- package/dist/providers/compat/standard-compatibility-utils.js.map +1 -1
- package/dist/providers/core/api/provider-config.d.ts +1 -1
- package/dist/providers/core/api/provider-types.d.ts +3 -1
- package/dist/providers/core/api/provider-types.js +1 -0
- package/dist/providers/core/api/provider-types.js.map +1 -1
- package/dist/providers/core/config/service-profiles.js +19 -2
- package/dist/providers/core/config/service-profiles.js.map +1 -1
- package/dist/providers/core/runtime/base-provider.d.ts +8 -0
- package/dist/providers/core/runtime/base-provider.js +79 -36
- package/dist/providers/core/runtime/base-provider.js.map +1 -1
- package/dist/providers/core/runtime/gemini-cli-http-provider.d.ts +33 -0
- package/dist/providers/core/runtime/gemini-cli-http-provider.js +156 -0
- package/dist/providers/core/runtime/gemini-cli-http-provider.js.map +1 -0
- package/dist/providers/core/runtime/gemini-http-provider.d.ts +1 -2
- package/dist/providers/core/runtime/gemini-http-provider.js +0 -12
- package/dist/providers/core/runtime/gemini-http-provider.js.map +1 -1
- package/dist/providers/core/runtime/http-request-executor.d.ts +42 -0
- package/dist/providers/core/runtime/http-request-executor.js +133 -0
- package/dist/providers/core/runtime/http-request-executor.js.map +1 -0
- package/dist/providers/core/runtime/http-transport-provider.d.ts +7 -11
- package/dist/providers/core/runtime/http-transport-provider.js +226 -371
- package/dist/providers/core/runtime/http-transport-provider.js.map +1 -1
- package/dist/providers/core/runtime/provider-error-classifier.d.ts +25 -0
- package/dist/providers/core/runtime/provider-error-classifier.js +139 -0
- package/dist/providers/core/runtime/provider-error-classifier.js.map +1 -0
- package/dist/providers/core/runtime/provider-error-types.d.ts +23 -0
- package/dist/providers/core/runtime/provider-error-types.js +2 -0
- package/dist/providers/core/runtime/provider-error-types.js.map +1 -0
- package/dist/providers/core/runtime/provider-factory.d.ts +1 -1
- package/dist/providers/core/runtime/provider-factory.js +14 -0
- package/dist/providers/core/runtime/provider-factory.js.map +1 -1
- package/dist/providers/core/runtime/provider-runtime-metadata.d.ts +1 -0
- package/dist/providers/core/runtime/provider-runtime-metadata.js.map +1 -1
- package/dist/providers/core/runtime/responses-provider.d.ts +7 -0
- package/dist/providers/core/runtime/responses-provider.js +228 -12
- package/dist/providers/core/runtime/responses-provider.js.map +1 -1
- package/dist/providers/core/strategies/oauth-auth-code-flow.js +10 -9
- package/dist/providers/core/strategies/oauth-auth-code-flow.js.map +1 -1
- package/dist/providers/core/strategies/oauth-device-flow.js +10 -9
- package/dist/providers/core/strategies/oauth-device-flow.js.map +1 -1
- package/dist/providers/core/utils/provider-error-reporter.js +63 -15
- package/dist/providers/core/utils/provider-error-reporter.js.map +1 -1
- package/dist/providers/core/utils/provider-type-utils.d.ts +1 -1
- package/dist/providers/core/utils/provider-type-utils.js +6 -1
- package/dist/providers/core/utils/provider-type-utils.js.map +1 -1
- package/dist/providers/core/utils/snapshot-writer.d.ts +10 -0
- package/dist/providers/core/utils/snapshot-writer.js +85 -0
- package/dist/providers/core/utils/snapshot-writer.js.map +1 -1
- package/dist/providers/mock/mock-provider-runtime.js +44 -0
- package/dist/providers/mock/mock-provider-runtime.js.map +1 -1
- package/dist/providers/profile/provider-profile-loader.js +26 -19
- package/dist/providers/profile/provider-profile-loader.js.map +1 -1
- package/dist/providers/profile/provider-profile.d.ts +2 -2
- package/dist/server/handlers/chat-handler.js +9 -3
- package/dist/server/handlers/chat-handler.js.map +1 -1
- package/dist/server/handlers/handler-utils.d.ts +7 -1
- package/dist/server/handlers/handler-utils.js +64 -52
- package/dist/server/handlers/handler-utils.js.map +1 -1
- package/dist/server/handlers/messages-handler.js +9 -3
- package/dist/server/handlers/messages-handler.js.map +1 -1
- package/dist/server/handlers/responses-handler.js +21 -13
- package/dist/server/handlers/responses-handler.js.map +1 -1
- package/dist/server/runtime/http-server/colored-logger.d.ts +1 -0
- package/dist/server/runtime/http-server/colored-logger.js +33 -0
- package/dist/server/runtime/http-server/colored-logger.js.map +1 -0
- package/dist/server/runtime/http-server/index.d.ts +3 -0
- package/dist/server/runtime/http-server/index.js +76 -19
- package/dist/server/runtime/http-server/index.js.map +1 -1
- package/dist/server/runtime/http-server/provider-utils.d.ts +3 -1
- package/dist/server/runtime/http-server/provider-utils.js +12 -2
- package/dist/server/runtime/http-server/provider-utils.js.map +1 -1
- package/dist/server/runtime/http-server/request-executor.js +6 -2
- package/dist/server/runtime/http-server/request-executor.js.map +1 -1
- package/dist/server/runtime/http-server/routes.js +31 -11
- package/dist/server/runtime/http-server/routes.js.map +1 -1
- package/dist/server/runtime/http-server/types.d.ts +2 -1
- package/dist/utils/error-center-payload.d.ts +7 -0
- package/dist/utils/error-center-payload.js +67 -0
- package/dist/utils/error-center-payload.js.map +1 -0
- package/dist/utils/error-handler-registry.d.ts +7 -0
- package/dist/utils/error-handler-registry.js +44 -12
- package/dist/utils/error-handler-registry.js.map +1 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/codecs/responses-openai-codec.js +16 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-glm.json +17 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-iflow.json +36 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-lmstudio.json +37 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/chat-qwen.json +18 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/compat/profiles/responses-c4m.json +45 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/config/compat-profiles.json +38 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/config/sample-config.json +314 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/config/version-switch.json +150 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-engine.d.ts +4 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-engine.js +667 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-profile-store.d.ts +2 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-profile-store.js +76 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-types.d.ts +62 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/compat/compat-types.js +1 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.d.ts +2 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/hub-pipeline.js +110 -29
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.d.ts +14 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +23 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +34 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/process/chat-process.js +4 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/hub/response/provider-response.js +26 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.d.ts +1 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/responses/responses-openai-bridge.js +71 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-conversation-store.d.ts +35 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/responses-conversation-store.js +64 -19
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-filter-pipeline.d.ts +21 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-filter-pipeline.js +138 -22
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.d.ts +21 -0
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-governor.js +116 -1
- package/node_modules/@jsonstudio/llms/dist/conversion/shared/tool-mapping.js +52 -2
- package/node_modules/@jsonstudio/llms/dist/filters/config/openai-openai.fieldmap.json +18 -0
- package/node_modules/@jsonstudio/llms/dist/filters/special/request-tools-normalize.js +20 -1
- package/node_modules/@jsonstudio/llms/dist/guidance/index.js +6 -2
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/bootstrap.js +16 -7
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/classifier.js +40 -37
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/default-thinking-keywords.d.ts +1 -0
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/default-thinking-keywords.js +13 -0
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.d.ts +39 -0
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/engine.js +52 -11
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/features.js +340 -11
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-counter.d.ts +2 -0
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/token-counter.js +105 -0
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.d.ts +8 -0
- package/node_modules/@jsonstudio/llms/dist/router/virtual-router/types.js +2 -2
- package/node_modules/@jsonstudio/llms/dist/sse/sse-to-json/builders/response-builder.d.ts +2 -0
- package/node_modules/@jsonstudio/llms/dist/sse/sse-to-json/builders/response-builder.js +53 -11
- package/node_modules/@jsonstudio/llms/dist/test-output/virtual-router/results.json +1 -0
- package/node_modules/@jsonstudio/llms/dist/test-output/virtual-router/summary.json +12 -0
- package/node_modules/@jsonstudio/llms/dist/tools/tool-registry.js +4 -3
- package/node_modules/@jsonstudio/llms/package.json +3 -3
- package/package.json +13 -10
- package/scripts/analyze-routing-classifier.mjs +166 -0
- package/scripts/analyze-routing-samples.mjs +216 -0
- package/scripts/analyze-thinking-keywords.mjs +17 -2
- package/scripts/build-core.mjs +8 -0
- package/scripts/classify-sample-tools.mjs +252 -0
- package/scripts/ensure-llmswitch-mode.mjs +95 -0
- package/scripts/gen-build-info.mjs +58 -4
- package/scripts/install-global.sh +1 -1
- package/scripts/install-release.sh +7 -0
- package/scripts/mock-provider/run-regressions.mjs +60 -14
- package/scripts/pack-mode.mjs +30 -1
- package/scripts/publish-rcc.mjs +31 -0
- package/scripts/tests/apply-patch-loop.mjs +100 -9
- package/scripts/tests/golden-provider-cycle.mjs +12 -1
- package/scripts/tests/responses-provider-dry-run.mjs +15 -1
- package/scripts/tests/virtual-router-health.mjs +12 -5
- package/scripts/tools/capture-provider-goldens.mjs +75 -25
- package/scripts/tools/responses-golden-dry-run.mjs +17 -1
- package/scripts/tools/responses-provider-replay.mjs +17 -1
- package/scripts/tools/sync-ci-goldens.mjs +131 -0
- package/scripts/verification/samples/openai-chat-list-local-files.json +19 -796
- package/scripts/verify-e2e-toolcall.mjs +52 -0
- package/dist/providers/compat/config/index.d.ts +0 -1
- package/dist/providers/compat/config/index.js +0 -5
- package/dist/providers/compat/config/index.js.map +0 -1
- package/dist/providers/compat/iflow/index.d.ts +0 -27
- package/dist/providers/compat/iflow/index.js +0 -32
- package/dist/providers/compat/iflow/index.js.map +0 -1
- package/dist/providers/compat/lmstudio/index.d.ts +0 -4
- package/dist/providers/compat/lmstudio/index.js +0 -10
- package/dist/providers/compat/lmstudio/index.js.map +0 -1
- package/dist/providers/compat/passthrough/index.d.ts +0 -4
- package/dist/providers/compat/passthrough/index.js +0 -9
- package/dist/providers/compat/passthrough/index.js.map +0 -1
- package/dist/providers/compat/responses/index.d.ts +0 -1
- package/dist/providers/compat/responses/index.js +0 -8
- package/dist/providers/compat/responses/index.js.map +0 -1
- package/dist/providers/core/composite/compat/anthropic.d.ts +0 -3
- package/dist/providers/core/composite/compat/anthropic.js +0 -7
- package/dist/providers/core/composite/compat/anthropic.js.map +0 -1
- package/dist/providers/core/composite/compat/gemini.d.ts +0 -3
- package/dist/providers/core/composite/compat/gemini.js +0 -7
- package/dist/providers/core/composite/compat/gemini.js.map +0 -1
- package/dist/providers/core/composite/compat/openai-compat-aggregator.d.ts +0 -9
- package/dist/providers/core/composite/compat/openai-compat-aggregator.js +0 -135
- package/dist/providers/core/composite/compat/openai-compat-aggregator.js.map +0 -1
- package/dist/providers/core/composite/compat/responses.d.ts +0 -3
- package/dist/providers/core/composite/compat/responses.js +0 -91
- package/dist/providers/core/composite/compat/responses.js.map +0 -1
- package/dist/providers/core/composite/provider-composite.d.ts +0 -50
- package/dist/providers/core/composite/provider-composite.js +0 -235
- package/dist/providers/core/composite/provider-composite.js.map +0 -1
- package/scripts/tests/apply-patch-loop.mjs.bak +0 -363
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { HttpClient } from '../utils/http-client.js';
|
|
2
|
+
import type { UnknownObject } from '../../../types/common-types.js';
|
|
3
|
+
import type { ProviderContext } from '../api/provider-types.js';
|
|
4
|
+
import type { ProviderErrorAugmented } from './provider-error-types.js';
|
|
5
|
+
export type PreparedHttpRequest = {
|
|
6
|
+
endpoint: string;
|
|
7
|
+
headers: Record<string, string>;
|
|
8
|
+
targetUrl: string;
|
|
9
|
+
body: UnknownObject;
|
|
10
|
+
entryEndpoint?: string;
|
|
11
|
+
clientRequestId?: string;
|
|
12
|
+
wantsSse: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type HttpRequestExecutorDeps = {
|
|
15
|
+
wantsUpstreamSse(request: UnknownObject, context: ProviderContext): boolean;
|
|
16
|
+
getEffectiveEndpoint(): string;
|
|
17
|
+
resolveRequestEndpoint(request: UnknownObject, defaultEndpoint: string): string;
|
|
18
|
+
buildRequestHeaders(): Promise<Record<string, string>>;
|
|
19
|
+
finalizeRequestHeaders(headers: Record<string, string>, request: UnknownObject): Promise<Record<string, string>>;
|
|
20
|
+
applyStreamModeHeaders(headers: Record<string, string>, wantsSse: boolean): Record<string, string>;
|
|
21
|
+
getEffectiveBaseUrl(): string;
|
|
22
|
+
buildHttpRequestBody(request: UnknownObject): UnknownObject;
|
|
23
|
+
prepareSseRequestBody(body: UnknownObject, context: ProviderContext): void;
|
|
24
|
+
getEntryEndpointFromPayload(request: UnknownObject): string | undefined;
|
|
25
|
+
getClientRequestIdFromContext(context: ProviderContext): string | undefined;
|
|
26
|
+
wrapUpstreamSseResponse(stream: NodeJS.ReadableStream, context: ProviderContext): Promise<UnknownObject>;
|
|
27
|
+
getHttpRetryLimit(): number;
|
|
28
|
+
shouldRetryHttpError(error: unknown, attempt: number, maxAttempts: number): boolean;
|
|
29
|
+
delayBeforeHttpRetry(attempt: number): Promise<void>;
|
|
30
|
+
tryRecoverOAuthAndReplay?(error: unknown, requestInfo: PreparedHttpRequest, processedRequest: UnknownObject, captureSse: boolean, context: ProviderContext): Promise<unknown | undefined>;
|
|
31
|
+
normalizeHttpError(error: unknown, processedRequest: UnknownObject, requestInfo: PreparedHttpRequest, context: ProviderContext): Promise<ProviderErrorAugmented>;
|
|
32
|
+
};
|
|
33
|
+
export declare class HttpRequestExecutor {
|
|
34
|
+
private readonly httpClient;
|
|
35
|
+
private readonly deps;
|
|
36
|
+
constructor(httpClient: HttpClient, deps: HttpRequestExecutorDeps);
|
|
37
|
+
execute(processedRequest: UnknownObject, context: ProviderContext): Promise<unknown>;
|
|
38
|
+
private prepareHttpRequest;
|
|
39
|
+
private snapshotProviderRequest;
|
|
40
|
+
private executeHttpRequestWithRetries;
|
|
41
|
+
private executeHttpRequestOnce;
|
|
42
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { attachProviderSseSnapshotStream, shouldCaptureProviderStreamSnapshots, writeProviderSnapshot } from '../utils/snapshot-writer.js';
|
|
2
|
+
export class HttpRequestExecutor {
|
|
3
|
+
httpClient;
|
|
4
|
+
deps;
|
|
5
|
+
constructor(httpClient, deps) {
|
|
6
|
+
this.httpClient = httpClient;
|
|
7
|
+
this.deps = deps;
|
|
8
|
+
}
|
|
9
|
+
async execute(processedRequest, context) {
|
|
10
|
+
const prepared = await this.prepareHttpRequest(processedRequest, context);
|
|
11
|
+
await this.snapshotProviderRequest(prepared, context);
|
|
12
|
+
try {
|
|
13
|
+
return await this.executeHttpRequestWithRetries(prepared, processedRequest, context);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const normalized = await this.deps.normalizeHttpError(error, processedRequest, prepared, context);
|
|
17
|
+
throw normalized;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async prepareHttpRequest(processedRequest, context) {
|
|
21
|
+
const wantsSse = this.deps.wantsUpstreamSse(processedRequest, context);
|
|
22
|
+
const defaultEndpoint = this.deps.getEffectiveEndpoint();
|
|
23
|
+
const endpoint = this.deps.resolveRequestEndpoint(processedRequest, defaultEndpoint);
|
|
24
|
+
const headers = await this.deps.buildRequestHeaders();
|
|
25
|
+
let finalHeaders = await this.deps.finalizeRequestHeaders(headers, processedRequest);
|
|
26
|
+
finalHeaders = this.deps.applyStreamModeHeaders(finalHeaders, wantsSse);
|
|
27
|
+
const targetUrl = `${this.deps.getEffectiveBaseUrl().replace(/\/$/, '')}/${endpoint.startsWith('/') ? endpoint.slice(1) : endpoint}`;
|
|
28
|
+
const finalBody = this.deps.buildHttpRequestBody(processedRequest);
|
|
29
|
+
if (wantsSse) {
|
|
30
|
+
this.deps.prepareSseRequestBody(finalBody, context);
|
|
31
|
+
}
|
|
32
|
+
const entryEndpoint = this.deps.getEntryEndpointFromPayload(processedRequest);
|
|
33
|
+
const clientRequestId = this.deps.getClientRequestIdFromContext(context);
|
|
34
|
+
return {
|
|
35
|
+
endpoint,
|
|
36
|
+
headers: finalHeaders,
|
|
37
|
+
targetUrl,
|
|
38
|
+
body: finalBody,
|
|
39
|
+
entryEndpoint,
|
|
40
|
+
clientRequestId,
|
|
41
|
+
wantsSse
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async snapshotProviderRequest(requestInfo, context) {
|
|
45
|
+
try {
|
|
46
|
+
await writeProviderSnapshot({
|
|
47
|
+
phase: 'provider-request',
|
|
48
|
+
requestId: context.requestId,
|
|
49
|
+
data: requestInfo.body,
|
|
50
|
+
headers: requestInfo.headers,
|
|
51
|
+
url: requestInfo.targetUrl,
|
|
52
|
+
entryEndpoint: requestInfo.entryEndpoint,
|
|
53
|
+
clientRequestId: requestInfo.clientRequestId
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* ignore snapshot failures */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async executeHttpRequestWithRetries(requestInfo, processedRequest, context) {
|
|
61
|
+
const captureSse = shouldCaptureProviderStreamSnapshots();
|
|
62
|
+
const maxAttempts = this.deps.getHttpRetryLimit();
|
|
63
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
64
|
+
try {
|
|
65
|
+
return await this.executeHttpRequestOnce(requestInfo, context, captureSse);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (this.deps.tryRecoverOAuthAndReplay) {
|
|
69
|
+
const oauthReplay = await this.deps.tryRecoverOAuthAndReplay(error, requestInfo, processedRequest, captureSse, context);
|
|
70
|
+
if (oauthReplay) {
|
|
71
|
+
return oauthReplay;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const shouldRetry = this.deps.shouldRetryHttpError(error, attempt, maxAttempts);
|
|
75
|
+
if (shouldRetry) {
|
|
76
|
+
await this.deps.delayBeforeHttpRetry(attempt);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
throw new Error('provider-runtime-error: http retries exhausted');
|
|
83
|
+
}
|
|
84
|
+
async executeHttpRequestOnce(requestInfo, context, captureSse) {
|
|
85
|
+
if (requestInfo.wantsSse) {
|
|
86
|
+
const upstreamStream = await this.httpClient.postStream(requestInfo.endpoint, requestInfo.body, requestInfo.headers);
|
|
87
|
+
const streamForHost = captureSse
|
|
88
|
+
? attachProviderSseSnapshotStream(upstreamStream, {
|
|
89
|
+
requestId: context.requestId,
|
|
90
|
+
headers: requestInfo.headers,
|
|
91
|
+
url: requestInfo.targetUrl,
|
|
92
|
+
entryEndpoint: requestInfo.entryEndpoint,
|
|
93
|
+
clientRequestId: requestInfo.clientRequestId
|
|
94
|
+
})
|
|
95
|
+
: upstreamStream;
|
|
96
|
+
const wrapped = await this.deps.wrapUpstreamSseResponse(streamForHost, context);
|
|
97
|
+
if (!captureSse) {
|
|
98
|
+
try {
|
|
99
|
+
await writeProviderSnapshot({
|
|
100
|
+
phase: 'provider-response',
|
|
101
|
+
requestId: context.requestId,
|
|
102
|
+
data: { mode: 'sse' },
|
|
103
|
+
headers: requestInfo.headers,
|
|
104
|
+
url: requestInfo.targetUrl,
|
|
105
|
+
entryEndpoint: requestInfo.entryEndpoint,
|
|
106
|
+
clientRequestId: requestInfo.clientRequestId
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
/* ignore snapshot failures */
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return wrapped;
|
|
114
|
+
}
|
|
115
|
+
const response = await this.httpClient.post(requestInfo.endpoint, requestInfo.body, requestInfo.headers);
|
|
116
|
+
try {
|
|
117
|
+
await writeProviderSnapshot({
|
|
118
|
+
phase: 'provider-response',
|
|
119
|
+
requestId: context.requestId,
|
|
120
|
+
data: response,
|
|
121
|
+
headers: requestInfo.headers,
|
|
122
|
+
url: requestInfo.targetUrl,
|
|
123
|
+
entryEndpoint: requestInfo.entryEndpoint,
|
|
124
|
+
clientRequestId: requestInfo.clientRequestId
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
/* ignore snapshot failures */
|
|
129
|
+
}
|
|
130
|
+
return response;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=http-request-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-request-executor.js","sourceRoot":"","sources":["../../../../src/providers/core/runtime/http-request-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { BaseProvider } from './base-provider.js';
|
|
12
12
|
import { HttpClient } from '../utils/http-client.js';
|
|
13
|
-
import { HookSystemIntegration } from '../hooks/hooks-integration.js';
|
|
14
13
|
import type { IAuthProvider } from '../../auth/auth-interface.js';
|
|
15
14
|
import type { OpenAIStandardConfig } from '../api/provider-config.js';
|
|
16
15
|
import type { ProviderContext, ServiceProfile } from '../api/provider-types.js';
|
|
@@ -23,8 +22,8 @@ export declare class HttpTransportProvider extends BaseProvider {
|
|
|
23
22
|
protected authProvider: IAuthProvider | null;
|
|
24
23
|
protected httpClient: HttpClient;
|
|
25
24
|
protected serviceProfile: ServiceProfile;
|
|
26
|
-
protected hookSystemIntegration: HookSystemIntegration;
|
|
27
25
|
protected protocolClient: ProtocolClient;
|
|
26
|
+
private requestExecutor;
|
|
28
27
|
private injectedConfig;
|
|
29
28
|
constructor(config: OpenAIStandardConfig, dependencies: ModuleDependencies, moduleType: string, protocolClient?: HttpProtocolClient<ProtocolRequestPayload>);
|
|
30
29
|
/**
|
|
@@ -33,17 +32,10 @@ export declare class HttpTransportProvider extends BaseProvider {
|
|
|
33
32
|
protected onInitialize(): Promise<void>;
|
|
34
33
|
setConfig(cfg: unknown): void;
|
|
35
34
|
getConfig(): unknown;
|
|
36
|
-
/**
|
|
37
|
-
* 初始化Hook系统集成
|
|
38
|
-
*/
|
|
39
|
-
private initializeHookSystem;
|
|
40
|
-
/**
|
|
41
|
-
* 配置Hook调试(保持向后兼容)
|
|
42
|
-
*/
|
|
43
|
-
private configureHookDebugging;
|
|
44
35
|
protected getServiceProfile(): ServiceProfile;
|
|
45
36
|
protected createAuthProvider(): IAuthProvider;
|
|
46
37
|
protected createHttpClient(): void;
|
|
38
|
+
private createRequestExecutorDeps;
|
|
47
39
|
protected preprocessRequest(request: UnknownObject): Promise<UnknownObject>;
|
|
48
40
|
protected postprocessResponse(response: unknown, context: ProviderContext): Promise<UnknownObject>;
|
|
49
41
|
protected sendRequestInternal(request: UnknownObject): Promise<unknown>;
|
|
@@ -52,6 +44,11 @@ export declare class HttpTransportProvider extends BaseProvider {
|
|
|
52
44
|
protected prepareSseRequestBody(_body: UnknownObject, _context: ProviderContext): void;
|
|
53
45
|
protected wrapUpstreamSseResponse(stream: NodeJS.ReadableStream, _context: ProviderContext): Promise<UnknownObject>;
|
|
54
46
|
protected performHealthCheck(url: string): Promise<boolean>;
|
|
47
|
+
private getHttpRetryLimit;
|
|
48
|
+
private delayBeforeHttpRetry;
|
|
49
|
+
private shouldRetryHttpError;
|
|
50
|
+
private tryRecoverOAuthAndReplay;
|
|
51
|
+
private normalizeHttpError;
|
|
55
52
|
/**
|
|
56
53
|
* 为特定请求确定最终 endpoint(默认使用配置值,可由子类覆写)
|
|
57
54
|
*/
|
|
@@ -71,7 +68,6 @@ export declare class HttpTransportProvider extends BaseProvider {
|
|
|
71
68
|
protected getEffectiveEndpoint(): string;
|
|
72
69
|
private pickRuntimeBaseUrl;
|
|
73
70
|
private looksLikeAbsoluteUrl;
|
|
74
|
-
private getHookManager;
|
|
75
71
|
private getConfigExtensions;
|
|
76
72
|
private getEntryEndpointFromPayload;
|
|
77
73
|
private asResponseRecord;
|