@psnext/slingcli 2.5.20260722-2 → 2.5.20260722-3

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.
Files changed (100) hide show
  1. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +9 -7
  2. package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +25 -23
  3. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +32 -19
  4. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +6 -7
  5. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +75 -26
  6. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/utils.js +6 -17
  7. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/jsonl-storage.js +56 -4
  8. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/memory-storage.js +56 -4
  9. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo-utils.js +2 -2
  10. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +30 -14
  11. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +4 -2
  12. package/node_modules/@earendil-works/pi-agent-core/dist/stream-fn.js +17 -0
  13. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  14. package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +2 -7
  15. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +14 -2
  16. package/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.js +2 -4
  17. package/node_modules/@earendil-works/pi-ai/dist/auth/helpers.js +3 -2
  18. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/kimi-coding.js +249 -0
  19. package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/load.js +5 -0
  20. package/node_modules/@earendil-works/pi-ai/dist/bun-oauth.js +2 -0
  21. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +2 -0
  22. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +60 -0
  23. package/node_modules/@earendil-works/pi-ai/dist/index.js +2 -0
  24. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +4 -0
  25. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +8 -0
  26. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +3 -2
  27. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -0
  28. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cerebras.json +1 -1
  29. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  30. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  31. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  32. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  33. package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
  34. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  35. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +1 -1
  36. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai-cn.json +1 -1
  37. package/node_modules/@earendil-works/pi-ai/dist/providers/data/moonshotai.json +1 -1
  38. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
  39. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  40. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  41. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  42. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  43. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -0
  44. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -0
  45. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  46. package/node_modules/@earendil-works/pi-ai/dist/providers/data/xai.json +1 -1
  47. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.js +10 -2
  48. package/node_modules/@earendil-works/pi-ai/dist/providers/opencode-go.js +2 -0
  49. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.js +15 -0
  50. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan-cn.models.js +5 -0
  51. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.js +15 -0
  52. package/node_modules/@earendil-works/pi-ai/dist/providers/qwen-token-plan.models.js +5 -0
  53. package/node_modules/@earendil-works/pi-ai/dist/providers/radius-config.js +18 -14
  54. package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +3 -0
  55. package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +79 -0
  56. package/node_modules/@earendil-works/pi-ai/dist/utils/text.js +10 -0
  57. package/node_modules/@earendil-works/{pi-agent-core/dist/harness/session → pi-ai/dist/utils}/uuid.js +4 -8
  58. package/node_modules/@earendil-works/pi-ai/package.json +8 -5
  59. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +2 -0
  60. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +72 -57
  61. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js +8 -11
  62. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +63 -26
  63. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.js +6 -17
  64. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +5 -0
  65. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +2 -0
  66. package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-runtime.js +18 -15
  67. package/node_modules/@earendil-works/pi-coding-agent/dist/core/project-trust.js +1 -1
  68. package/node_modules/@earendil-works/pi-coding-agent/dist/core/remote-catalog-provider.js +26 -7
  69. package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +6 -2
  70. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +100 -24
  71. package/node_modules/@earendil-works/pi-coding-agent/dist/core/usage-totals.js +52 -0
  72. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.js +3 -1
  73. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/index.js +3 -3
  74. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +1 -1
  75. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +5 -1
  76. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/footer.js +20 -21
  77. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +69 -25
  78. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -0
  79. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +4 -0
  80. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +16 -31
  81. package/node_modules/@earendil-works/pi-coding-agent/package.json +4 -4
  82. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/cli.js +5 -5
  83. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/config.js +9 -9
  84. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/ipc/client.js +1 -1
  85. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/ipc/server.js +1 -1
  86. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/radius.js +8 -8
  87. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/rpc-process.js +1 -1
  88. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/serve.js +3 -3
  89. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/storage.js +7 -7
  90. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/supervisor.js +2 -2
  91. package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/package.json +9 -6
  92. package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +16 -10
  93. package/node_modules/@earendil-works/pi-tui/dist/tui.js +4 -2
  94. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  95. package/package.json +7 -7
  96. package/slingshot/index.js +253 -250
  97. /package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/handler.js +0 -0
  98. /package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/index.js +0 -0
  99. /package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/ipc/protocol.js +0 -0
  100. /package/node_modules/@earendil-works/{pi-orchestrator → pi-server}/dist/types.js +0 -0
