@gajae-code/ai 0.1.1
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/CHANGELOG.md +2644 -0
- package/README.md +1181 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +66 -0
- package/dist/types/auth-broker/index.d.ts +5 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +96 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/types.d.ts +105 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +412 -0
- package/dist/types/auth-gateway/http.d.ts +39 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +17 -0
- package/dist/types/auth-gateway/types.d.ts +115 -0
- package/dist/types/auth-storage.d.ts +641 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/model-cache.d.ts +17 -0
- package/dist/types/model-manager.d.ts +62 -0
- package/dist/types/model-thinking.d.ts +71 -0
- package/dist/types/models.d.ts +12 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/provider-models/bundled-references.d.ts +4 -0
- package/dist/types/provider-models/descriptors.d.ts +48 -0
- package/dist/types/provider-models/google.d.ts +20 -0
- package/dist/types/provider-models/index.d.ts +5 -0
- package/dist/types/provider-models/ollama.d.ts +7 -0
- package/dist/types/provider-models/openai-compat.d.ts +237 -0
- package/dist/types/provider-models/special.d.ts +16 -0
- package/dist/types/providers/amazon-bedrock.d.ts +36 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic.d.ts +188 -0
- package/dist/types/providers/aws-credentials.d.ts +43 -0
- package/dist/types/providers/aws-eventstream.d.ts +38 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +15 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +13022 -0
- package/dist/types/providers/cursor.d.ts +42 -0
- package/dist/types/providers/error-message.d.ts +27 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +72 -0
- package/dist/types/providers/google-gemini-headers.d.ts +18 -0
- package/dist/types/providers/google-shared.d.ts +163 -0
- package/dist/types/providers/google-types.d.ts +138 -0
- package/dist/types/providers/google-vertex.d.ts +7 -0
- package/dist/types/providers/google.d.ts +4 -0
- package/dist/types/providers/grammar.d.ts +1 -0
- package/dist/types/providers/kimi.d.ts +27 -0
- package/dist/types/providers/mock.d.ts +175 -0
- package/dist/types/providers/ollama.d.ts +6 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +814 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-codex/constants.d.ts +26 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +49 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +17 -0
- package/dist/types/providers/openai-codex-responses.d.ts +67 -0
- package/dist/types/providers/openai-completions-compat.d.ts +25 -0
- package/dist/types/providers/openai-completions.d.ts +33 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-shared.d.ts +89 -0
- package/dist/types/providers/openai-responses.d.ts +32 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +68 -0
- package/dist/types/providers/register-builtins.d.ts +31 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +12 -0
- package/dist/types/providers/vision-guard.d.ts +8 -0
- package/dist/types/rate-limit-utils.d.ts +19 -0
- package/dist/types/stream.d.ts +24 -0
- package/dist/types/types.d.ts +746 -0
- package/dist/types/usage/claude.d.ts +3 -0
- package/dist/types/usage/gemini.d.ts +2 -0
- package/dist/types/usage/github-copilot.d.ts +7 -0
- package/dist/types/usage/google-antigravity.d.ts +2 -0
- package/dist/types/usage/kimi.d.ts +2 -0
- package/dist/types/usage/minimax-code.d.ts +2 -0
- package/dist/types/usage/openai-codex.d.ts +3 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/zai.d.ts +2 -0
- package/dist/types/usage.d.ts +258 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/anthropic-auth.d.ts +31 -0
- package/dist/types/utils/discovery/antigravity.d.ts +61 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +23 -0
- package/dist/types/utils/discovery/gemini.d.ts +25 -0
- package/dist/types/utils/discovery/index.d.ts +4 -0
- package/dist/types/utils/discovery/openai-compatible.d.ts +72 -0
- package/dist/types/utils/event-stream.d.ts +28 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/h2-fetch.d.ts +22 -0
- package/dist/types/utils/http-inspector.d.ts +31 -0
- package/dist/types/utils/idle-iterator.d.ts +67 -0
- package/dist/types/utils/json-parse.d.ts +10 -0
- package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +18 -0
- package/dist/types/utils/oauth/anthropic.d.ts +22 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +35 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +27 -0
- package/dist/types/utils/oauth/callback-server.d.ts +57 -0
- package/dist/types/utils/oauth/cerebras.d.ts +1 -0
- package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/cursor.d.ts +15 -0
- package/dist/types/utils/oauth/deepseek.d.ts +10 -0
- package/dist/types/utils/oauth/firepass.d.ts +1 -0
- package/dist/types/utils/oauth/fireworks.d.ts +1 -0
- package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
- package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
- package/dist/types/utils/oauth/huggingface.d.ts +19 -0
- package/dist/types/utils/oauth/index.d.ts +38 -0
- package/dist/types/utils/oauth/kagi.d.ts +17 -0
- package/dist/types/utils/oauth/kilo.d.ts +5 -0
- package/dist/types/utils/oauth/kimi.d.ts +21 -0
- package/dist/types/utils/oauth/litellm.d.ts +18 -0
- package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
- package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
- package/dist/types/utils/oauth/moonshot.d.ts +1 -0
- package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
- package/dist/types/utils/oauth/nvidia.d.ts +18 -0
- package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
- package/dist/types/utils/oauth/ollama.d.ts +18 -0
- package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
- package/dist/types/utils/oauth/opencode.d.ts +18 -0
- package/dist/types/utils/oauth/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +9 -0
- package/dist/types/utils/oauth/pkce.d.ts +8 -0
- package/dist/types/utils/oauth/qianfan.d.ts +17 -0
- package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
- package/dist/types/utils/oauth/synthetic.d.ts +1 -0
- package/dist/types/utils/oauth/tavily.d.ts +17 -0
- package/dist/types/utils/oauth/together.d.ts +1 -0
- package/dist/types/utils/oauth/types.d.ts +44 -0
- package/dist/types/utils/oauth/venice.d.ts +18 -0
- package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/vllm.d.ts +16 -0
- package/dist/types/utils/oauth/xiaomi.d.ts +19 -0
- package/dist/types/utils/oauth/zai.d.ts +18 -0
- package/dist/types/utils/oauth/zenmux.d.ts +1 -0
- package/dist/types/utils/overflow.d.ts +54 -0
- package/dist/types/utils/parse-bind.d.ts +23 -0
- package/dist/types/utils/provider-response.d.ts +3 -0
- package/dist/types/utils/retry-after.d.ts +3 -0
- package/dist/types/utils/retry.d.ts +26 -0
- package/dist/types/utils/schema/adapt.d.ts +24 -0
- package/dist/types/utils/schema/compatibility.d.ts +30 -0
- package/dist/types/utils/schema/dereference.d.ts +11 -0
- package/dist/types/utils/schema/draft.d.ts +10 -0
- package/dist/types/utils/schema/equality.d.ts +4 -0
- package/dist/types/utils/schema/fields.d.ts +49 -0
- package/dist/types/utils/schema/index.d.ts +13 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +93 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +25 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/wire.d.ts +54 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
- package/dist/types/utils/sse-debug.d.ts +10 -0
- package/dist/types/utils/tool-call-healing.d.ts +71 -0
- package/dist/types/utils/tool-choice.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +17 -0
- package/dist/types/utils.d.ts +28 -0
- package/package.json +146 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +358 -0
- package/src/auth-broker/index.ts +5 -0
- package/src/auth-broker/refresher.ts +127 -0
- package/src/auth-broker/remote-store.ts +623 -0
- package/src/auth-broker/server.ts +644 -0
- package/src/auth-broker/types.ts +127 -0
- package/src/auth-broker/wire-schemas.ts +200 -0
- package/src/auth-gateway/http.ts +194 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +717 -0
- package/src/auth-gateway/types.ts +134 -0
- package/src/auth-storage.ts +4104 -0
- package/src/cli.ts +262 -0
- package/src/index.ts +54 -0
- package/src/model-cache.ts +129 -0
- package/src/model-manager.ts +450 -0
- package/src/model-thinking.ts +691 -0
- package/src/models.json +73853 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +56 -0
- package/src/prompts/turn-aborted-guidance.md +4 -0
- package/src/provider-details.ts +90 -0
- package/src/provider-models/bundled-references.ts +38 -0
- package/src/provider-models/descriptors.ts +308 -0
- package/src/provider-models/google.ts +91 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +153 -0
- package/src/provider-models/openai-compat.ts +2275 -0
- package/src/provider-models/special.ts +67 -0
- package/src/providers/amazon-bedrock.ts +849 -0
- package/src/providers/anthropic-messages-server-schema.ts +229 -0
- package/src/providers/anthropic-messages-server.ts +677 -0
- package/src/providers/anthropic.ts +2696 -0
- package/src/providers/aws-credentials.ts +501 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +337 -0
- package/src/providers/cursor/gen/agent_pb.ts +15274 -0
- package/src/providers/cursor/proto/agent.proto +3526 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor.ts +2561 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.ts +372 -0
- package/src/providers/google-auth.ts +252 -0
- package/src/providers/google-gemini-cli.ts +795 -0
- package/src/providers/google-gemini-headers.ts +41 -0
- package/src/providers/google-shared.ts +902 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.ts +88 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/mock.ts +500 -0
- package/src/providers/ollama.ts +544 -0
- package/src/providers/openai-anthropic-shim.ts +138 -0
- package/src/providers/openai-chat-server-schema.ts +243 -0
- package/src/providers/openai-chat-server.ts +628 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.ts +161 -0
- package/src/providers/openai-codex/response-handler.ts +81 -0
- package/src/providers/openai-codex-responses.ts +2598 -0
- package/src/providers/openai-completions-compat.ts +279 -0
- package/src/providers/openai-completions.ts +1853 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1183 -0
- package/src/providers/openai-responses-shared.ts +800 -0
- package/src/providers/openai-responses.ts +621 -0
- package/src/providers/pi-native-client.ts +228 -0
- package/src/providers/pi-native-server.ts +210 -0
- package/src/providers/register-builtins.ts +412 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +309 -0
- package/src/providers/vision-guard.ts +31 -0
- package/src/rate-limit-utils.ts +84 -0
- package/src/stream.ts +895 -0
- package/src/types.ts +884 -0
- package/src/usage/claude.ts +431 -0
- package/src/usage/gemini.ts +250 -0
- package/src/usage/github-copilot.ts +421 -0
- package/src/usage/google-antigravity.ts +201 -0
- package/src/usage/kimi.ts +271 -0
- package/src/usage/minimax-code.ts +31 -0
- package/src/usage/openai-codex.ts +503 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +247 -0
- package/src/usage.ts +183 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/anthropic-auth.ts +87 -0
- package/src/utils/discovery/antigravity.ts +261 -0
- package/src/utils/discovery/codex.ts +371 -0
- package/src/utils/discovery/cursor.ts +306 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +224 -0
- package/src/utils/event-stream.ts +142 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/h2-fetch.ts +60 -0
- package/src/utils/http-inspector.ts +176 -0
- package/src/utils/idle-iterator.ts +250 -0
- package/src/utils/json-parse.ts +148 -0
- package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
- package/src/utils/oauth/anthropic.ts +200 -0
- package/src/utils/oauth/api-key-login.ts +87 -0
- package/src/utils/oauth/api-key-validation.ts +92 -0
- package/src/utils/oauth/callback-server.ts +276 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/cursor.ts +157 -0
- package/src/utils/oauth/deepseek.ts +53 -0
- package/src/utils/oauth/firepass.ts +24 -0
- package/src/utils/oauth/fireworks.ts +15 -0
- package/src/utils/oauth/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -0
- package/src/utils/oauth/google-antigravity.ts +200 -0
- package/src/utils/oauth/google-gemini-cli.ts +256 -0
- package/src/utils/oauth/google-oauth-shared.ts +110 -0
- package/src/utils/oauth/huggingface.ts +62 -0
- package/src/utils/oauth/index.ts +444 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.ts +254 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -0
- package/src/utils/oauth/minimax-code.ts +78 -0
- package/src/utils/oauth/moonshot.ts +16 -0
- package/src/utils/oauth/nanogpt.ts +15 -0
- package/src/utils/oauth/nvidia.ts +70 -0
- package/src/utils/oauth/oauth.html +199 -0
- package/src/utils/oauth/ollama-cloud.ts +28 -0
- package/src/utils/oauth/ollama.ts +47 -0
- package/src/utils/oauth/openai-codex.ts +299 -0
- package/src/utils/oauth/opencode.ts +49 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +206 -0
- package/src/utils/oauth/pkce.ts +18 -0
- package/src/utils/oauth/qianfan.ts +58 -0
- package/src/utils/oauth/qwen-portal.ts +60 -0
- package/src/utils/oauth/synthetic.ts +16 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +16 -0
- package/src/utils/oauth/types.ts +94 -0
- package/src/utils/oauth/venice.ts +59 -0
- package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
- package/src/utils/oauth/vllm.ts +40 -0
- package/src/utils/oauth/xiaomi.ts +137 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/overflow.ts +137 -0
- package/src/utils/parse-bind.ts +54 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +54 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.ts +190 -0
- package/src/utils/schema/index.ts +13 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.ts +11 -0
- package/src/utils/schema/wire.ts +213 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/tool-call-healing.ts +271 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1019 -0
- package/src/utils.ts +166 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock provider for tests.
|
|
3
|
+
*
|
|
4
|
+
* Implements `Model<"mock">` + `streamMock` so test code can drive
|
|
5
|
+
* pi-agent-core / streamSimple-shaped consumers without an HTTP client.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
*
|
|
9
|
+
* import { createMockModel, registerMockApi } from "@gajae-code/ai/providers/mock";
|
|
10
|
+
*
|
|
11
|
+
* // 1. Array of responses, one per call.
|
|
12
|
+
* const mock = createMockModel({
|
|
13
|
+
* responses: [
|
|
14
|
+
* { content: [{ type: "toolCall", name: "read", arguments: { path: "/x" } }] },
|
|
15
|
+
* { content: ["done"] },
|
|
16
|
+
* ],
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // 2. Async generator — full state-machine power, can await between turns.
|
|
20
|
+
* const mock = createMockModel({
|
|
21
|
+
* responses: (async function* () {
|
|
22
|
+
* yield { content: [{ type: "toolCall", name: "fetch", arguments: { url } }] };
|
|
23
|
+
* // wait for external coordination
|
|
24
|
+
* await externalReady;
|
|
25
|
+
* yield { content: ["got it"] };
|
|
26
|
+
* })(),
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // 3. Per-call handler (closure with access to the call).
|
|
30
|
+
* const mock = createMockModel({
|
|
31
|
+
* handler: (context) => ({ content: [`turn ${context.messages.length}`] }),
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // 4. Use as a streamFn for agentLoop:
|
|
35
|
+
* await agentLoop(prompts, context, config, undefined, mock.stream).result();
|
|
36
|
+
*
|
|
37
|
+
* // 5. Or register globally and use stream():
|
|
38
|
+
* registerMockApi();
|
|
39
|
+
* stream(mock.model, context, options);
|
|
40
|
+
*
|
|
41
|
+
* // Inspect calls afterwards.
|
|
42
|
+
* expect(mock.calls).toHaveLength(2);
|
|
43
|
+
*/
|
|
44
|
+
import type { Api, Context, Model, SimpleStreamOptions, StopReason, Usage } from "../types";
|
|
45
|
+
import { AssistantMessageEventStream } from "../utils/event-stream";
|
|
46
|
+
/** The API string this provider serves. */
|
|
47
|
+
export declare const MOCK_API: "mock";
|
|
48
|
+
export type MockApi = typeof MOCK_API;
|
|
49
|
+
/** Shorthand for a single content block. Strings become text blocks. */
|
|
50
|
+
export type MockContent = string | {
|
|
51
|
+
type: "text";
|
|
52
|
+
text: string;
|
|
53
|
+
} | {
|
|
54
|
+
type: "thinking";
|
|
55
|
+
thinking: string;
|
|
56
|
+
} | {
|
|
57
|
+
type: "toolCall";
|
|
58
|
+
/** Optional explicit id; auto-generated when omitted. */
|
|
59
|
+
id?: string;
|
|
60
|
+
name: string;
|
|
61
|
+
/** Object form is preferred; strings are passed through verbatim. */
|
|
62
|
+
arguments: Record<string, unknown> | string;
|
|
63
|
+
};
|
|
64
|
+
/** One scripted response. */
|
|
65
|
+
export interface MockResponse {
|
|
66
|
+
/** Content blocks to emit, in order. Strings become text blocks. */
|
|
67
|
+
content?: ReadonlyArray<MockContent>;
|
|
68
|
+
/** Stop reason. Defaults to `"toolUse"` when content has tool calls, else `"stop"`. */
|
|
69
|
+
stopReason?: StopReason;
|
|
70
|
+
/** Usage stats. Missing fields default to 0; missing `cost.total` is recomputed from components. */
|
|
71
|
+
usage?: Partial<Omit<Usage, "cost">> & {
|
|
72
|
+
cost?: Partial<Usage["cost"]>;
|
|
73
|
+
};
|
|
74
|
+
/** Pre-set responseId. */
|
|
75
|
+
responseId?: string;
|
|
76
|
+
/** If set, the stream emits a terminal error event instead of completing. */
|
|
77
|
+
throw?: string | Error;
|
|
78
|
+
/** Delay before any event is emitted. Honors the call's AbortSignal. */
|
|
79
|
+
delayMs?: number;
|
|
80
|
+
/**
|
|
81
|
+
* If set, the mock synthesizes a {@link ProviderResponseMetadata} and fires
|
|
82
|
+
* `options.onResponse` once before streaming events. Headers are forwarded
|
|
83
|
+
* verbatim (keys lowercased to match real provider plumbing).
|
|
84
|
+
*/
|
|
85
|
+
responseHeaders?: Readonly<Record<string, string>>;
|
|
86
|
+
/** HTTP status code paired with {@link responseHeaders}. Defaults to 200. */
|
|
87
|
+
responseStatus?: number;
|
|
88
|
+
/** Pre-set requestId surfaced via {@link ProviderResponseMetadata.requestId}. */
|
|
89
|
+
responseRequestId?: string;
|
|
90
|
+
}
|
|
91
|
+
/** Handler resolved per call: static script or function. */
|
|
92
|
+
export type MockHandler = MockResponse | ((context: Context, options?: SimpleStreamOptions) => MockResponse | Promise<MockResponse>);
|
|
93
|
+
/**
|
|
94
|
+
* A source of handlers, one per call.
|
|
95
|
+
*
|
|
96
|
+
* - Arrays / iterables consume one entry per call (most ergonomic for scripts).
|
|
97
|
+
* - Async iterables (e.g. `async function*()`) let the test pause between calls,
|
|
98
|
+
* coordinate with external events, or build state machines.
|
|
99
|
+
*
|
|
100
|
+
* The first call pulls the first entry, the second call pulls the second, and
|
|
101
|
+
* so on. When the source is exhausted, `MockModelOptions.handler` is used; if
|
|
102
|
+
* neither is set, the call rejects.
|
|
103
|
+
*/
|
|
104
|
+
export type MockResponseSource = Iterable<MockHandler> | AsyncIterable<MockHandler>;
|
|
105
|
+
/** Recorded call for inspection. */
|
|
106
|
+
export interface MockCall {
|
|
107
|
+
readonly context: Context;
|
|
108
|
+
readonly options?: SimpleStreamOptions;
|
|
109
|
+
}
|
|
110
|
+
/** Construction options. */
|
|
111
|
+
export interface MockModelOptions {
|
|
112
|
+
/** Model id. Defaults to `"mock-model"`. */
|
|
113
|
+
id?: string;
|
|
114
|
+
/** Provider string used in the returned AssistantMessage. Defaults to `"mock"`. */
|
|
115
|
+
provider?: string;
|
|
116
|
+
/** A sequence of responses, one per call. Accepts arrays, generators, or any iterable. */
|
|
117
|
+
responses?: MockResponseSource;
|
|
118
|
+
/** Fallback handler used when `responses` is exhausted. */
|
|
119
|
+
handler?: MockHandler;
|
|
120
|
+
/** Cost per million tokens. Defaults to zeros. */
|
|
121
|
+
cost?: Model["cost"];
|
|
122
|
+
/** Context window. Defaults to 200_000. */
|
|
123
|
+
contextWindow?: number;
|
|
124
|
+
/** Max output tokens. Defaults to 32_768. */
|
|
125
|
+
maxTokens?: number;
|
|
126
|
+
/** Whether the model claims to support reasoning. Defaults to false. */
|
|
127
|
+
reasoning?: boolean;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A `Model<"mock">` that carries its own scripted state. Pass instances to
|
|
131
|
+
* `stream()` or agent configs, and use the same instance to inspect calls
|
|
132
|
+
* and feed additional handlers.
|
|
133
|
+
*/
|
|
134
|
+
export declare class MockModel implements Model<MockApi> {
|
|
135
|
+
readonly id: string;
|
|
136
|
+
readonly name: string;
|
|
137
|
+
readonly api: MockApi;
|
|
138
|
+
readonly provider: string;
|
|
139
|
+
readonly baseUrl = "mock://";
|
|
140
|
+
readonly reasoning: boolean;
|
|
141
|
+
readonly input: ("text" | "image")[];
|
|
142
|
+
readonly cost: Model["cost"];
|
|
143
|
+
readonly contextWindow: number;
|
|
144
|
+
readonly maxTokens: number;
|
|
145
|
+
/** Recorded calls in invocation order. */
|
|
146
|
+
readonly calls: MockCall[];
|
|
147
|
+
iterator?: Iterator<MockHandler> | AsyncIterator<MockHandler>;
|
|
148
|
+
exhausted: boolean;
|
|
149
|
+
readonly extras: MockHandler[];
|
|
150
|
+
fallback?: MockHandler;
|
|
151
|
+
toolCallCounter: number;
|
|
152
|
+
constructor(options?: MockModelOptions);
|
|
153
|
+
/** Back-compat alias: the model is its own handle. */
|
|
154
|
+
get model(): this;
|
|
155
|
+
/** A streamFn-compatible callable. Forward to `agentLoop` or pi `stream()`. */
|
|
156
|
+
stream: (_model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
|
|
157
|
+
/**
|
|
158
|
+
* Append a handler to the internal queue consumed AFTER the constructor
|
|
159
|
+
* `responses` source is exhausted (but before the fallback). Use this for
|
|
160
|
+
* interactive tests that decide responses after the model is created.
|
|
161
|
+
*/
|
|
162
|
+
push(response: MockHandler): void;
|
|
163
|
+
/** Reset recorded calls AND the extras queue. The constructor `responses` are NOT reset. */
|
|
164
|
+
reset(): void;
|
|
165
|
+
}
|
|
166
|
+
/** @deprecated Use {@link MockModel}; the class IS the handle. */
|
|
167
|
+
export type MockModelHandle = MockModel;
|
|
168
|
+
/** Check whether `model` was produced by `createMockModel`. */
|
|
169
|
+
export declare function isMockModel(model: Model<Api>): model is MockModel;
|
|
170
|
+
/** Construct a mock model. */
|
|
171
|
+
export declare function createMockModel(options?: MockModelOptions): MockModel;
|
|
172
|
+
/** Stream function for `Model<"mock">`. Matches the pi-ai per-provider stream signature. */
|
|
173
|
+
export declare function streamMock(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
|
|
174
|
+
/** Convenience: register the mock provider with the global custom API registry. */
|
|
175
|
+
export declare function registerMockApi(sourceId?: string): void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { StreamFunction, StreamOptions, ToolChoice } from "../types";
|
|
2
|
+
export interface OllamaChatOptions extends StreamOptions {
|
|
3
|
+
reasoning?: "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
4
|
+
toolChoice?: ToolChoice;
|
|
5
|
+
}
|
|
6
|
+
export declare const streamOllama: StreamFunction<"ollama-chat">;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared implementation for providers that expose BOTH an OpenAI-compatible
|
|
3
|
+
* and an Anthropic-compatible API surface against the same model catalog
|
|
4
|
+
* (currently Kimi Code and Synthetic).
|
|
5
|
+
*
|
|
6
|
+
* Each call site supplies the provider-specific bits (base URLs, default
|
|
7
|
+
* format, optional extra headers); the streaming/forwarding plumbing lives
|
|
8
|
+
* here once.
|
|
9
|
+
*/
|
|
10
|
+
import type { Context, Model, SimpleStreamOptions } from "../types";
|
|
11
|
+
import { AssistantMessageEventStream } from "../utils/event-stream";
|
|
12
|
+
export type OpenAIAnthropicApiFormat = "openai" | "anthropic";
|
|
13
|
+
export interface OpenAIAnthropicShimOptions extends SimpleStreamOptions {
|
|
14
|
+
/** API format: "openai" or "anthropic". */
|
|
15
|
+
format?: OpenAIAnthropicApiFormat;
|
|
16
|
+
}
|
|
17
|
+
export interface OpenAIAnthropicShimConfig {
|
|
18
|
+
/** Base URL for the Anthropic-compatible endpoint (without trailing /v1/messages). */
|
|
19
|
+
anthropicBaseUrl: string;
|
|
20
|
+
/** Optional override for the OpenAI-compatible base URL. If omitted, `model.baseUrl` is used as-is. */
|
|
21
|
+
openaiBaseUrl?: string;
|
|
22
|
+
/** Default API format when caller does not specify one. */
|
|
23
|
+
defaultFormat: OpenAIAnthropicApiFormat;
|
|
24
|
+
/** Provider-specific headers (e.g. auth/session) merged ahead of user-supplied headers. */
|
|
25
|
+
extraHeaders?: () => Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stream from an OpenAI-or-Anthropic compatible provider. Returns synchronously;
|
|
29
|
+
* async header fetching and stream piping happen internally.
|
|
30
|
+
*/
|
|
31
|
+
export declare function streamOpenAIAnthropicShim(model: Model<"openai-completions">, context: Context, options: OpenAIAnthropicShimOptions | undefined, config: OpenAIAnthropicShimConfig): AssistantMessageEventStream;
|