@bastani/pi-ai 0.9.19 → 0.9.20-alpha.10
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 +83 -1
- package/NOTICE.md +1 -1
- package/README.md +203 -30
- package/dist/api/anthropic-messages.d.ts.map +1 -1
- package/dist/api/anthropic-messages.js +255 -97
- package/dist/api/anthropic-messages.js.map +1 -1
- package/dist/api/azure-openai-responses.d.ts.map +1 -1
- package/dist/api/azure-openai-responses.js +21 -6
- package/dist/api/azure-openai-responses.js.map +1 -1
- package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
- package/dist/api/bedrock-converse-stream.js +20 -15
- package/dist/api/bedrock-converse-stream.js.map +1 -1
- package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
- package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.js +43 -0
- package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
- package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
- package/dist/api/cloudflare.d.ts +2 -0
- package/dist/api/cloudflare.d.ts.map +1 -1
- package/dist/api/cloudflare.js +2 -0
- package/dist/api/cloudflare.js.map +1 -1
- package/dist/api/constrained-sampling.d.ts +8 -3
- package/dist/api/constrained-sampling.d.ts.map +1 -1
- package/dist/api/constrained-sampling.js +29 -11
- package/dist/api/constrained-sampling.js.map +1 -1
- package/dist/api/google-generative-ai.d.ts.map +1 -1
- package/dist/api/google-generative-ai.js +23 -80
- package/dist/api/google-generative-ai.js.map +1 -1
- package/dist/api/google-shared.d.ts +13 -4
- package/dist/api/google-shared.d.ts.map +1 -1
- package/dist/api/google-shared.js +54 -4
- package/dist/api/google-shared.js.map +1 -1
- package/dist/api/google-vertex.d.ts.map +1 -1
- package/dist/api/google-vertex.js +26 -65
- package/dist/api/google-vertex.js.map +1 -1
- package/dist/api/mistral-conversations.d.ts.map +1 -1
- package/dist/api/mistral-conversations.js +18 -13
- package/dist/api/mistral-conversations.js.map +1 -1
- package/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/dist/api/openai-codex-responses.js +40 -26
- package/dist/api/openai-codex-responses.js.map +1 -1
- package/dist/api/openai-completions.d.ts +6 -4
- package/dist/api/openai-completions.d.ts.map +1 -1
- package/dist/api/openai-completions.js +44 -58
- package/dist/api/openai-completions.js.map +1 -1
- package/dist/api/openai-responses-shared.d.ts +11 -5
- package/dist/api/openai-responses-shared.d.ts.map +1 -1
- package/dist/api/openai-responses-shared.js +65 -58
- package/dist/api/openai-responses-shared.js.map +1 -1
- package/dist/api/openai-responses.d.ts.map +1 -1
- package/dist/api/openai-responses.js +15 -19
- package/dist/api/openai-responses.js.map +1 -1
- package/dist/api/openrouter-images.d.ts +2 -1
- package/dist/api/openrouter-images.d.ts.map +1 -1
- package/dist/api/openrouter-images.js +1 -0
- package/dist/api/openrouter-images.js.map +1 -1
- package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
- package/dist/api/openrouter-images.lazy.js.map +1 -1
- package/dist/api/pi-messages.d.ts +3 -3
- package/dist/api/pi-messages.d.ts.map +1 -1
- package/dist/api/pi-messages.js +3 -2
- package/dist/api/pi-messages.js.map +1 -1
- package/dist/api/simple-options.d.ts +3 -3
- package/dist/api/simple-options.d.ts.map +1 -1
- package/dist/api/simple-options.js +1 -0
- package/dist/api/simple-options.js.map +1 -1
- package/dist/api/system-one-shared.d.ts +23 -0
- package/dist/api/system-one-shared.d.ts.map +1 -0
- package/dist/api/system-one-shared.js +170 -0
- package/dist/api/system-one-shared.js.map +1 -0
- package/dist/api/transform-messages.d.ts.map +1 -1
- package/dist/api/transform-messages.js +21 -7
- package/dist/api/transform-messages.js.map +1 -1
- package/dist/api/typesafe-system-one.d.ts +4 -0
- package/dist/api/typesafe-system-one.d.ts.map +1 -0
- package/dist/api/typesafe-system-one.js +19 -0
- package/dist/api/typesafe-system-one.js.map +1 -0
- package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
- package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
- package/dist/api/typesafe-system-one.lazy.js +4 -0
- package/dist/api/typesafe-system-one.lazy.js.map +1 -0
- package/dist/auth/credential-store.d.ts.map +1 -1
- package/dist/auth/credential-store.js +3 -2
- package/dist/auth/credential-store.js.map +1 -1
- package/dist/auth/oauth/load.d.ts +2 -0
- package/dist/auth/oauth/load.d.ts.map +1 -1
- package/dist/auth/oauth/load.js +5 -0
- package/dist/auth/oauth/load.js.map +1 -1
- package/dist/auth/oauth/meta.d.ts +17 -0
- package/dist/auth/oauth/meta.d.ts.map +1 -0
- package/dist/auth/oauth/meta.js +190 -0
- package/dist/auth/oauth/meta.js.map +1 -0
- package/dist/auth/resolve.d.ts +6 -8
- package/dist/auth/resolve.d.ts.map +1 -1
- package/dist/auth/resolve.js +29 -26
- package/dist/auth/resolve.js.map +1 -1
- package/dist/bun-oauth.d.ts.map +1 -1
- package/dist/bun-oauth.js +2 -0
- package/dist/bun-oauth.js.map +1 -1
- package/dist/compat.d.ts +3 -3
- package/dist/compat.d.ts.map +1 -1
- package/dist/compat.js +9 -6
- package/dist/compat.js.map +1 -1
- package/dist/decision-models.d.ts +21 -0
- package/dist/decision-models.d.ts.map +1 -0
- package/dist/decision-models.generated.d.ts +3 -0
- package/dist/decision-models.generated.d.ts.map +1 -0
- package/dist/decision-models.generated.js +47 -0
- package/dist/decision-models.generated.js.map +1 -0
- package/dist/decision-models.js +8 -0
- package/dist/decision-models.js.map +1 -0
- package/dist/env-api-keys.d.ts +2 -0
- package/dist/env-api-keys.d.ts.map +1 -1
- package/dist/env-api-keys.js +61 -43
- package/dist/env-api-keys.js.map +1 -1
- package/dist/image-models.d.ts +19 -8
- package/dist/image-models.d.ts.map +1 -1
- package/dist/image-models.js +14 -13
- package/dist/image-models.js.map +1 -1
- package/dist/images-api-registry.d.ts +7 -7
- package/dist/images-api-registry.d.ts.map +1 -1
- package/dist/images-api-registry.js.map +1 -1
- package/dist/images.d.ts +7 -2
- package/dist/images.d.ts.map +1 -1
- package/dist/images.js +5 -0
- package/dist/images.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/model-catalog.d.ts +25 -9
- package/dist/model-catalog.d.ts.map +1 -1
- package/dist/model-catalog.js +14 -2
- package/dist/model-catalog.js.map +1 -1
- package/dist/models-store.d.ts +3 -2
- package/dist/models-store.d.ts.map +1 -1
- package/dist/models-store.js.map +1 -1
- package/dist/models.d.ts +99 -31
- package/dist/models.d.ts.map +1 -1
- package/dist/models.generated.d.ts +133 -39
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +133 -39
- package/dist/models.generated.js.map +1 -1
- package/dist/models.js +161 -31
- package/dist/models.js.map +1 -1
- package/dist/providers/all.d.ts +19 -13
- package/dist/providers/all.d.ts.map +1 -1
- package/dist/providers/all.js +27 -21
- package/dist/providers/all.js.map +1 -1
- package/dist/providers/amazon-bedrock.models.d.ts +4 -3
- package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.models.js +4 -2
- package/dist/providers/amazon-bedrock.models.js.map +1 -1
- package/dist/providers/ant-ling.models.d.ts +4 -3
- package/dist/providers/ant-ling.models.d.ts.map +1 -1
- package/dist/providers/ant-ling.models.js +4 -2
- package/dist/providers/ant-ling.models.js.map +1 -1
- package/dist/providers/anthropic.models.d.ts +4 -3
- package/dist/providers/anthropic.models.d.ts.map +1 -1
- package/dist/providers/anthropic.models.js +4 -2
- package/dist/providers/anthropic.models.js.map +1 -1
- package/dist/providers/azure-openai-responses.models.d.ts +4 -3
- package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
- package/dist/providers/azure-openai-responses.models.js +4 -2
- package/dist/providers/azure-openai-responses.models.js.map +1 -1
- package/dist/providers/baseten.models.d.ts +4 -3
- package/dist/providers/baseten.models.d.ts.map +1 -1
- package/dist/providers/baseten.models.js +4 -2
- package/dist/providers/baseten.models.js.map +1 -1
- package/dist/providers/cerebras.models.d.ts +4 -3
- package/dist/providers/cerebras.models.d.ts.map +1 -1
- package/dist/providers/cerebras.models.js +4 -2
- package/dist/providers/cerebras.models.js.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -3
- package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
- package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
- package/dist/providers/cloudflare-stream.d.ts +6 -2
- package/dist/providers/cloudflare-stream.d.ts.map +1 -1
- package/dist/providers/cloudflare-stream.js +6 -0
- package/dist/providers/cloudflare-stream.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.js +10 -3
- package/dist/providers/cloudflare-workers-ai.js.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -3
- package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
- package/dist/providers/cloudflare-workers-ai.models.js +4 -2
- package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
- package/dist/providers/data/.manifest.json +1 -1
- package/dist/providers/data/amazon-bedrock.json +1 -1
- package/dist/providers/data/ant-ling.json +1 -1
- package/dist/providers/data/anthropic.json +1 -1
- package/dist/providers/data/azure-openai-responses.json +1 -1
- package/dist/providers/data/baseten.json +1 -1
- package/dist/providers/data/cerebras.json +1 -1
- package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/dist/providers/data/cloudflare-workers-ai.json +1 -1
- package/dist/providers/data/deepseek.json +1 -1
- package/dist/providers/data/fireworks.json +1 -1
- package/dist/providers/data/github-copilot.json +1 -1
- package/dist/providers/data/google-vertex.json +1 -1
- package/dist/providers/data/google.json +1 -1
- package/dist/providers/data/groq.json +1 -1
- package/dist/providers/data/huggingface.json +1 -1
- package/dist/providers/data/kimi-coding.json +1 -1
- package/dist/providers/data/meta.json +1 -0
- package/dist/providers/data/minimax-cn.json +1 -1
- package/dist/providers/data/minimax.json +1 -1
- package/dist/providers/data/mistral.json +1 -1
- package/dist/providers/data/moonshotai-cn.json +1 -1
- package/dist/providers/data/moonshotai.json +1 -1
- package/dist/providers/data/nvidia.json +1 -1
- package/dist/providers/data/openai-codex.json +1 -1
- package/dist/providers/data/openai.json +1 -1
- package/dist/providers/data/opencode-go.json +1 -1
- package/dist/providers/data/opencode.json +1 -1
- package/dist/providers/data/openrouter.json +1 -1
- package/dist/providers/data/qwen-token-plan-cn.json +1 -1
- package/dist/providers/data/qwen-token-plan-individual.json +1 -1
- package/dist/providers/data/qwen-token-plan.json +1 -1
- package/dist/providers/data/radius.json +1 -0
- package/dist/providers/data/together.json +1 -1
- package/dist/providers/data/typesafe.json +1 -0
- package/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/dist/providers/data/xai.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
- package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
- package/dist/providers/data/xiaomi.json +1 -1
- package/dist/providers/data/zai-coding-cn.json +1 -1
- package/dist/providers/data/zai.json +1 -1
- package/dist/providers/deepseek.models.d.ts +4 -3
- package/dist/providers/deepseek.models.d.ts.map +1 -1
- package/dist/providers/deepseek.models.js +4 -2
- package/dist/providers/deepseek.models.js.map +1 -1
- package/dist/providers/faux.d.ts +3 -2
- package/dist/providers/faux.d.ts.map +1 -1
- package/dist/providers/faux.js +12 -11
- package/dist/providers/faux.js.map +1 -1
- package/dist/providers/fireworks.models.d.ts +4 -3
- package/dist/providers/fireworks.models.d.ts.map +1 -1
- package/dist/providers/fireworks.models.js +4 -2
- package/dist/providers/fireworks.models.js.map +1 -1
- package/dist/providers/github-copilot.models.d.ts +4 -3
- package/dist/providers/github-copilot.models.d.ts.map +1 -1
- package/dist/providers/github-copilot.models.js +4 -2
- package/dist/providers/github-copilot.models.js.map +1 -1
- package/dist/providers/google-vertex.models.d.ts +4 -3
- package/dist/providers/google-vertex.models.d.ts.map +1 -1
- package/dist/providers/google-vertex.models.js +4 -2
- package/dist/providers/google-vertex.models.js.map +1 -1
- package/dist/providers/google.models.d.ts +4 -3
- package/dist/providers/google.models.d.ts.map +1 -1
- package/dist/providers/google.models.js +4 -2
- package/dist/providers/google.models.js.map +1 -1
- package/dist/providers/groq.models.d.ts +4 -3
- package/dist/providers/groq.models.d.ts.map +1 -1
- package/dist/providers/groq.models.js +4 -2
- package/dist/providers/groq.models.js.map +1 -1
- package/dist/providers/huggingface.models.d.ts +4 -3
- package/dist/providers/huggingface.models.d.ts.map +1 -1
- package/dist/providers/huggingface.models.js +4 -2
- package/dist/providers/huggingface.models.js.map +1 -1
- package/dist/providers/images/register-builtins.d.ts +1 -1
- package/dist/providers/images/register-builtins.d.ts.map +1 -1
- package/dist/providers/images/register-builtins.js.map +1 -1
- package/dist/providers/kimi-coding.models.d.ts +4 -3
- package/dist/providers/kimi-coding.models.d.ts.map +1 -1
- package/dist/providers/kimi-coding.models.js +4 -2
- package/dist/providers/kimi-coding.models.js.map +1 -1
- package/dist/providers/meta.d.ts +3 -0
- package/dist/providers/meta.d.ts.map +1 -0
- package/dist/providers/meta.js +24 -0
- package/dist/providers/meta.js.map +1 -0
- package/dist/providers/meta.models.d.ts +5 -0
- package/dist/providers/meta.models.d.ts.map +1 -0
- package/dist/providers/meta.models.js +8 -0
- package/dist/providers/meta.models.js.map +1 -0
- package/dist/providers/minimax-cn.models.d.ts +4 -3
- package/dist/providers/minimax-cn.models.d.ts.map +1 -1
- package/dist/providers/minimax-cn.models.js +4 -2
- package/dist/providers/minimax-cn.models.js.map +1 -1
- package/dist/providers/minimax.models.d.ts +4 -3
- package/dist/providers/minimax.models.d.ts.map +1 -1
- package/dist/providers/minimax.models.js +4 -2
- package/dist/providers/minimax.models.js.map +1 -1
- package/dist/providers/mistral.models.d.ts +4 -3
- package/dist/providers/mistral.models.d.ts.map +1 -1
- package/dist/providers/mistral.models.js +4 -2
- package/dist/providers/mistral.models.js.map +1 -1
- package/dist/providers/moonshotai-cn.models.d.ts +4 -3
- package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
- package/dist/providers/moonshotai-cn.models.js +4 -2
- package/dist/providers/moonshotai-cn.models.js.map +1 -1
- package/dist/providers/moonshotai.models.d.ts +4 -3
- package/dist/providers/moonshotai.models.d.ts.map +1 -1
- package/dist/providers/moonshotai.models.js +4 -2
- package/dist/providers/moonshotai.models.js.map +1 -1
- package/dist/providers/nvidia.models.d.ts +4 -3
- package/dist/providers/nvidia.models.d.ts.map +1 -1
- package/dist/providers/nvidia.models.js +4 -2
- package/dist/providers/nvidia.models.js.map +1 -1
- package/dist/providers/openai-codex.models.d.ts +4 -3
- package/dist/providers/openai-codex.models.d.ts.map +1 -1
- package/dist/providers/openai-codex.models.js +4 -2
- package/dist/providers/openai-codex.models.js.map +1 -1
- package/dist/providers/openai.models.d.ts +4 -3
- package/dist/providers/openai.models.d.ts.map +1 -1
- package/dist/providers/openai.models.js +4 -2
- package/dist/providers/openai.models.js.map +1 -1
- package/dist/providers/opencode-go.models.d.ts +4 -3
- package/dist/providers/opencode-go.models.d.ts.map +1 -1
- package/dist/providers/opencode-go.models.js +4 -2
- package/dist/providers/opencode-go.models.js.map +1 -1
- package/dist/providers/opencode.models.d.ts +4 -3
- package/dist/providers/opencode.models.d.ts.map +1 -1
- package/dist/providers/opencode.models.js +4 -2
- package/dist/providers/opencode.models.js.map +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +11 -2
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/openrouter.models.d.ts +4 -3
- package/dist/providers/openrouter.models.d.ts.map +1 -1
- package/dist/providers/openrouter.models.js +4 -2
- package/dist/providers/openrouter.models.js.map +1 -1
- package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -3
- package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-cn.models.js +4 -2
- package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
- package/dist/providers/qwen-token-plan-individual.models.d.ts +4 -3
- package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan-individual.models.js +4 -2
- package/dist/providers/qwen-token-plan-individual.models.js.map +1 -1
- package/dist/providers/qwen-token-plan.models.d.ts +4 -3
- package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
- package/dist/providers/qwen-token-plan.models.js +4 -2
- package/dist/providers/qwen-token-plan.models.js.map +1 -1
- package/dist/providers/radius.d.ts.map +1 -1
- package/dist/providers/radius.js +19 -5
- package/dist/providers/radius.js.map +1 -1
- package/dist/providers/radius.models.d.ts +5 -0
- package/dist/providers/radius.models.d.ts.map +1 -0
- package/dist/providers/radius.models.js +8 -0
- package/dist/providers/radius.models.js.map +1 -0
- package/dist/providers/together.models.d.ts +4 -3
- package/dist/providers/together.models.d.ts.map +1 -1
- package/dist/providers/together.models.js +4 -2
- package/dist/providers/together.models.js.map +1 -1
- package/dist/providers/typesafe.d.ts +3 -0
- package/dist/providers/typesafe.d.ts.map +1 -0
- package/dist/providers/typesafe.js +18 -0
- package/dist/providers/typesafe.js.map +1 -0
- package/dist/providers/typesafe.models.d.ts +5 -0
- package/dist/providers/typesafe.models.d.ts.map +1 -0
- package/dist/providers/typesafe.models.js +8 -0
- package/dist/providers/typesafe.models.js.map +1 -0
- package/dist/providers/vercel-ai-gateway.models.d.ts +4 -3
- package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
- package/dist/providers/vercel-ai-gateway.models.js +4 -2
- package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
- package/dist/providers/xai.models.d.ts +4 -3
- package/dist/providers/xai.models.d.ts.map +1 -1
- package/dist/providers/xai.models.js +4 -2
- package/dist/providers/xai.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -3
- package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -3
- package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -3
- package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
- package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
- package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
- package/dist/providers/xiaomi.models.d.ts +4 -3
- package/dist/providers/xiaomi.models.d.ts.map +1 -1
- package/dist/providers/xiaomi.models.js +4 -2
- package/dist/providers/xiaomi.models.js.map +1 -1
- package/dist/providers/zai-coding-cn.models.d.ts +4 -3
- package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
- package/dist/providers/zai-coding-cn.models.js +4 -2
- package/dist/providers/zai-coding-cn.models.js.map +1 -1
- package/dist/providers/zai.models.d.ts +4 -3
- package/dist/providers/zai.models.d.ts.map +1 -1
- package/dist/providers/zai.models.js +4 -2
- package/dist/providers/zai.models.js.map +1 -1
- package/dist/types.d.ts +227 -51
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/diagnostics.d.ts +3 -2
- package/dist/utils/diagnostics.d.ts.map +1 -1
- package/dist/utils/diagnostics.js.map +1 -1
- package/dist/utils/estimate.d.ts +2 -2
- package/dist/utils/estimate.d.ts.map +1 -1
- package/dist/utils/estimate.js +8 -29
- package/dist/utils/estimate.js.map +1 -1
- package/dist/utils/headers.d.ts +1 -1
- package/dist/utils/headers.d.ts.map +1 -1
- package/dist/utils/headers.js +10 -8
- package/dist/utils/headers.js.map +1 -1
- package/dist/utils/model-operations.d.ts +11 -0
- package/dist/utils/model-operations.d.ts.map +1 -0
- package/dist/utils/model-operations.js +47 -0
- package/dist/utils/model-operations.js.map +1 -0
- package/dist/utils/models-error.d.ts +8 -0
- package/dist/utils/models-error.d.ts.map +1 -0
- package/dist/utils/models-error.js +19 -0
- package/dist/utils/models-error.js.map +1 -0
- package/dist/utils/overflow.d.ts +1 -0
- package/dist/utils/overflow.d.ts.map +1 -1
- package/dist/utils/overflow.js +17 -5
- package/dist/utils/overflow.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +2 -0
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/text.d.ts +9 -1
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/text.js +26 -0
- package/dist/utils/text.js.map +1 -1
- package/dist/utils/transcript.d.ts +84 -0
- package/dist/utils/transcript.d.ts.map +1 -0
- package/dist/utils/transcript.js +204 -0
- package/dist/utils/transcript.js.map +1 -0
- package/package.json +4 -4
- package/dist/image-models.generated.d.ts +0 -785
- package/dist/image-models.generated.d.ts.map +0 -1
- package/dist/image-models.generated.js +0 -787
- package/dist/image-models.generated.js.map +0 -1
- package/dist/images-models.d.ts +0 -95
- package/dist/images-models.d.ts.map +0 -1
- package/dist/images-models.js +0 -143
- package/dist/images-models.js.map +0 -1
- package/dist/providers/openrouter-images.d.ts +0 -3
- package/dist/providers/openrouter-images.d.ts.map +0 -1
- package/dist/providers/openrouter-images.js +0 -22
- package/dist/providers/openrouter-images.js.map +0 -1
- package/dist/utils/deferred-tools.d.ts +0 -9
- package/dist/utils/deferred-tools.d.ts.map +0 -1
- package/dist/utils/deferred-tools.js +0 -36
- package/dist/utils/deferred-tools.js.map +0 -1
package/dist/models.js
CHANGED
|
@@ -4,7 +4,19 @@ import { InMemoryCredentialStore } from "./auth/credential-store.js";
|
|
|
4
4
|
import { ModelsError, resolveProviderAuth } from "./auth/resolve.js";
|
|
5
5
|
import { InMemoryModelsStore } from "./models-store.js";
|
|
6
6
|
import { operationSignal, raceWithAbortSignal } from "./utils/abort.js";
|
|
7
|
-
|
|
7
|
+
import { assertChatModel, assertClassifierModel, assertImageModel, classifierErrorResult, getModelType, imageErrorResult, isModelType, } from "./utils/model-operations.js";
|
|
8
|
+
import { normalizeContext } from "./utils/transcript.js";
|
|
9
|
+
export { ModelsError, REQUEST_AUTH_PREPARATION_TIMEOUT_MS, requestAuthTimeoutMessage, } from "./auth/resolve.js";
|
|
10
|
+
export { assertChatModel, classifierErrorResult, getModelType, imageErrorResult, isModelType, } from "./utils/model-operations.js";
|
|
11
|
+
const KNOWN_MODEL_TYPES = { chat: true, image: true, classifier: true };
|
|
12
|
+
/** Models from stores and remote sources may have types that only newer versions know. */
|
|
13
|
+
function hasKnownModelType(model) {
|
|
14
|
+
return Object.hasOwn(KNOWN_MODEL_TYPES, getModelType(model));
|
|
15
|
+
}
|
|
16
|
+
/** Drops stored models whose type this version does not know. */
|
|
17
|
+
function withKnownModelTypes(entry) {
|
|
18
|
+
return { ...entry, models: entry.models.filter(hasKnownModelType) };
|
|
19
|
+
}
|
|
8
20
|
function mergeHeaders(base, override) {
|
|
9
21
|
if (!base && !override)
|
|
10
22
|
return undefined;
|
|
@@ -75,9 +87,38 @@ class ModelsImpl {
|
|
|
75
87
|
}
|
|
76
88
|
return models;
|
|
77
89
|
}
|
|
90
|
+
getAllModels(provider) {
|
|
91
|
+
if (provider !== undefined) {
|
|
92
|
+
const entry = this.providers.get(provider);
|
|
93
|
+
if (!entry)
|
|
94
|
+
return [];
|
|
95
|
+
try {
|
|
96
|
+
return entry.getAllModels?.() ?? entry.getModels();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const models = [];
|
|
103
|
+
for (const entry of this.providers.values()) {
|
|
104
|
+
try {
|
|
105
|
+
models.push(...(entry.getAllModels?.() ?? entry.getModels()));
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Best-effort: ill-behaved providers yield no models.
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return models;
|
|
112
|
+
}
|
|
113
|
+
getModelsOfType(type, provider) {
|
|
114
|
+
return this.getAllModels(provider).filter((model) => isModelType(model, type));
|
|
115
|
+
}
|
|
78
116
|
getModel(provider, id) {
|
|
79
117
|
return this.getModels(provider).find((model) => model.id === id);
|
|
80
118
|
}
|
|
119
|
+
getModelOfType(type, provider, id) {
|
|
120
|
+
return this.getModelsOfType(type, provider).find((model) => model.id === id);
|
|
121
|
+
}
|
|
81
122
|
supersedeProviderRefresh(providerId) {
|
|
82
123
|
const generation = (this.refreshGenerations.get(providerId) ?? 0) + 1;
|
|
83
124
|
this.refreshGenerations.set(providerId, generation);
|
|
@@ -123,7 +164,7 @@ class ModelsImpl {
|
|
|
123
164
|
const stored = await this.modelsStore.read(provider.id, { signal });
|
|
124
165
|
await provider.refreshModels({
|
|
125
166
|
credential,
|
|
126
|
-
stored: stored ? structuredClone(stored) : undefined,
|
|
167
|
+
stored: stored ? withKnownModelTypes(structuredClone(stored)) : undefined,
|
|
127
168
|
publish: (publication) => this.publishProviderModels(provider.id, generation, signal, publication),
|
|
128
169
|
allowNetwork,
|
|
129
170
|
force: allowNetwork ? force : undefined,
|
|
@@ -252,26 +293,47 @@ class ModelsImpl {
|
|
|
252
293
|
})();
|
|
253
294
|
return raceWithAbortSignal(check, signal);
|
|
254
295
|
}
|
|
296
|
+
async getAuthenticatedProviders(providerId, signal) {
|
|
297
|
+
signal.throwIfAborted();
|
|
298
|
+
const providers = providerId
|
|
299
|
+
? [this.providers.get(providerId)].filter((entry) => entry !== undefined)
|
|
300
|
+
: this.getProviders();
|
|
301
|
+
const checks = await Promise.all(providers.map(async (provider) => {
|
|
302
|
+
const credential = await this.readCredential(provider.id, signal);
|
|
303
|
+
return { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };
|
|
304
|
+
}));
|
|
305
|
+
return checks.filter((entry) => entry.auth !== undefined);
|
|
306
|
+
}
|
|
255
307
|
getAvailable(providerId, options) {
|
|
256
308
|
const signal = operationSignal(options?.signal);
|
|
257
309
|
const available = (async () => {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
? [this.providers.get(providerId)].filter((entry) => entry !== undefined)
|
|
261
|
-
: this.getProviders();
|
|
262
|
-
const checks = await Promise.all(providers.map(async (provider) => {
|
|
263
|
-
const credential = await this.readCredential(provider.id, signal);
|
|
264
|
-
return { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };
|
|
265
|
-
}));
|
|
266
|
-
return checks.flatMap(({ provider, credential, auth }) => {
|
|
267
|
-
if (!auth)
|
|
268
|
-
return [];
|
|
310
|
+
const providers = await this.getAuthenticatedProviders(providerId, signal);
|
|
311
|
+
return providers.flatMap(({ provider, credential }) => {
|
|
269
312
|
const models = provider.getModels();
|
|
270
313
|
return provider.filterModels?.(models, credential) ?? models;
|
|
271
314
|
});
|
|
272
315
|
})();
|
|
273
316
|
return raceWithAbortSignal(available, signal);
|
|
274
317
|
}
|
|
318
|
+
async getAvailableOfType(type, providerId, options) {
|
|
319
|
+
return (await this.getAllAvailable(providerId, options)).filter((model) => isModelType(model, type));
|
|
320
|
+
}
|
|
321
|
+
getAllAvailable(providerId, options) {
|
|
322
|
+
const signal = operationSignal(options?.signal);
|
|
323
|
+
const available = (async () => {
|
|
324
|
+
const providers = await this.getAuthenticatedProviders(providerId, signal);
|
|
325
|
+
return providers.flatMap(({ provider, credential }) => {
|
|
326
|
+
const models = provider.getAllModels?.() ?? provider.getModels();
|
|
327
|
+
if (provider.filterAllModels)
|
|
328
|
+
return provider.filterAllModels(models, credential);
|
|
329
|
+
if (!provider.filterModels)
|
|
330
|
+
return models;
|
|
331
|
+
const availableChatIds = new Set(provider.filterModels(provider.getModels(), credential).map((model) => model.id));
|
|
332
|
+
return models.filter((model) => !isModelType(model, "chat") || availableChatIds.has(model.id));
|
|
333
|
+
});
|
|
334
|
+
})();
|
|
335
|
+
return raceWithAbortSignal(available, signal);
|
|
336
|
+
}
|
|
275
337
|
async getAuth(providerOrModel, overrides) {
|
|
276
338
|
const signal = operationSignal(overrides?.signal);
|
|
277
339
|
const providerId = typeof providerOrModel === "string" ? providerOrModel : providerOrModel.provider;
|
|
@@ -355,6 +417,10 @@ class ModelsImpl {
|
|
|
355
417
|
}
|
|
356
418
|
return provider;
|
|
357
419
|
}
|
|
420
|
+
requireChatProvider(model) {
|
|
421
|
+
assertChatModel(model);
|
|
422
|
+
return this.requireProvider(model);
|
|
423
|
+
}
|
|
358
424
|
async applyAuth(model, options) {
|
|
359
425
|
this.requireProvider(model);
|
|
360
426
|
const resolution = await this.getAuth(model, {
|
|
@@ -378,20 +444,22 @@ class ModelsImpl {
|
|
|
378
444
|
return { requestModel, requestOptions };
|
|
379
445
|
}
|
|
380
446
|
stream(model, context, options) {
|
|
447
|
+
const transcript = normalizeContext(context);
|
|
381
448
|
return lazyStream(model, async () => {
|
|
382
|
-
const provider = this.
|
|
449
|
+
const provider = this.requireChatProvider(model);
|
|
383
450
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
384
|
-
return provider.stream(requestModel,
|
|
451
|
+
return provider.stream(requestModel, transcript, requestOptions);
|
|
385
452
|
});
|
|
386
453
|
}
|
|
387
454
|
async complete(model, context, options) {
|
|
388
455
|
return this.stream(model, context, options).result();
|
|
389
456
|
}
|
|
390
457
|
streamSimple(model, context, options) {
|
|
458
|
+
const transcript = normalizeContext(context);
|
|
391
459
|
return lazyStream(model, async () => {
|
|
392
|
-
const provider = this.
|
|
460
|
+
const provider = this.requireChatProvider(model);
|
|
393
461
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
394
|
-
return provider.streamSimple(requestModel,
|
|
462
|
+
return provider.streamSimple(requestModel, transcript, requestOptions);
|
|
395
463
|
});
|
|
396
464
|
}
|
|
397
465
|
async completeSimple(model, context, options) {
|
|
@@ -399,7 +467,7 @@ class ModelsImpl {
|
|
|
399
467
|
}
|
|
400
468
|
async fetchDeferred(model, handle, options) {
|
|
401
469
|
return lazyStream(model, async () => {
|
|
402
|
-
const provider = this.
|
|
470
|
+
const provider = this.requireChatProvider(model);
|
|
403
471
|
if (!provider.fetchDeferred) {
|
|
404
472
|
throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
|
|
405
473
|
}
|
|
@@ -408,31 +476,73 @@ class ModelsImpl {
|
|
|
408
476
|
}).result();
|
|
409
477
|
}
|
|
410
478
|
async cancelDeferred(model, handle, options) {
|
|
411
|
-
const provider = this.
|
|
479
|
+
const provider = this.requireChatProvider(model);
|
|
412
480
|
if (!provider.cancelDeferred) {
|
|
413
481
|
throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
|
|
414
482
|
}
|
|
415
483
|
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
416
484
|
await provider.cancelDeferred(requestModel, handle, requestOptions);
|
|
417
485
|
}
|
|
486
|
+
async generateImages(model, context, options) {
|
|
487
|
+
try {
|
|
488
|
+
assertImageModel(model);
|
|
489
|
+
const provider = this.requireProvider(model);
|
|
490
|
+
if (!provider.generateImages) {
|
|
491
|
+
throw new ModelsError("provider", `Provider ${model.provider} does not support image generation`);
|
|
492
|
+
}
|
|
493
|
+
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
494
|
+
return await provider.generateImages(requestModel, context, requestOptions);
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
return imageErrorResult(model, error, options?.signal?.aborted);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
async classify(model, context, options) {
|
|
501
|
+
try {
|
|
502
|
+
assertClassifierModel(model);
|
|
503
|
+
const provider = this.requireProvider(model);
|
|
504
|
+
if (!provider.classify) {
|
|
505
|
+
throw new ModelsError("provider", `Provider ${model.provider} does not support classification`);
|
|
506
|
+
}
|
|
507
|
+
const { requestModel, requestOptions } = await this.applyAuth(model, options);
|
|
508
|
+
return await provider.classify(requestModel, context, requestOptions);
|
|
509
|
+
}
|
|
510
|
+
catch (error) {
|
|
511
|
+
return classifierErrorResult(model, error, options?.signal?.aborted);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
418
514
|
}
|
|
419
515
|
export function createModels(options) {
|
|
420
516
|
return new ModelsImpl(options);
|
|
421
517
|
}
|
|
422
518
|
/**
|
|
423
519
|
* Builds a provider from parts. Built-in provider factories and models.json
|
|
424
|
-
* custom providers both go through this. A single `api` streams all
|
|
425
|
-
* an `api` map dispatches on `model.api`, and a model whose api has
|
|
426
|
-
* produces a stream error.
|
|
520
|
+
* custom providers both go through this. A single `api` streams all chat
|
|
521
|
+
* models; an `api` map dispatches on `model.api`, and a model whose api has
|
|
522
|
+
* no entry produces a stream error. One-shot operation maps dispatch on
|
|
523
|
+
* `model.api` the same way. At least one concrete implementation across
|
|
524
|
+
* `api`/`images`/`classifiers` is required; empty maps are rejected.
|
|
427
525
|
*/
|
|
428
526
|
export function createProvider(input) {
|
|
527
|
+
const single = input.api && typeof input.api.stream === "function"
|
|
528
|
+
? input.api
|
|
529
|
+
: undefined;
|
|
530
|
+
const byApi = single || !input.api ? undefined : input.api;
|
|
531
|
+
const images = input.images;
|
|
532
|
+
const classifiers = input.classifiers;
|
|
533
|
+
const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);
|
|
534
|
+
const imageImplementations = Object.values(images ?? {}).filter((entry) => entry !== undefined);
|
|
535
|
+
const classifierImplementations = Object.values(classifiers ?? {}).filter((entry) => entry !== undefined);
|
|
536
|
+
if (streams.length === 0 && imageImplementations.length === 0 && classifierImplementations.length === 0) {
|
|
537
|
+
throw new Error(`Provider ${input.id}: at least one of "api", "images", or "classifiers" is required.`);
|
|
538
|
+
}
|
|
429
539
|
const baselineModels = input.models;
|
|
430
540
|
let dynamicModels = [];
|
|
431
541
|
const fetchModels = input.fetchModels;
|
|
432
542
|
const currentModels = () => {
|
|
433
543
|
const merged = [...baselineModels];
|
|
434
544
|
for (const model of dynamicModels) {
|
|
435
|
-
const index = merged.findIndex((entry) => entry.id === model.id);
|
|
545
|
+
const index = merged.findIndex((entry) => getModelType(entry) === getModelType(model) && entry.id === model.id);
|
|
436
546
|
if (index >= 0)
|
|
437
547
|
merged[index] = model;
|
|
438
548
|
else
|
|
@@ -440,8 +550,6 @@ export function createProvider(input) {
|
|
|
440
550
|
}
|
|
441
551
|
return merged;
|
|
442
552
|
};
|
|
443
|
-
const single = typeof input.api.stream === "function" ? input.api : undefined;
|
|
444
|
-
const byApi = single ? undefined : input.api;
|
|
445
553
|
const apiFor = (model) => single ?? byApi?.[model.api];
|
|
446
554
|
const dispatch = (model, run) => {
|
|
447
555
|
const streams = apiFor(model);
|
|
@@ -458,7 +566,8 @@ export function createProvider(input) {
|
|
|
458
566
|
baseUrl: input.baseUrl,
|
|
459
567
|
headers: input.headers,
|
|
460
568
|
auth: input.auth,
|
|
461
|
-
getModels: currentModels,
|
|
569
|
+
getModels: () => currentModels().filter((model) => isModelType(model, "chat")),
|
|
570
|
+
getAllModels: currentModels,
|
|
462
571
|
refreshModels: fetchModels
|
|
463
572
|
? async (context) => {
|
|
464
573
|
if (context.stored) {
|
|
@@ -475,9 +584,10 @@ export function createProvider(input) {
|
|
|
475
584
|
}
|
|
476
585
|
if (!context.allowNetwork || context.signal.aborted)
|
|
477
586
|
return;
|
|
478
|
-
const
|
|
587
|
+
const fetched = await fetchModels(context);
|
|
479
588
|
if (context.signal.aborted)
|
|
480
589
|
return;
|
|
590
|
+
const refreshed = fetched.filter(hasKnownModelType);
|
|
481
591
|
await context.publish({
|
|
482
592
|
persist: { models: refreshed, checkedAt: Date.now() },
|
|
483
593
|
update: () => {
|
|
@@ -487,10 +597,10 @@ export function createProvider(input) {
|
|
|
487
597
|
}
|
|
488
598
|
: undefined,
|
|
489
599
|
filterModels: input.filterModels,
|
|
600
|
+
filterAllModels: input.filterAllModels,
|
|
490
601
|
stream: (model, context, options) => dispatch(model, (streams) => streams.stream(model, context, options)),
|
|
491
602
|
streamSimple: (model, context, options) => dispatch(model, (streams) => streams.streamSimple(model, context, options)),
|
|
492
603
|
};
|
|
493
|
-
const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);
|
|
494
604
|
if (streams.some((entry) => entry.fetchDeferred !== undefined)) {
|
|
495
605
|
provider.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {
|
|
496
606
|
const implementation = apiFor(model);
|
|
@@ -509,6 +619,24 @@ export function createProvider(input) {
|
|
|
509
619
|
await implementation.cancelDeferred(model, handle, options);
|
|
510
620
|
};
|
|
511
621
|
}
|
|
622
|
+
if (images && imageImplementations.length > 0) {
|
|
623
|
+
provider.generateImages = async (model, context, options) => {
|
|
624
|
+
const implementation = images[model.api];
|
|
625
|
+
if (!implementation) {
|
|
626
|
+
return imageErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no image generation implementation for "${model.api}"`));
|
|
627
|
+
}
|
|
628
|
+
return implementation.generateImages(model, context, options);
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
if (classifiers && classifierImplementations.length > 0) {
|
|
632
|
+
provider.classify = async (model, context, options) => {
|
|
633
|
+
const implementation = classifiers[model.api];
|
|
634
|
+
if (!implementation) {
|
|
635
|
+
return classifierErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no classifier implementation for "${model.api}"`));
|
|
636
|
+
}
|
|
637
|
+
return implementation.classify(model, context, options);
|
|
638
|
+
};
|
|
639
|
+
}
|
|
512
640
|
return provider;
|
|
513
641
|
}
|
|
514
642
|
/**
|
|
@@ -520,9 +648,11 @@ export function createProvider(input) {
|
|
|
520
648
|
* // model: Model<"anthropic-messages">, stream options fully typed
|
|
521
649
|
* }
|
|
522
650
|
* ```
|
|
651
|
+
*
|
|
652
|
+
* Non-chat models never match, even when their api id equals `api`.
|
|
523
653
|
*/
|
|
524
654
|
export function hasApi(model, api) {
|
|
525
|
-
return model.api === api;
|
|
655
|
+
return isModelType(model, "chat") && model.api === api;
|
|
526
656
|
}
|
|
527
657
|
export function calculateCost(model, usage) {
|
|
528
658
|
const inputTokens = usage.input + usage.cacheRead + usage.cacheWrite;
|
|
@@ -577,12 +707,12 @@ export function clampThinkingLevel(model, level) {
|
|
|
577
707
|
return availableLevels[0] ?? "off";
|
|
578
708
|
}
|
|
579
709
|
/**
|
|
580
|
-
* Check if two models are equal by comparing
|
|
710
|
+
* Check if two models are equal by comparing their type, id, and provider.
|
|
581
711
|
* Returns false if either model is null or undefined.
|
|
582
712
|
*/
|
|
583
713
|
export function modelsAreEqual(a, b) {
|
|
584
714
|
if (!a || !b)
|
|
585
715
|
return false;
|
|
586
|
-
return a.id === b.id && a.provider === b.provider;
|
|
716
|
+
return getModelType(a) === getModelType(b) && a.id === b.id && a.provider === b.provider;
|
|
587
717
|
}
|
|
588
718
|
//# sourceMappingURL=models.js.map
|