@@ -0,0 +1 @@
1
+ {"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":196608,"maxTokens":24576},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"deepseek","supportsDeveloperRole":false,"supportsStore":false,"requiresReasoningContentOnAssistantMessages":true},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"deepseek","supportsDeveloperRole":false,"supportsStore":false,"requiresReasoningContentOnAssistantMessages":true},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"glm-5":{"id":"glm-5","name":"GLM-5","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":202752,"maxTokens":16384},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":202752,"maxTokens":128000},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":32768},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":64000},"qwen3.8-max-preview":{"id":"qwen3.8-max-preview","name":"Qwen3.8 Max Preview","api":"openai-completions","provider":"qwen-token-plan-cn","baseUrl":"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072}}
@@ -0,0 +1 @@
1
+ {"MiniMax-M2.5":{"id":"MiniMax-M2.5","name":"MiniMax-M2.5","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":196608,"maxTokens":24576},"deepseek-v3.2":{"id":"deepseek-v3.2","name":"DeepSeek V3.2","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"deepseek-v4-flash":{"id":"deepseek-v4-flash","name":"DeepSeek V4 Flash","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"deepseek","supportsDeveloperRole":false,"supportsStore":false,"requiresReasoningContentOnAssistantMessages":true},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"deepseek-v4-pro":{"id":"deepseek-v4-pro","name":"DeepSeek V4 Pro","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"deepseek","supportsDeveloperRole":false,"supportsStore":false,"requiresReasoningContentOnAssistantMessages":true},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","max":"max"}},"glm-5":{"id":"glm-5","name":"GLM-5","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":202752,"maxTokens":16384},"glm-5.1":{"id":"glm-5.1","name":"GLM-5.1","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":202752,"maxTokens":128000},"glm-5.2":{"id":"glm-5.2","name":"GLM-5.2","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072},"kimi-k2.5":{"id":"kimi-k2.5","name":"Kimi K2.5","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":32768},"kimi-k2.6":{"id":"kimi-k2.6","name":"Kimi K2.6","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":16384},"kimi-k2.7-code":{"id":"kimi-k2.7-code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144},"qwen3.6-flash":{"id":"qwen3.6-flash","name":"Qwen3.6 Flash","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},"qwen3.6-plus":{"id":"qwen3.6-plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-max":{"id":"qwen3.7-max","name":"Qwen3.7 Max","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":65536},"qwen3.7-plus":{"id":"qwen3.7-plus","name":"Qwen3.7 Plus","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":64000},"qwen3.8-max-preview":{"id":"qwen3.8-max-preview","name":"Qwen3.8 Max Preview","api":"openai-completions","provider":"qwen-token-plan","baseUrl":"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1","compat":{"thinkingFormat":"qwen","supportsDeveloperRole":false,"supportsStore":false},"reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072}}
@@ -1 +1 @@
1
- {"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":202752,"maxTokens":131072},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":250000},"Qwen/Qwen2.5-7B-Instruct-Turbo":{"id":"Qwen/Qwen2.5-7B-Instruct-Turbo","name":"Qwen 2.5 7B Instruct Turbo","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":32768,"maxTokens":32768},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.17,"output":0.25,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":65536},"Qwen/Qwen3.6-Plus":{"id":"Qwen/Qwen3.6-Plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.25,"output":3.75,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null},"input":["text"],"cost":{"input":1.74,"output":3.48,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512000,"maxTokens":384000},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B Instruct","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.39,"output":0.97,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.04,"output":1.04,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1.2,"output":4.5,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131000},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.6,"output":3.6,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512300,"maxTokens":512300},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null},"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null},"input":["text"],"cost":{"input":0.05,"output":0.2,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1,"output":4.05,"cacheRead":0.17,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":131072},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":164000}}
1
+ {"MiniMaxAI/MiniMax-M2.7":{"id":"MiniMaxAI/MiniMax-M2.7","name":"MiniMax-M2.7","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":202752,"maxTokens":131072},"MiniMaxAI/MiniMax-M3":{"id":"MiniMaxAI/MiniMax-M3","name":"MiniMax-M3","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":250000},"Qwen/Qwen2.5-7B-Instruct-Turbo":{"id":"Qwen/Qwen2.5-7B-Instruct-Turbo","name":"Qwen 2.5 7B Instruct Turbo","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":0.3,"output":0.3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":32768,"maxTokens":32768},"Qwen/Qwen3.5-9B":{"id":"Qwen/Qwen3.5-9B","name":"Qwen3.5 9B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.17,"output":0.25,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":65536},"Qwen/Qwen3.6-Plus":{"id":"Qwen/Qwen3.6-Plus","name":"Qwen3.6 Plus","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.5,"output":3,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"Qwen/Qwen3.7-Max":{"id":"Qwen/Qwen3.7-Max","name":"Qwen3.7 Max","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.25,"output":3.75,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":1000000,"maxTokens":500000},"deepseek-ai/DeepSeek-V4-Pro":{"id":"deepseek-ai/DeepSeek-V4-Pro","name":"DeepSeek V4 Pro","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null,"high":"high","xhigh":null},"input":["text"],"cost":{"input":1.74,"output":3.48,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512000,"maxTokens":384000},"google/gemma-4-31B-it":{"id":"google/gemma-4-31B-it","name":"Gemma 4 31B Instruct","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":0.39,"output":0.97,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{"id":"meta-llama/Llama-3.3-70B-Instruct-Turbo","name":"Llama 3.3 70B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":false,"input":["text"],"cost":{"input":1.04,"output":1.04,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"moonshotai/Kimi-K2.6":{"id":"moonshotai/Kimi-K2.6","name":"Kimi K2.6","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1.2,"output":4.5,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131000},"moonshotai/Kimi-K2.7-Code":{"id":"moonshotai/Kimi-K2.7-Code","name":"Kimi K2.7 Code","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":131072},"nvidia/nemotron-3-ultra-550b-a55b":{"id":"nvidia/nemotron-3-ultra-550b-a55b","name":"Nemotron 3 Ultra 550B A55B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":0.6,"output":3.6,"cacheRead":0.2,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":512300,"maxTokens":512300},"openai/gpt-oss-120b":{"id":"openai/gpt-oss-120b","name":"GPT OSS 120B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null},"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"openai/gpt-oss-20b":{"id":"openai/gpt-oss-20b","name":"GPT OSS 20B","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null},"input":["text"],"cost":{"input":0.05,"output":0.2,"cacheRead":0,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":true,"maxTokensField":"max_tokens","thinkingFormat":"openai","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":131072,"maxTokens":131072},"thinkingmachines/Inkling":{"id":"thinkingmachines/Inkling","name":"Inkling","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text","image"],"cost":{"input":1,"output":4.05,"cacheRead":0.17,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":524288,"maxTokens":131072},"zai-org/GLM-5.2":{"id":"zai-org/GLM-5.2","name":"GLM-5.2","api":"openai-completions","provider":"together","baseUrl":"https://api.together.ai/v1","reasoning":true,"thinkingLevelMap":{"minimal":null,"low":null,"medium":null},"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false,"maxTokensField":"max_tokens","thinkingFormat":"together","supportsStrictMode":false,"supportsLongCacheRetention":false},"contextWindow":262144,"maxTokens":164000}}
@@ -1 +1 @@
1
- {"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":2.5,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1000000,"maxTokens":30000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","api":"openai-responses","provider":"xai","baseUrl":"https://api.x.ai/v1","compat":{"supportsLongCacheRetention":false},"reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.3,"cacheWrite":0},"contextWindow":500000,"maxTokens":500000,"thinkingLevelMap":{"off":null,"minimal":null}},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1,"output":2,"cacheRead":0.2,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}}}
1
+ {"grok-4.3":{"id":"grok-4.3","name":"Grok 4.3","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":2.5,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1000000,"maxTokens":30000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}},"grok-4.5":{"id":"grok-4.5","name":"Grok 4.5","api":"openai-responses","provider":"xai","baseUrl":"https://api.x.ai/v1","compat":{"supportsLongCacheRetention":false},"reasoning":true,"input":["text","image"],"cost":{"input":2,"output":6,"cacheRead":0.3,"cacheWrite":0},"contextWindow":500000,"maxTokens":500000,"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":null}},"grok-build-0.1":{"id":"grok-build-0.1","name":"Grok Build 0.1","api":"openai-completions","provider":"xai","baseUrl":"https://api.x.ai/v1","reasoning":true,"input":["text","image"],"cost":{"input":1,"output":2,"cacheRead":0.2,"cacheWrite":0},"contextWindow":256000,"maxTokens":256000,"compat":{"supportsStore":false,"supportsDeveloperRole":false,"supportsReasoningEffort":false}}}
@@ -1,5 +1,6 @@
1
1
  import { anthropicMessagesApi } from "../api/anthropic-messages.lazy.js";
2
- import { envApiKeyAuth } from "../auth/helpers.js";
2
+ import { envApiKeyAuth, lazyOAuth } from "../auth/helpers.js";
3
+ import { loadKimiCodingOAuth } from "../auth/oauth/load.js";
3
4
  import { createProvider } from "../models.js";
4
5
  import { KIMI_CODING_MODELS } from "./kimi-coding.models.js";
5
6
  export function kimiCodingProvider() {
@@ -7,7 +8,14 @@ export function kimiCodingProvider() {
7
8
  id: "kimi-coding",
8
9
  name: "Kimi For Coding",
9
10
  baseUrl: "https://api.kimi.com/coding",
10
- auth: { apiKey: envApiKeyAuth("Kimi API key", ["KIMI_API_KEY"]) },
11
+ auth: {
12
+ apiKey: envApiKeyAuth("Kimi API key", ["KIMI_API_KEY"]),
13
+ oauth: lazyOAuth({
14
+ name: "Kimi Code (subscription)",
15
+ loginLabel: "Sign in with Kimi Code",
16
+ load: loadKimiCodingOAuth,
17
+ }),
18
+ },
11
19
  models: Object.values(KIMI_CODING_MODELS),
12
20
  api: anthropicMessagesApi(),
13
21
  });
@@ -1,5 +1,6 @@
1
1
  import { anthropicMessagesApi } from "../api/anthropic-messages.lazy.js";
2
2
  import { openAICompletionsApi } from "../api/openai-completions.lazy.js";
3
+ import { openAIResponsesApi } from "../api/openai-responses.lazy.js";
3
4
  import { envApiKeyAuth } from "../auth/helpers.js";
4
5
  import { createProvider } from "../models.js";
5
6
  import { OPENCODE_GO_MODELS } from "./opencode-go.models.js";
@@ -12,6 +13,7 @@ export function opencodeGoProvider() {
12
13
  api: {
13
14
  "anthropic-messages": anthropicMessagesApi(),
14
15
  "openai-completions": openAICompletionsApi(),
16
+ "openai-responses": openAIResponsesApi(),
15
17
  },
16
18
  });
17
19
  }
@@ -0,0 +1,15 @@
1
+ import { openAICompletionsApi } from "../api/openai-completions.lazy.js";
2
+ import { envApiKeyAuth } from "../auth/helpers.js";
3
+ import { createProvider } from "../models.js";
4
+ import { QWEN_TOKEN_PLAN_CN_MODELS } from "./qwen-token-plan-cn.models.js";
5
+ export function qwenTokenPlanCnProvider() {
6
+ return createProvider({
7
+ id: "qwen-token-plan-cn",
8
+ name: "Qwen Token Plan CN",
9
+ baseUrl: "https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
10
+ auth: { apiKey: envApiKeyAuth("Qwen Token Plan CN API key", ["QWEN_TOKEN_PLAN_CN_API_KEY"]) },
11
+ models: Object.values(QWEN_TOKEN_PLAN_CN_MODELS),
12
+ api: openAICompletionsApi(),
13
+ });
14
+ }
15
+ //# sourceMappingURL=qwen-token-plan-cn.js.map
@@ -0,0 +1,5 @@
1
+ // This file is auto-generated by scripts/generate-models.ts
2
+ // Do not edit manually - run 'npm run generate-models' to update
3
+ import values from "./data/qwen-token-plan-cn.json" with { type: "json" };
4
+ export const QWEN_TOKEN_PLAN_CN_MODELS = values;
5
+ //# sourceMappingURL=qwen-token-plan-cn.models.js.map
@@ -0,0 +1,15 @@
1
+ import { openAICompletionsApi } from "../api/openai-completions.lazy.js";
2
+ import { envApiKeyAuth } from "../auth/helpers.js";
3
+ import { createProvider } from "../models.js";
4
+ import { QWEN_TOKEN_PLAN_MODELS } from "./qwen-token-plan.models.js";
5
+ export function qwenTokenPlanProvider() {
6
+ return createProvider({
7
+ id: "qwen-token-plan",
8
+ name: "Qwen Token Plan",
9
+ baseUrl: "https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
10
+ auth: { apiKey: envApiKeyAuth("Qwen Token Plan API key", ["QWEN_TOKEN_PLAN_API_KEY"]) },
11
+ models: Object.values(QWEN_TOKEN_PLAN_MODELS),
12
+ api: openAICompletionsApi(),
13
+ });
14
+ }
15
+ //# sourceMappingURL=qwen-token-plan.js.map
@@ -0,0 +1,5 @@
1
+ // This file is auto-generated by scripts/generate-models.ts
2
+ // Do not edit manually - run 'npm run generate-models' to update
3
+ import values from "./data/qwen-token-plan.json" with { type: "json" };
4
+ export const QWEN_TOKEN_PLAN_MODELS = values;
5
+ //# sourceMappingURL=qwen-token-plan.models.js.map
@@ -1,23 +1,27 @@
1
1
  export const DEFAULT_RADIUS_GATEWAY = "https://radius.pi.dev";
2
- function isRecord(value) {
3
- return typeof value === "object" && value !== null && !Array.isArray(value);
4
- }
5
2
  function isRadiusGatewayModel(value) {
6
- return (isRecord(value) &&
7
- typeof value.id === "string" &&
8
- typeof value.name === "string" &&
9
- typeof value.reasoning === "boolean" &&
10
- Array.isArray(value.input) &&
11
- isRecord(value.cost) &&
12
- typeof value.contextWindow === "number" &&
13
- typeof value.maxTokens === "number");
3
+ if (typeof value !== "object" || value === null || Array.isArray(value))
4
+ return false;
5
+ const model = value;
6
+ return (typeof model.id === "string" &&
7
+ typeof model.name === "string" &&
8
+ typeof model.reasoning === "boolean" &&
9
+ Array.isArray(model.input) &&
10
+ typeof model.cost === "object" &&
11
+ model.cost !== null &&
12
+ !Array.isArray(model.cost) &&
13
+ typeof model.contextWindow === "number" &&
14
+ typeof model.maxTokens === "number");
14
15
  }
15
16
  function sanitizeRadiusGatewayConfig(config) {
16
- if (!isRecord(config) || typeof config.baseUrl !== "string" || !Array.isArray(config.models))
17
+ if (typeof config !== "object" || config === null || Array.isArray(config))
18
+ return undefined;
19
+ const { baseUrl, models } = config;
20
+ if (typeof baseUrl !== "string" || !Array.isArray(models))
17
21
  return undefined;
18
22
  return {
19
- baseUrl: config.baseUrl,
20
- models: config.models.filter(isRadiusGatewayModel).map((model) => ({ ...model })),
23
+ baseUrl,
24
+ models: models.filter(isRadiusGatewayModel).map((model) => ({ ...model })),
21
25
  };
22
26
  }
23
27
  export function normalizeRadiusGatewayUrl(value) {
@@ -29,6 +29,7 @@
29
29
  * - Xiaomi MiMo: Truncates input to fill contextWindow exactly, then returns finish_reason "length"
30
30
  * with output=0 (no room left to generate). Detected via stopReason "length" + zero output +
31
31
  * input filling the context window.
32
+ * - DashScope/Qwen: "Range of input length should be [1, X]" (HTTP 400 invalid_parameter_error)
32
33
  * - Ollama: Some deployments truncate silently, others return errors like "prompt too long; exceeded max context length by X tokens"
33
34
  */
34
35
  const OVERFLOW_PATTERNS = [
@@ -52,6 +53,7 @@ const OVERFLOW_PATTERNS = [
52
53
  /prompt has [\d,]+ tokens?, but the configured context size is [\d,]+ tokens?/i, // DS4 server
53
54
  /model_context_window_exceeded/i, // z.ai non-standard finish_reason surfaced as error text
54
55
  /prompt too long; exceeded (?:max )?context length/i, // Ollama explicit overflow error
56
+ /range of input length should be/i, // DashScope / Qwen Token Plan
55
57
  /context[_ ]length[_ ]exceeded/i, // Generic fallback
56
58
  /too many tokens/i, // Generic fallback
57
59
  /token limit exceeded/i, // Generic fallback
@@ -97,6 +99,7 @@ const NON_OVERFLOW_PATTERNS = [
97
99
  * - LM Studio: "greater than the context length"
98
100
  * - Kimi For Coding: "exceeded model token limit: X (requested: Y)"
99
101
  * - DS4: "Prompt has X tokens, but the configured context size is Y tokens"
102
+ * - DashScope/Qwen: "Range of input length should be [1, X]"
100
103
  *
101
104
  * **Unreliable detection:**
102
105
  * - z.ai: Sometimes accepts overflow silently (detectable via usage.input > contextWindow),
@@ -71,6 +71,85 @@ const RETRYABLE_PROVIDER_ERROR_PATTERN = buildProviderErrorPattern([
71
71
  // gRPC based providers (e.g. NVIDIA NIM)
72
72
  "ResourceExhausted",
73
73
  ]);
74
+ class RetrySleepAbortError extends Error {
75
+ constructor() {
76
+ super("Aborted");
77
+ }
78
+ }
79
+ function sleep(ms, signal) {
80
+ return new Promise((resolve, reject) => {
81
+ if (signal?.aborted) {
82
+ reject(new RetrySleepAbortError());
83
+ return;
84
+ }
85
+ const timeout = setTimeout(resolve, ms);
86
+ signal?.addEventListener("abort", () => {
87
+ clearTimeout(timeout);
88
+ reject(new RetrySleepAbortError());
89
+ }, { once: true });
90
+ });
91
+ }
92
+ /**
93
+ * Run a single assistant-producing call with bounded retry on transient errors.
94
+ *
95
+ * Behavior:
96
+ * - A successful response is returned immediately. Aborts are terminal and never
97
+ * retried, but reported as unsuccessful if they happen after a retry was scheduled.
98
+ * Aborts during the backoff sleep are normalized to an aborted `AssistantMessage`
99
+ * too, so callers do not need to care when cancellation happened.
100
+ * - A non-retryable error (per {@link isRetryableAssistantError}, including quota/
101
+ * billing exhaustion) is returned immediately so deterministic errors fail fast.
102
+ * - Otherwise retries up to `maxRetries` times with exponential backoff, emitting
103
+ * `onRetryScheduled` before each sleep, `onRetryAttemptStart` after each sleep before
104
+ * the retried call starts, and `onRetryFinished` once at the end (whether the loop
105
+ * ends in success, exhausted retries, or an aborted backoff).
106
+ *
107
+ * When `policy` is undefined or disabled, the first response is returned unchanged
108
+ * (equivalent to calling `produce()` directly).
109
+ */
110
+ export async function retryAssistantCall(produce, policy, signal, callbacks) {
111
+ const maxAttempts = policy?.enabled ? policy.maxRetries : 0;
112
+ let attempt = 0;
113
+ let lastRetry;
114
+ for (;;) {
115
+ const response = await produce();
116
+ // Abort: terminal but not successful. Never retry an aborted message.
117
+ if (response.stopReason === "aborted") {
118
+ if (lastRetry)
119
+ await callbacks?.onRetryFinished?.(false, lastRetry.attempt);
120
+ return response;
121
+ }
122
+ // Success: non-error, non-abort responses return as-is.
123
+ if (response.stopReason !== "error") {
124
+ if (lastRetry)
125
+ await callbacks?.onRetryFinished?.(true, lastRetry.attempt);
126
+ return response;
127
+ }
128
+ // Non-retryable, or budget exhausted: return the final error message.
129
+ if (attempt >= maxAttempts || !isRetryableAssistantError(response)) {
130
+ if (lastRetry)
131
+ await callbacks?.onRetryFinished?.(false, lastRetry.attempt, response.errorMessage);
132
+ return response;
133
+ }
134
+ attempt++;
135
+ lastRetry = { attempt, errorMessage: response.errorMessage || "Unknown error" };
136
+ const delayMs = policy.baseDelayMs * 2 ** (attempt - 1);
137
+ await callbacks?.onRetryScheduled?.(attempt, maxAttempts, delayMs, lastRetry.errorMessage);
138
+ // Normalize aborts during retry backoff to the same AssistantMessage shape as
139
+ // provider stream aborts, so callers do not need to care when cancellation happened.
140
+ try {
141
+ await sleep(delayMs, signal);
142
+ }
143
+ catch (error) {
144
+ await callbacks?.onRetryFinished?.(false, attempt, lastRetry.errorMessage);
145
+ if (error instanceof RetrySleepAbortError) {
146
+ return { ...response, stopReason: "aborted", errorMessage: undefined };
147
+ }
148
+ throw error;
149
+ }
150
+ await callbacks?.onRetryAttemptStart?.();
151
+ }
152
+ }
74
153
  /**
75
154
  * Classifies whether a failed assistant message looks like a transient provider
76
155
  * or transport error, so callers can decide if the last assistant turn should be
@@ -0,0 +1,10 @@
1
+ /** Extract and join text from message content. */
2
+ export function contentText(content, separator = "\n") {
3
+ if (typeof content === "string")
4
+ return content;
5
+ return content
6
+ .filter((block) => block.type === "text")
7
+ .map((block) => block.text)
8
+ .join(separator);
9
+ }
10
+ //# sourceMappingURL=text.js.map
@@ -1,15 +1,15 @@
1
1
  let lastTimestamp = -Infinity;
2
2
  let sequence = 0;
3
3
  function fillRandomBytes(bytes) {
4
- const crypto = globalThis.crypto;
5
- if (crypto?.getRandomValues) {
6
- crypto.getRandomValues(bytes);
4
+ if (globalThis.crypto?.getRandomValues) {
5
+ globalThis.crypto.getRandomValues(bytes);
7
6
  return;
8
7
  }
9
8
  for (let i = 0; i < bytes.length; i++) {
10
9
  bytes[i] = Math.floor(Math.random() * 256);
11
10
  }
12
11
  }
12
+ /** Generate a time-ordered UUIDv7. */
13
13
  export function uuidv7() {
14
14
  const random = new Uint8Array(16);
15
15
  fillRandomBytes(random);
@@ -20,9 +20,8 @@ export function uuidv7() {
20
20
  }
21
21
  else {
22
22
  sequence = (sequence + 1) >>> 0;
23
- if (sequence === 0) {
23
+ if (sequence === 0)
24
24
  lastTimestamp++;
25
- }
26
25
  }
27
26
  const bytes = new Uint8Array(16);
28
27
  bytes[0] = (lastTimestamp / 0x10000000000) & 0xff;
@@ -41,9 +40,6 @@ export function uuidv7() {
41
40
  bytes[13] = random[13];
42
41
  bytes[14] = random[14];
43
42
  bytes[15] = random[15];
44
- return formatUuid(bytes);
45
- }
46
- function formatUuid(bytes) {
47
43
  const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0"));
48
44
  return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10, 16).join("")}`;
49
45
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-ai",
3
- "version": "0.80.10",
3
+ "version": "0.81.1",
4
4
  "description": "Unified LLM API with automatic model discovery and provider configuration",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -41,7 +41,7 @@
41
41
  }
42
42
  },
43
43
  "bin": {
44
- "pi-ai": "./dist/cli.js"
44
+ "pi-ai": "dist/cli.js"
45
45
  },
46
46
  "files": [
47
47
  "dist",
@@ -49,10 +49,13 @@
49
49
  ],
50
50
  "scripts": {
51
51
  "clean": "shx rm -rf dist",
52
- "generate-models": "node scripts/generate-models.ts",
52
+ "generate-models": "node scripts/generate-models.ts --strict",
53
+ "hydrate-model-data": "node scripts/generate-models.ts --strict --data-only",
53
54
  "generate-model-catalog": "node scripts/generate-models.ts --strict --json-only --json-output ../../.artifacts/model-catalog",
54
- "generate-image-models": "node scripts/generate-image-models.ts",
55
- "build": "npm run generate-models && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data",
55
+ "generate-image-models": "node scripts/generate-image-models.ts --strict",
56
+ "check:model-data": "node scripts/check-model-data.ts",
57
+ "build": "npm run generate-models && npm run build:offline",
58
+ "build:offline": "npm run check:model-data && tsgo -p tsconfig.build.json && shx rm -rf dist/providers/data && shx cp -r src/providers/data dist/providers/data",
56
59
  "test": "vitest --run",
57
60
  "prepublishOnly": "npm run clean && npm run build"
58
61
  },
@@ -350,6 +350,8 @@ ${chalk.bold("Environment Variables:")}
350
350
  CLOUDFLARE_API_KEY - Cloudflare API token (Workers AI and AI Gateway)
351
351
  CLOUDFLARE_ACCOUNT_ID - Cloudflare account id (required for both)
352
352
  CLOUDFLARE_GATEWAY_ID - Cloudflare AI Gateway slug (required for AI Gateway)
353
+ QWEN_TOKEN_PLAN_API_KEY - Qwen Token Plan API key (international region)
354
+ QWEN_TOKEN_PLAN_CN_API_KEY - Qwen Token Plan API key (China region)
353
355
  XIAOMI_API_KEY - Xiaomi MiMo API key (api.xiaomimimo.com billing)
354
356
  XIAOMI_TOKEN_PLAN_CN_API_KEY - Xiaomi MiMo Token Plan API key (China region)
355
357
  XIAOMI_TOKEN_PLAN_AMS_API_KEY - Xiaomi MiMo Token Plan API key (Amsterdam region)