diff --git a/cmd/root.go b/cmd/root.go index a3860f90..7d91f7ea 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -38,6 +38,7 @@ var ( streamFlag bool // Enable streaming output compactMode bool // Enable compact output mode scriptMCPConfig *config.Config // Used to override config in script mode + approveToolRun bool // Session management saveSessionPath string @@ -302,6 +303,8 @@ func init() { BoolVar(&compactMode, "compact", false, "enable compact output mode without fancy styling") rootCmd.PersistentFlags(). BoolVar(&noHooks, "no-hooks", false, "disable all hooks execution") + rootCmd.PersistentFlags(). + BoolVar(&approveToolRun, "approve-tool-run", false, "enable requiring user approval for every tool call") // Session management flags rootCmd.PersistentFlags(). @@ -347,6 +350,7 @@ func init() { viper.BindPFlag("num-gpu-layers", rootCmd.PersistentFlags().Lookup("num-gpu-layers")) viper.BindPFlag("main-gpu", rootCmd.PersistentFlags().Lookup("main-gpu")) viper.BindPFlag("tls-skip-verify", rootCmd.PersistentFlags().Lookup("tls-skip-verify")) + viper.BindPFlag("approve-tool-run", rootCmd.PersistentFlags().Lookup("approve-tool-run")) // Defaults are already set in flag definitions, no need to duplicate in viper @@ -445,7 +449,8 @@ func runNormalMode(ctx context.Context) error { debugLogger = bufferedLogger } - mcpAgent, err := agent.CreateAgent(ctx, &agent.AgentCreationOptions{ModelConfig: modelConfig, + mcpAgent, err := agent.CreateAgent(ctx, &agent.AgentCreationOptions{ + ModelConfig: modelConfig, MCPConfig: mcpConfig, SystemPrompt: systemPrompt, MaxSteps: viper.GetInt("max-steps"), @@ -743,7 +748,8 @@ func runNormalMode(ctx context.Context) error { return fmt.Errorf("--quiet flag can only be used with --prompt/-p") } - return runInteractiveMode(ctx, mcpAgent, cli, serverNames, toolNames, modelName, messages, sessionManager, hookExecutor) + approveToolRun := viper.GetBool("approve-tool-run") + return runInteractiveMode(ctx, mcpAgent, cli, serverNames, toolNames, modelName, messages, sessionManager, hookExecutor, approveToolRun) } // AgenticLoopConfig configures the behavior of the unified agentic loop. @@ -754,6 +760,7 @@ type AgenticLoopConfig struct { IsInteractive bool // true for interactive mode, false for non-interactive InitialPrompt string // initial prompt for non-interactive mode ContinueAfterRun bool // true to continue to interactive mode after initial run (--no-exit) + ApproveToolRun bool // only used in interactive mode // UI configuration Quiet bool // suppress all output except final response @@ -1103,7 +1110,27 @@ func runAgenticStep(ctx context.Context, mcpAgent *agent.Agent, cli *ui.CLI, mes currentSpinner.Start() } }, - streamingCallback, // Add streaming callback as the last parameter + // Add streaming callback handler + streamingCallback, + // Tool call approval handler - called before tool execution to get user approval + func(toolName, toolArgs string) (bool, error) { + if !config.IsInteractive || !config.ApproveToolRun { + return true, nil + } + if currentSpinner != nil { + currentSpinner.Stop() + currentSpinner = nil + } + allow, err := cli.GetToolApproval(toolName, toolArgs) + if err != nil { + return false, err + } + // Start spinner again for tool calls + currentSpinner = ui.NewSpinner("Thinking...") + currentSpinner.Start() + + return allow, nil + }, ) // Make sure spinner is stopped if still running @@ -1306,6 +1333,7 @@ func runNonInteractiveMode(ctx context.Context, mcpAgent *agent.Agent, cli *ui.C IsInteractive: false, InitialPrompt: prompt, ContinueAfterRun: noExit, + ApproveToolRun: false, Quiet: quiet, ServerNames: serverNames, ToolNames: toolNames, @@ -1318,12 +1346,13 @@ func runNonInteractiveMode(ctx context.Context, mcpAgent *agent.Agent, cli *ui.C } // runInteractiveMode handles the interactive mode execution -func runInteractiveMode(ctx context.Context, mcpAgent *agent.Agent, cli *ui.CLI, serverNames, toolNames []string, modelName string, messages []*schema.Message, sessionManager *session.Manager, hookExecutor *hooks.Executor) error { +func runInteractiveMode(ctx context.Context, mcpAgent *agent.Agent, cli *ui.CLI, serverNames, toolNames []string, modelName string, messages []*schema.Message, sessionManager *session.Manager, hookExecutor *hooks.Executor, approveToolRun bool) error { // Configure and run unified agentic loop config := AgenticLoopConfig{ IsInteractive: true, InitialPrompt: "", ContinueAfterRun: false, + ApproveToolRun: approveToolRun, Quiet: false, ServerNames: serverNames, ToolNames: toolNames, diff --git a/go.mod b/go.mod index f3f92874..dfb19995 100644 --- a/go.mod +++ b/go.mod @@ -7,21 +7,21 @@ toolchain go1.24.5 require ( github.com/JohannesKaufmann/html-to-markdown v1.6.0 github.com/PuerkitoBio/goquery v1.10.3 - github.com/bytedance/sonic v1.14.1 + github.com/bytedance/sonic v1.15.0 github.com/charmbracelet/fang v0.4.0 github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 - github.com/cloudwego/eino v0.5.0-alpha.11 - github.com/cloudwego/eino-ext/components/model/claude v0.1.0 - github.com/cloudwego/eino-ext/components/model/ollama v0.1.2 + github.com/cloudwego/eino v0.7.13 + github.com/cloudwego/eino-ext/components/model/claude v0.1.12 + github.com/cloudwego/eino-ext/components/model/ollama v0.1.8 github.com/cloudwego/eino-ext/components/model/openai v0.0.0-20250903035842-96774a3ec845 - github.com/getkin/kin-openapi v0.120.0 + github.com/eino-contrib/jsonschema v1.0.3 + github.com/getkin/kin-openapi v0.131.0 github.com/mark3labs/mcp-filesystem-server v0.11.1 - github.com/mark3labs/mcp-go v0.43.0 - github.com/ollama/ollama v0.11.8 + github.com/mark3labs/mcp-go v0.44.0-beta.2 github.com/spf13/cobra v1.10.1 github.com/spf13/viper v1.20.1 github.com/tidwall/gjson v1.18.0 - golang.org/x/term v0.34.0 + golang.org/x/term v0.37.0 google.golang.org/genai v1.22.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -29,6 +29,7 @@ require ( require ( cloud.google.com/go v0.121.6 // indirect cloud.google.com/go/auth v0.16.5 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.8.0 // indirect github.com/alecthomas/chroma/v2 v2.20.0 // indirect github.com/andybalholm/cascadia v1.3.3 // indirect @@ -52,7 +53,7 @@ require ( github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytedance/gopkg v0.1.3 // indirect - github.com/bytedance/sonic/loader v0.3.0 // indirect + github.com/bytedance/sonic/loader v0.5.0 // indirect github.com/charmbracelet/colorprofile v0.3.2 // indirect github.com/charmbracelet/harmonica v0.2.0 // indirect github.com/charmbracelet/lipgloss/v2 v2.0.0-beta1 // indirect @@ -65,7 +66,7 @@ require ( github.com/djherbis/times v1.6.0 // indirect github.com/dlclark/regexp2 v1.11.5 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/eino-contrib/jsonschema v1.0.0 // indirect + github.com/eino-contrib/ollama v0.1.0 // indirect github.com/evanphx/json-patch v0.5.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect @@ -85,7 +86,6 @@ require ( github.com/gorilla/css v1.0.1 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/invopop/jsonschema v0.13.0 // indirect - github.com/invopop/yaml v0.2.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect @@ -101,6 +101,8 @@ require ( github.com/muesli/reflow v0.3.0 // indirect github.com/muesli/roff v0.1.0 // indirect github.com/nikolalohinski/gonja v1.5.3 // indirect + github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect + github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -122,13 +124,17 @@ require ( github.com/yuin/goldmark v1.7.13 // indirect github.com/yuin/goldmark-emoji v1.0.6 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect - golang.org/x/arch v0.20.0 // indirect - golang.org/x/crypto v0.41.0 // indirect - golang.org/x/net v0.43.0 // indirect + golang.org/x/arch v0.23.0 // indirect + golang.org/x/crypto v0.45.0 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/time v0.12.0 // indirect + google.golang.org/api v0.246.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 // indirect google.golang.org/grpc v1.75.0 // indirect google.golang.org/protobuf v1.36.8 // indirect @@ -137,7 +143,7 @@ require ( require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/charmbracelet/bubbles v0.21.0 - github.com/charmbracelet/bubbletea v1.3.6 + github.com/charmbracelet/bubbletea v1.3.10 github.com/charmbracelet/glamour v0.10.0 github.com/charmbracelet/x/ansi v0.10.1 // indirect github.com/charmbracelet/x/term v0.2.1 // indirect @@ -153,7 +159,7 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/spf13/pflag v1.0.10 // indirect golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect - golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.35.0 // indirect - golang.org/x/text v0.28.0 // indirect + golang.org/x/sync v0.18.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/text v0.31.0 // indirect ) diff --git a/go.sum b/go.sum index ffe15cdd..62aa6760 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ cloud.google.com/go v0.121.6 h1:waZiuajrI28iAf40cWgycWNgaXPO06dupuS+sgibK6c= cloud.google.com/go v0.121.6/go.mod h1:coChdst4Ea5vUpiALcYKXEpR1S9ZgXbhEzzMcMR66vI= cloud.google.com/go/auth v0.16.5 h1:mFWNQ2FEVWAliEQWpAdH80omXFokmrnbDhUS9cBywsI= cloud.google.com/go/auth v0.16.5/go.mod h1:utzRfHMP+Vv0mpOkTRQoWD2q3BatTOoWbA7gCc2dUhQ= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.8.0 h1:HxMRIbao8w17ZX6wBnjhcDkW6lTFpgcaobyVfZWqRLA= cloud.google.com/go/compute/metadata v0.8.0/go.mod h1:sYOGTp851OV9bOFJ9CH7elVvyzopvWQFNNghtDQ/Biw= github.com/JohannesKaufmann/html-to-markdown v1.6.0 h1:04VXMiE50YYfCfLboJCLcgqF5x+rHJnb1ssNmqpLH/k= @@ -71,15 +73,15 @@ github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= github.com/bytedance/mockey v1.2.14 h1:KZaFgPdiUwW+jOWFieo3Lr7INM1P+6adO3hxZhDswY8= github.com/bytedance/mockey v1.2.14/go.mod h1:1BPHF9sol5R1ud/+0VEHGQq/+i2lN+GTsr3O2Q9IENY= -github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= -github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc= -github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= -github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= +github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE= +github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k= +github.com/bytedance/sonic/loader v0.5.0 h1:gXH3KVnatgY7loH5/TkeVyXPfESoqSBSBEiDd5VjlgE= +github.com/bytedance/sonic/loader v0.5.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= github.com/certifi/gocertifi v0.0.0-20190105021004-abcd57078448/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4= github.com/charmbracelet/bubbles v0.21.0 h1:9TdC97SdRVg/1aaXNVWfFH3nnLAwOXr8Fn6u6mfQdFs= github.com/charmbracelet/bubbles v0.21.0/go.mod h1:HF+v6QUR4HkEpz62dx7ym2xc71/KBHg+zKwJtMw+qtg= -github.com/charmbracelet/bubbletea v1.3.6 h1:VkHIxPJQeDt0aFJIsVxw8BQdh/F/L2KKZGsK6et5taU= -github.com/charmbracelet/bubbletea v1.3.6/go.mod h1:oQD9VCRQFF8KplacJLo28/jofOI2ToOfGYeFgBBxHOc= +github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= +github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI= github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI= github.com/charmbracelet/fang v0.4.0 h1:boBxmdcFghTeotqkD2itXi7SMBozdIlcslRqjboSJDg= @@ -108,12 +110,12 @@ github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQ github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= -github.com/cloudwego/eino v0.5.0-alpha.11 h1:KhjJ8JTAI/Ed5iCHWKUn1v4j1sDCxqV26HRoUQpSRFc= -github.com/cloudwego/eino v0.5.0-alpha.11/go.mod h1:S38tlNO4cNqFfGJKQSJZimxjzc9JDJKdf2eW3FEEfdc= -github.com/cloudwego/eino-ext/components/model/claude v0.1.0 h1:UZVwYzV7gOBCBKHGdAT2fZzm/+2TBEfDDYn713EvLF0= -github.com/cloudwego/eino-ext/components/model/claude v0.1.0/go.mod h1:lacy0WE3yKuOSxrhJQKqWAxn3LiUy/CJ91jU7nLDNNQ= -github.com/cloudwego/eino-ext/components/model/ollama v0.1.2 h1:WxJ+7oXnr3AhM6u4VbFF3L2ionxCrPfmLetx7V+zthw= -github.com/cloudwego/eino-ext/components/model/ollama v0.1.2/go.mod h1:OgGMCiR/G/RnOWaJvdK8pVSxAzoz2SlCqim43oFTuwo= +github.com/cloudwego/eino v0.7.13 h1:Ku7hY+83gGJJjf4On3UgqjC57UcA+DXe0tqAZiNDDew= +github.com/cloudwego/eino v0.7.13/go.mod h1:nA8Vacmuqv3pqKBQbTWENBLQ8MmGmPt/WqiyLeB8ohQ= +github.com/cloudwego/eino-ext/components/model/claude v0.1.12 h1:c66gFH9J5Ku2/v1f7jPwI9R4CYw5TiAlIVzsfzjsF1g= +github.com/cloudwego/eino-ext/components/model/claude v0.1.12/go.mod h1:a9oQkf4Ib+/VqjsLRdRETytt2m/C4fbcvfjPNu6nVAg= +github.com/cloudwego/eino-ext/components/model/ollama v0.1.8 h1:+BStnQlkRxWMV9jsPopLmmut2ARG88e9hDSMaDNAI/w= +github.com/cloudwego/eino-ext/components/model/ollama v0.1.8/go.mod h1:C3rf3yy2nEoXFP/CQJne4gbiu1pREKplHKmFlhuOzPE= github.com/cloudwego/eino-ext/components/model/openai v0.0.0-20250903035842-96774a3ec845 h1:nxflfiBwWNPoKS9X4SMhmT+si7rtYv+lQzIyPJik4DM= github.com/cloudwego/eino-ext/components/model/openai v0.0.0-20250903035842-96774a3ec845/go.mod h1:QQhCuQxuBAVWvu/YAZBhs/RsR76mUigw59Tl0kh04C8= github.com/cloudwego/eino-ext/libs/acl/openai v0.0.0-20250826113018-8c6f6358d4bb h1:RMslzyijc3bi9EkqCulpS0hZupTl1y/wayR3+fVRN/c= @@ -128,8 +130,10 @@ github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZ github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/eino-contrib/jsonschema v1.0.0 h1:dXxbhGNZuI3+xNi8x3JT8AGyoXz6Pff6mRvmpjVl5Ww= -github.com/eino-contrib/jsonschema v1.0.0/go.mod h1:cpnX4SyKjWjGC7iN2EbhxaTdLqGjCi0e9DxpLYxddD4= +github.com/eino-contrib/jsonschema v1.0.3 h1:2Kfsm1xlMV0ssY2nuxshS4AwbLFuqmPmzIjLVJ1Fsp0= +github.com/eino-contrib/jsonschema v1.0.3/go.mod h1:cpnX4SyKjWjGC7iN2EbhxaTdLqGjCi0e9DxpLYxddD4= +github.com/eino-contrib/ollama v0.1.0 h1:z1NaMdKW6X1ftP8g5xGGR5zDRPUtuTKFq35vBQgxsN4= +github.com/eino-contrib/ollama v0.1.0/go.mod h1:mYsQ7b3DeqY8bHPuD3MZJYTqkgyL6LoemxoP/B7ZNhA= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8P3k= @@ -143,8 +147,8 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/getkin/kin-openapi v0.120.0 h1:MqJcNJFrMDFNc07iwE8iFC5eT2k/NPUFDIpNeiZv8Jg= -github.com/getkin/kin-openapi v0.120.0/go.mod h1:PCWw/lfBrJY4HcdqE3jj+QFkaFK8ABoqo7PvqVhXXqw= +github.com/getkin/kin-openapi v0.131.0 h1:NO2UeHnFKRYhZ8wg6Nyh5Cq7dHk4suQQr72a4pMrDxE= +github.com/getkin/kin-openapi v0.131.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= @@ -194,8 +198,6 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E= github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= -github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY= -github.com/invopop/yaml v0.2.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -220,8 +222,8 @@ github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4 github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mark3labs/mcp-filesystem-server v0.11.1 h1:7uKIZRMaKWfgvtDj/uLAvo0+7Mwb8gxo5DJywhqFW88= github.com/mark3labs/mcp-filesystem-server v0.11.1/go.mod h1:xDqJizVYWZ5a31Mt4xuYbVku2AR/kT56H3O0SbpANoQ= -github.com/mark3labs/mcp-go v0.43.0 h1:lgiKcWMddh4sngbU+hoWOZ9iAe/qp/m851RQpj3Y7jA= -github.com/mark3labs/mcp-go v0.43.0/go.mod h1:YnJfOL382MIWDx1kMY+2zsRHU/q78dBg9aFb8W6Thdw= +github.com/mark3labs/mcp-go v0.44.0-beta.2 h1:gfUT0m77E4odfgiHkqV/E+MQVaQ06rbutW7Ln0JRkBA= +github.com/mark3labs/mcp-go v0.44.0-beta.2/go.mod h1:YnJfOL382MIWDx1kMY+2zsRHU/q78dBg9aFb8W6Thdw= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -262,8 +264,10 @@ github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= github.com/nikolalohinski/gonja v1.5.3 h1:GsA+EEaZDZPGJ8JtpeGN78jidhOlxeJROpqMT9fTj9c= github.com/nikolalohinski/gonja v1.5.3/go.mod h1:RmjwxNiXAEqcq1HeK5SSMmqFJvKOfTfXhkJv6YBtPa4= -github.com/ollama/ollama v0.11.8 h1:S7INjNBa7eGm87zfO/LWfP1ov8NMEuB6OOKgDGMAA9s= -github.com/ollama/ollama v0.11.8/go.mod h1:9+1//yWPsDE2u+l1a5mpaKrYw4VdnSsRU3ioq5BvMms= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -318,13 +322,15 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= @@ -361,6 +367,8 @@ github.com/yuin/goldmark-emoji v1.0.6 h1:QWfF2FYaXwL74tfGOW5izeiZepUDroDJfWubQI9 github.com/yuin/goldmark-emoji v1.0.6/go.mod h1:ukxJDKFpdFb5x0a5HqbdlcKtebh086iJpI31LTKmWuA= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 h1:q4XOmH/0opmeuJtPsbFNivyl7bCt7yRBbeEm2sC/XtQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0/go.mod h1:snMWehoOh2wsEwnvvwtDyFCxVeDAODenXHtn5vzrKjo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= @@ -375,8 +383,8 @@ go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJr go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c= -golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= +golang.org/x/arch v0.23.0 h1:lKF64A2jF6Zd8L0knGltUnegD62JMFBiCPBmQpToHhg= +golang.org/x/arch v0.23.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -385,8 +393,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= -golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0= golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -406,8 +414,10 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -416,8 +426,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -437,8 +447,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= -golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -450,8 +460,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= -golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -461,8 +471,10 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= -golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -472,6 +484,8 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/api v0.246.0 h1:H0ODDs5PnMZVZAEtdLMn2Ul2eQi7QNjqM2DIFp8TlTM= +google.golang.org/api v0.246.0/go.mod h1:dMVhVcylamkirHdzEBAIQWUCgqY885ivNeZYd7VAVr8= google.golang.org/genai v1.22.0 h1:5hrEhXXWJQZa3tdPocl4vQ/0w6myEAxdNns2Kmx0f4Y= google.golang.org/genai v1.22.0/go.mod h1:QPj5NGJw+3wEOHg+PrsWwJKvG6UC84ex5FR7qAYsN/M= google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 h1:pmJpJEvT846VzausCQ5d7KreSROcDqmO388w5YbnltA= @@ -491,6 +505,5 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/agent/agent.go b/internal/agent/agent.go index 8a0e3cfd..4e810a3d 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -4,6 +4,9 @@ import ( "context" "encoding/json" "fmt" + "strings" + "time" + tea "github.com/charmbracelet/bubbletea" "github.com/cloudwego/eino/components/model" "github.com/cloudwego/eino/components/tool" @@ -12,8 +15,6 @@ import ( "github.com/mark3labs/mcphost/internal/config" "github.com/mark3labs/mcphost/internal/models" "github.com/mark3labs/mcphost/internal/tools" - "strings" - "time" ) // AgentConfig holds configuration options for creating a new Agent. @@ -57,6 +58,10 @@ type StreamingResponseHandler func(content string) // It receives any text content that the model generates alongside tool calls. type ToolCallContentHandler func(content string) +// ToolApprovalHandler is a function type for handling user approval of tool calls. +// It receives the tool name and arguments, and returns true if the user approves. +type ToolApprovalHandler func(toolName, toolArgs string) (bool, error) + // Agent represents an AI agent with MCP tool integration and real-time tool call display. // It manages the interaction between an LLM and various tools through the MCP protocol. type Agent struct { @@ -128,17 +133,17 @@ type GenerateWithLoopResult struct { // It handles the conversation flow, executing tools as needed and invoking callbacks for various events. // This method does not support streaming responses; use GenerateWithLoopAndStreaming for streaming support. func (a *Agent) GenerateWithLoop(ctx context.Context, messages []*schema.Message, - onToolCall ToolCallHandler, onToolExecution ToolExecutionHandler, onToolResult ToolResultHandler, onResponse ResponseHandler, onToolCallContent ToolCallContentHandler) (*GenerateWithLoopResult, error) { - - return a.GenerateWithLoopAndStreaming(ctx, messages, onToolCall, onToolExecution, onToolResult, onResponse, onToolCallContent, nil) + onToolCall ToolCallHandler, onToolExecution ToolExecutionHandler, onToolResult ToolResultHandler, onResponse ResponseHandler, onToolCallContent ToolCallContentHandler, onToolApproval ToolApprovalHandler, +) (*GenerateWithLoopResult, error) { + return a.GenerateWithLoopAndStreaming(ctx, messages, onToolCall, onToolExecution, onToolResult, onResponse, onToolCallContent, nil, onToolApproval) } // GenerateWithLoopAndStreaming processes messages with a custom loop that displays tool calls in real-time and supports streaming callbacks. // It handles the conversation flow, executing tools as needed and invoking callbacks for various events including streaming chunks. // The onStreamingResponse callback is invoked for each content chunk during streaming if streaming is enabled. func (a *Agent) GenerateWithLoopAndStreaming(ctx context.Context, messages []*schema.Message, - onToolCall ToolCallHandler, onToolExecution ToolExecutionHandler, onToolResult ToolResultHandler, onResponse ResponseHandler, onToolCallContent ToolCallContentHandler, onStreamingResponse StreamingResponseHandler) (*GenerateWithLoopResult, error) { - + onToolCall ToolCallHandler, onToolExecution ToolExecutionHandler, onToolResult ToolResultHandler, onResponse ResponseHandler, onToolCallContent ToolCallContentHandler, onStreamingResponse StreamingResponseHandler, onToolApproval ToolApprovalHandler, +) (*GenerateWithLoopResult, error) { // Create a copy of messages to avoid modifying the original workingMessages := make([]*schema.Message, len(messages)) copy(workingMessages, messages) @@ -200,6 +205,19 @@ func (a *Agent) GenerateWithLoopAndStreaming(ctx context.Context, messages []*sc // Handle tool calls for _, toolCall := range response.ToolCalls { + if onToolApproval != nil { + approved, err := onToolApproval(toolCall.Function.Name, toolCall.Function.Arguments) + if err != nil { + return nil, err + } + if !approved { + rejectedMsg := fmt.Sprintf("The user did not allow tool call %s. Reason: User cancelled.", toolCall.Function.Name) + toolMessage := schema.ToolMessage(rejectedMsg, toolCall.ID) + workingMessages = append(workingMessages, toolMessage) + continue + } + } + // Notify about tool call if onToolCall != nil { onToolCall(toolCall.Function.Name, toolCall.Function.Arguments) diff --git a/internal/config/config.go b/internal/config/config.go index 55a32a76..c3e365e5 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -166,6 +166,7 @@ type Config struct { Stream *bool `json:"stream,omitempty" yaml:"stream,omitempty"` Theme any `json:"theme" yaml:"theme"` MarkdownTheme any `json:"markdown-theme" yaml:"markdown-theme"` + ApproveToolRun bool `json:"approve-tool-run" yaml:"approve-tool-run"` // Model generation parameters MaxTokens int `json:"max-tokens,omitempty" yaml:"max-tokens,omitempty"` diff --git a/internal/models/gemini/gemini.go b/internal/models/gemini/gemini.go index 0b1da68a..a1ef7f5d 100644 --- a/internal/models/gemini/gemini.go +++ b/internal/models/gemini/gemini.go @@ -11,6 +11,7 @@ import ( "github.com/cloudwego/eino/components" "github.com/cloudwego/eino/components/model" "github.com/cloudwego/eino/schema" + "github.com/eino-contrib/jsonschema" "github.com/getkin/kin-openapi/openapi3" "google.golang.org/genai" ) @@ -83,7 +84,7 @@ type Config struct { // ResponseSchema defines the structure for JSON responses // Optional. Used when you want structured output in JSON format - ResponseSchema *openapi3.Schema + ResponseSchema *jsonschema.Schema // EnableCodeExecution allows the model to execute code // Warning: Be cautious with code execution in production @@ -103,7 +104,7 @@ type options struct { // TopK limits the number of tokens to sample from TopK *int32 // ResponseSchema defines the expected JSON structure for responses - ResponseSchema *openapi3.Schema + ResponseSchema *jsonschema.Schema } // ChatModel implements the Gemini chat model for the eino framework. @@ -124,7 +125,7 @@ type ChatModel struct { // topK limits token sampling topK *int32 // responseSchema for structured JSON output - responseSchema *openapi3.Schema + responseSchema *jsonschema.Schema // tools converted to Gemini format tools []*genai.Tool // origTools stores the original tool definitions @@ -448,7 +449,7 @@ func (cm *ChatModel) buildGenerateConfig(opts ...model.Option) (*genai.GenerateC // Set response schema for JSON mode if geminiOptions.ResponseSchema != nil { - gSchema, err := cm.convertOpenAPISchema(geminiOptions.ResponseSchema) + gSchema, err := cm.convertJSONSchema(geminiOptions.ResponseSchema) if err != nil { return nil, nil, fmt.Errorf("convert response schema failed: %w", err) } @@ -466,12 +467,12 @@ func (cm *ChatModel) convertToGeminiTools(tools []*schema.ToolInfo) ([]*genai.To var functionDeclarations []*genai.FunctionDeclaration for _, tool := range tools { - openSchema, err := tool.ToOpenAPIV3() + openSchema, err := tool.ToJSONSchema() if err != nil { return nil, fmt.Errorf("get open schema failed: %w", err) } - gSchema, err := cm.convertOpenAPISchema(openSchema) + gSchema, err := cm.convertJSONSchema(openSchema) if err != nil { return nil, fmt.Errorf("convert open schema failed: %w", err) } @@ -487,7 +488,7 @@ func (cm *ChatModel) convertToGeminiTools(tools []*schema.ToolInfo) ([]*genai.To return []*genai.Tool{{FunctionDeclarations: functionDeclarations}}, nil } -func (cm *ChatModel) convertOpenAPISchema(schema *openapi3.Schema) (*genai.Schema, error) { +func (cm *ChatModel) convertJSONSchema(schema *jsonschema.Schema) (*genai.Schema, error) { if schema == nil { return nil, nil } @@ -501,15 +502,12 @@ func (cm *ChatModel) convertOpenAPISchema(schema *openapi3.Schema) (*genai.Schem result.Type = genai.TypeObject if schema.Properties != nil { properties := make(map[string]*genai.Schema) - for name, prop := range schema.Properties { - if prop == nil || prop.Value == nil { - continue - } - propSchema, err := cm.convertOpenAPISchema(prop.Value) + for pair := schema.Properties.Oldest(); pair != nil; pair = pair.Next() { + propSchema, err := cm.convertJSONSchema(pair.Value) if err != nil { return nil, err } - properties[name] = propSchema + properties[pair.Key] = propSchema } result.Properties = properties } @@ -518,8 +516,8 @@ func (cm *ChatModel) convertOpenAPISchema(schema *openapi3.Schema) (*genai.Schem } case openapi3.TypeArray: result.Type = genai.TypeArray - if schema.Items != nil && schema.Items.Value != nil { - itemSchema, err := cm.convertOpenAPISchema(schema.Items.Value) + if schema.Items != nil { + itemSchema, err := cm.convertJSONSchema(schema.Items) if err != nil { return nil, err } diff --git a/internal/models/models_data.go b/internal/models/models_data.go index a8eb379e..20320f04 100644 --- a/internal/models/models_data.go +++ b/internal/models/models_data.go @@ -1,2527 +1,116 @@ // Code generated by go generate; DO NOT EDIT. -// Generated at: 2025-10-16T16:35:39+03:00 +// Generated at: 2026-01-09T17:30:36+03:00 package models -// ModelInfo represents information about a specific model. -// It contains comprehensive metadata about a model's capabilities, -// pricing, and limitations sourced from models.dev. +// ModelInfo represents information about a specific model type ModelInfo struct { - // ID is the unique identifier for the model - // Example: "claude-3-sonnet-20240620" or "gpt-4" - ID string - - // Name is the human-readable name of the model - // Example: "Claude 3 Sonnet" or "GPT-4" - Name string - - // Attachment indicates whether the model supports file attachments - Attachment bool - - // Reasoning indicates whether this is a reasoning/chain-of-thought model - // Example: OpenAI's o1 models have this set to true - Reasoning bool - - // Temperature indicates whether the model supports temperature parameter + ID string + Name string + Attachment bool + Reasoning bool Temperature bool - - // Cost contains the pricing information for input/output tokens - Cost Cost - - // Limit contains the context window and output token limits - Limit Limit + Cost Cost + Limit Limit } -// Cost represents the pricing information for a model. -// Prices are typically in USD per million tokens. +// Cost represents the pricing information for a model type Cost struct { - // Input is the cost per million input tokens - Input float64 - - // Output is the cost per million output tokens - Output float64 - - // CacheRead is the cost per million cached read tokens (optional) - // Only applicable for models that support prompt caching - CacheRead *float64 - - // CacheWrite is the cost per million cached write tokens (optional) - // Only applicable for models that support prompt caching + Input float64 + Output float64 + CacheRead *float64 CacheWrite *float64 } -// Limit represents the context and output limits for a model. -// These define the maximum number of tokens the model can process -// and generate in a single interaction. +// Limit represents the context and output limits for a model type Limit struct { - // Context is the maximum number of input tokens (context window size) Context int - - // Output is the maximum number of output tokens that can be generated - Output int + Output int } -// ProviderInfo represents information about a model provider. -// It contains metadata about the provider and all models it offers. +// ProviderInfo represents information about a model provider type ProviderInfo struct { - // ID is the unique identifier for the provider - // Example: "anthropic", "openai", "google" - ID string - - // Env lists the environment variables checked for API credentials - // Example: ["ANTHROPIC_API_KEY"] or ["OPENAI_API_KEY"] - Env []string - - // NPM is the NPM package name used by the provider (for reference) - NPM string - - // Name is the human-readable name of the provider - // Example: "Anthropic", "OpenAI", "Google" - Name string - - // Models maps model IDs to their detailed information + ID string + Env []string + NPM string + Name string Models map[string]ModelInfo } -// GetModelsData returns the static models data from models.dev. -// This data is automatically generated from the models.dev API -// and provides comprehensive information about all supported -// LLM providers and their models. -// -// The data includes: -// - Provider information (ID, name, environment variables) -// - Model capabilities (reasoning, attachments, temperature support) -// - Pricing information (input/output costs, cache costs) -// - Token limits (context window, max output tokens) -// -// Returns: -// - map[string]ProviderInfo: A map of provider IDs to their information +// GetModelsData returns the static models data from models.dev func GetModelsData() map[string]ProviderInfo { return map[string]ProviderInfo{ - "alibaba": { - ID: "alibaba", - Env: []string{"DASHSCOPE_API_KEY"}, + "abacus": { + ID: "abacus", + Env: []string{"ABACUS_API_KEY" }, NPM: "@ai-sdk/openai-compatible", - Name: "Alibaba", + Name: "Abacus", Models: map[string]ModelInfo{ - "qvq-max": { - ID: "qvq-max", - Name: "QVQ Max", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.2, - Output: 4.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-flash": { - ID: "qwen-flash", - Name: "Qwen Flash", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 32768, - }, - }, - "qwen-max": { - ID: "qwen-max", - Name: "Qwen Max", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.6, - Output: 6.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "qwen-mt-plus": { - ID: "qwen-mt-plus", - Name: "Qwen-MT Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.46, - Output: 7.37, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 8192, - }, - }, - "qwen-mt-turbo": { - ID: "qwen-mt-turbo", - Name: "Qwen-MT Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.16, - Output: 0.49, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 8192, - }, - }, - "qwen-omni-turbo": { - ID: "qwen-omni-turbo", - Name: "Qwen-Omni Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.07, - Output: 0.27, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 2048, - }, - }, - "qwen-omni-turbo-realtime": { - ID: "qwen-omni-turbo-realtime", - Name: "Qwen-Omni Turbo Realtime", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.27, - Output: 1.07, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 2048, - }, - }, - "qwen-plus": { - ID: "qwen-plus", - Name: "Qwen Plus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 32768, - }, - }, - "qwen-plus-character-ja": { - ID: "qwen-plus-character-ja", - Name: "Qwen Plus Character (Japanese)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 1.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 512, - }, - }, - "qwen-turbo": { - ID: "qwen-turbo", - Name: "Qwen Turbo", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 16384, - }, - }, - "qwen-vl-max": { - ID: "qwen-vl-max", - Name: "Qwen-VL Max", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 3.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-vl-ocr": { - ID: "qwen-vl-ocr", - Name: "Qwen-VL OCR", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.72, - Output: 0.72, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 34096, - Output: 4096, - }, - }, - "qwen-vl-plus": { - ID: "qwen-vl-plus", - Name: "Qwen-VL Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.21, - Output: 0.63, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-14b-instruct": { - ID: "qwen2-5-14b-instruct", - Name: "Qwen2.5 14B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.35, - Output: 1.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-32b-instruct": { - ID: "qwen2-5-32b-instruct", - Name: "Qwen2.5 32B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-72b-instruct": { - ID: "qwen2-5-72b-instruct", - Name: "Qwen2.5 72B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.4, - Output: 5.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-7b-instruct": { - ID: "qwen2-5-7b-instruct", - Name: "Qwen2.5 7B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.175, - Output: 0.7, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-omni-7b": { - ID: "qwen2-5-omni-7b", - Name: "Qwen2.5-Omni 7B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 2048, - }, - }, - "qwen2-5-vl-72b-instruct": { - ID: "qwen2-5-vl-72b-instruct", - Name: "Qwen2.5-VL 72B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.8, - Output: 8.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-vl-7b-instruct": { - ID: "qwen2-5-vl-7b-instruct", - Name: "Qwen2.5-VL 7B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.35, - Output: 1.05, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-14b": { - ID: "qwen3-14b", - Name: "Qwen3 14B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.35, - Output: 1.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-235b-a22b": { - ID: "qwen3-235b-a22b", - Name: "Qwen3 235B-A22B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "qwen3-32b": { - ID: "qwen3-32b", - Name: "Qwen3 32B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "qwen3-8b": { - ID: "qwen3-8b", - Name: "Qwen3 8B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.18, - Output: 0.7, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-asr-flash": { - ID: "qwen3-asr-flash", - Name: "Qwen3-ASR Flash", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.035, - Output: 0.035, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 53248, - Output: 4096, - }, - }, - "qwen3-coder-30b-a3b-instruct": { - ID: "qwen3-coder-30b-a3b-instruct", - Name: "Qwen3-Coder 30B-A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.45, - Output: 2.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "qwen3-coder-480b-a35b-instruct": { - ID: "qwen3-coder-480b-a35b-instruct", - Name: "Qwen3-Coder 480B-A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.5, - Output: 7.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "qwen3-coder-flash": { - ID: "qwen3-coder-flash", - Name: "Qwen3 Coder Flash", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 1.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 65536, - }, - }, - "qwen3-coder-plus": { - ID: "qwen3-coder-plus", - Name: "Qwen3 Coder Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "qwen3-livetranslate-flash-realtime": { - ID: "qwen3-livetranslate-flash-realtime", - Name: "Qwen3-LiveTranslate Flash Realtime", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 10, - Output: 10, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 53248, - Output: 4096, - }, - }, - "qwen3-max": { - ID: "qwen3-max", - Name: "Qwen3 Max", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "qwen3-next-80b-a3b-instruct": { - ID: "qwen3-next-80b-a3b-instruct", - Name: "Qwen3-Next 80B-A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-next-80b-a3b-thinking": { - ID: "qwen3-next-80b-a3b-thinking", - Name: "Qwen3-Next 80B-A3B (Thinking)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-omni-flash": { - ID: "qwen3-omni-flash", - Name: "Qwen3-Omni Flash", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.43, - Output: 1.66, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 16384, - }, - }, - "qwen3-omni-flash-realtime": { - ID: "qwen3-omni-flash-realtime", - Name: "Qwen3-Omni Flash Realtime", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.52, - Output: 1.99, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 16384, - }, - }, - "qwen3-vl-235b-a22b": { - ID: "qwen3-vl-235b-a22b", - Name: "Qwen3-VL 235B-A22B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-vl-30b-a3b": { - ID: "qwen3-vl-30b-a3b", - Name: "Qwen3-VL 30B-A3B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-vl-plus": { - ID: "qwen3-vl-plus", - Name: "Qwen3-VL Plus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 1.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 32768, - }, - }, - "qwq-plus": { - ID: "qwq-plus", - Name: "QwQ Plus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 2.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - }, - }, - "alibaba-cn": { - ID: "alibaba-cn", - Env: []string{"DASHSCOPE_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Alibaba (China)", - Models: map[string]ModelInfo{ - "deepseek-r1": { - ID: "deepseek-r1", - Name: "DeepSeek R1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 2.294, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "deepseek-r1-0528": { - ID: "deepseek-r1-0528", - Name: "DeepSeek R1 0528", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 2.294, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "deepseek-r1-distill-llama-70b": { - ID: "deepseek-r1-distill-llama-70b", - Name: "DeepSeek R1 Distill Llama 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.861, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 16384, - }, - }, - "deepseek-r1-distill-llama-8b": { - ID: "deepseek-r1-distill-llama-8b", - Name: "DeepSeek R1 Distill Llama 8B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 16384, - }, - }, - "deepseek-r1-distill-qwen-1-5b": { - ID: "deepseek-r1-distill-qwen-1-5b", - Name: "DeepSeek R1 Distill Qwen 1.5B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 16384, - }, - }, - "deepseek-r1-distill-qwen-14b": { - ID: "deepseek-r1-distill-qwen-14b", - Name: "DeepSeek R1 Distill Qwen 14B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.431, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 16384, - }, - }, - "deepseek-r1-distill-qwen-32b": { - ID: "deepseek-r1-distill-qwen-32b", - Name: "DeepSeek R1 Distill Qwen 32B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.861, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 16384, - }, - }, - "deepseek-r1-distill-qwen-7b": { - ID: "deepseek-r1-distill-qwen-7b", - Name: "DeepSeek R1 Distill Qwen 7B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.072, - Output: 0.144, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 16384, - }, - }, - "deepseek-v3": { - ID: "deepseek-v3", - Name: "DeepSeek V3", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 1.147, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - "deepseek-v3-1": { - ID: "deepseek-v3-1", - Name: "DeepSeek V3.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 1.721, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 65536, - }, - }, - "deepseek-v3-2-exp": { - ID: "deepseek-v3-2-exp", - Name: "DeepSeek V3.2 Exp", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.431, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 65536, - }, - }, - "moonshot-kimi-k2-instruct": { - ID: "moonshot-kimi-k2-instruct", - Name: "Moonshot Kimi K2 Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 2.294, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "qvq-max": { - ID: "qvq-max", - Name: "QVQ Max", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.147, - Output: 4.588, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-deep-research": { - ID: "qwen-deep-research", - Name: "Qwen Deep Research", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 7.742, - Output: 23.367, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 32768, - }, - }, - "qwen-doc-turbo": { - ID: "qwen-doc-turbo", - Name: "Qwen Doc Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.087, - Output: 0.144, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-flash": { - ID: "qwen-flash", - Name: "Qwen Flash", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.022, - Output: 0.216, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 32768, - }, - }, - "qwen-long": { - ID: "qwen-long", - Name: "Qwen Long", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.072, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 10000000, - Output: 8192, - }, - }, - "qwen-math-plus": { - ID: "qwen-math-plus", - Name: "Qwen Math Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 1.721, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 3072, - }, - }, - "qwen-math-turbo": { - ID: "qwen-math-turbo", - Name: "Qwen Math Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.861, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 3072, - }, - }, - "qwen-max": { - ID: "qwen-max", - Name: "Qwen Max", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.345, - Output: 1.377, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-mt-plus": { - ID: "qwen-mt-plus", - Name: "Qwen-MT Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.259, - Output: 0.775, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 8192, - }, - }, - "qwen-mt-turbo": { - ID: "qwen-mt-turbo", - Name: "Qwen-MT Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.101, - Output: 0.28, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 8192, - }, - }, - "qwen-omni-turbo": { - ID: "qwen-omni-turbo", - Name: "Qwen-Omni Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.058, - Output: 0.23, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 2048, - }, - }, - "qwen-omni-turbo-realtime": { - ID: "qwen-omni-turbo-realtime", - Name: "Qwen-Omni Turbo Realtime", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.23, - Output: 0.918, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 2048, - }, - }, - "qwen-plus": { - ID: "qwen-plus", - Name: "Qwen Plus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.115, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 32768, - }, - }, - "qwen-plus-character": { - ID: "qwen-plus-character", - Name: "Qwen Plus Character", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.115, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 4096, - }, - }, - "qwen-turbo": { - ID: "qwen-turbo", - Name: "Qwen Turbo", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.044, - Output: 0.087, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 16384, - }, - }, - "qwen-vl-max": { - ID: "qwen-vl-max", - Name: "Qwen-VL Max", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.23, - Output: 0.574, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-vl-ocr": { - ID: "qwen-vl-ocr", - Name: "Qwen-VL OCR", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.717, - Output: 0.717, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 34096, - Output: 4096, - }, - }, - "qwen-vl-plus": { - ID: "qwen-vl-plus", - Name: "Qwen-VL Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.115, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-14b-instruct": { - ID: "qwen2-5-14b-instruct", - Name: "Qwen2.5 14B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.431, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-32b-instruct": { - ID: "qwen2-5-32b-instruct", - Name: "Qwen2.5 32B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.861, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-72b-instruct": { - ID: "qwen2-5-72b-instruct", - Name: "Qwen2.5 72B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 1.721, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-7b-instruct": { - ID: "qwen2-5-7b-instruct", - Name: "Qwen2.5 7B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.072, - Output: 0.144, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-coder-32b-instruct": { - ID: "qwen2-5-coder-32b-instruct", - Name: "Qwen2.5-Coder 32B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.861, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-coder-7b-instruct": { - ID: "qwen2-5-coder-7b-instruct", - Name: "Qwen2.5-Coder 7B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-math-72b-instruct": { - ID: "qwen2-5-math-72b-instruct", - Name: "Qwen2.5-Math 72B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.574, - Output: 1.721, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 3072, - }, - }, - "qwen2-5-math-7b-instruct": { - ID: "qwen2-5-math-7b-instruct", - Name: "Qwen2.5-Math 7B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 3072, - }, - }, - "qwen2-5-omni-7b": { - ID: "qwen2-5-omni-7b", - Name: "Qwen2.5-Omni 7B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.087, - Output: 0.345, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 2048, - }, - }, - "qwen2-5-vl-72b-instruct": { - ID: "qwen2-5-vl-72b-instruct", - Name: "Qwen2.5-VL 72B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.294, - Output: 6.881, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen2-5-vl-7b-instruct": { - ID: "qwen2-5-vl-7b-instruct", - Name: "Qwen2.5-VL 7B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 0.717, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-14b": { - ID: "qwen3-14b", - Name: "Qwen3 14B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.574, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-235b-a22b": { - ID: "qwen3-235b-a22b", - Name: "Qwen3 235B-A22B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 1.147, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "qwen3-32b": { - ID: "qwen3-32b", - Name: "Qwen3 32B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.287, - Output: 1.147, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "qwen3-8b": { - ID: "qwen3-8b", - Name: "Qwen3 8B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.072, - Output: 0.287, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-asr-flash": { - ID: "qwen3-asr-flash", - Name: "Qwen3-ASR Flash", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.032, - Output: 0.032, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 53248, - Output: 4096, - }, - }, - "qwen3-coder-30b-a3b-instruct": { - ID: "qwen3-coder-30b-a3b-instruct", - Name: "Qwen3-Coder 30B-A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.216, - Output: 0.861, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "qwen3-coder-480b-a35b-instruct": { - ID: "qwen3-coder-480b-a35b-instruct", - Name: "Qwen3-Coder 480B-A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.861, - Output: 3.441, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "qwen3-coder-flash": { - ID: "qwen3-coder-flash", - Name: "Qwen3 Coder Flash", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.574, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 65536, - }, - }, - "qwen3-coder-plus": { - ID: "qwen3-coder-plus", - Name: "Qwen3 Coder Plus", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "qwen3-max": { - ID: "qwen3-max", - Name: "Qwen3 Max", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.861, - Output: 3.441, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "qwen3-next-80b-a3b-instruct": { - ID: "qwen3-next-80b-a3b-instruct", - Name: "Qwen3-Next 80B-A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 0.574, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-next-80b-a3b-thinking": { - ID: "qwen3-next-80b-a3b-thinking", - Name: "Qwen3-Next 80B-A3B (Thinking)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.144, - Output: 1.434, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-omni-flash": { - ID: "qwen3-omni-flash", - Name: "Qwen3-Omni Flash", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.058, - Output: 0.23, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 16384, - }, - }, - "qwen3-omni-flash-realtime": { - ID: "qwen3-omni-flash-realtime", - Name: "Qwen3-Omni Flash Realtime", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.23, - Output: 0.918, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 16384, - }, - }, - "qwen3-vl-235b-a22b": { - ID: "qwen3-vl-235b-a22b", - Name: "Qwen3-VL 235B-A22B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.286705, - Output: 1.14682, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-vl-30b-a3b": { - ID: "qwen3-vl-30b-a3b", - Name: "Qwen3-VL 30B-A3B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.108, - Output: 0.431, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen3-vl-plus": { - ID: "qwen3-vl-plus", - Name: "Qwen3-VL Plus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.143353, - Output: 1.433525, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 32768, - }, - }, - "qwq-32b": { - ID: "qwq-32b", + "Qwen-QwQ-32B": { + ID: "Qwen-QwQ-32B", Name: "QwQ 32B", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.287, - Output: 0.861, - CacheRead: nil, + Input: 0.4, + Output: 0.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwq-plus": { - ID: "qwq-plus", - Name: "QwQ Plus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.23, - Output: 0.574, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "tongyi-intent-detect-v3": { - ID: "tongyi-intent-detect-v3", - Name: "Tongyi Intent Detect V3", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.058, - Output: 0.144, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 1024, - }, - }, - }, - }, - "amazon-bedrock": { - ID: "amazon-bedrock", - Env: []string{"AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION"}, - NPM: "@ai-sdk/amazon-bedrock", - Name: "Amazon Bedrock", - Models: map[string]ModelInfo{ - "ai21.jamba-1-5-large-v1:0": { - ID: "ai21.jamba-1-5-large-v1:0", - Name: "Jamba 1.5 Large", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 4096, - }, - }, - "ai21.jamba-1-5-mini-v1:0": { - ID: "ai21.jamba-1-5-mini-v1:0", - Name: "Jamba 1.5 Mini", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 4096, - }, - }, - "amazon.nova-lite-v1:0": { - ID: "amazon.nova-lite-v1:0", - Name: "Nova Lite", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.06, - Output: 0.24, - CacheRead: &[]float64{0.015}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 300000, - Output: 8192, - }, - }, - "amazon.nova-micro-v1:0": { - ID: "amazon.nova-micro-v1:0", - Name: "Nova Micro", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.035, - Output: 0.14, - CacheRead: &[]float64{0.00875}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "amazon.nova-premier-v1:0": { - ID: "amazon.nova-premier-v1:0", - Name: "Nova Premier", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 2.5, - Output: 12.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 16384, - }, - }, - "amazon.nova-pro-v1:0": { - ID: "amazon.nova-pro-v1:0", - Name: "Nova Pro", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 3.2, - CacheRead: &[]float64{0.2}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 300000, - Output: 8192, - }, - }, - "anthropic.claude-3-5-haiku-20241022-v1:0": { - ID: "anthropic.claude-3-5-haiku-20241022-v1:0", - Name: "Claude Haiku 3.5", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], - CacheWrite: &[]float64{1}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "anthropic.claude-3-5-sonnet-20240620-v1:0": { - ID: "anthropic.claude-3-5-sonnet-20240620-v1:0", - Name: "Claude Sonnet 3.5", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "anthropic.claude-3-5-sonnet-20241022-v2:0": { - ID: "anthropic.claude-3-5-sonnet-20241022-v2:0", - Name: "Claude Sonnet 3.5 v2", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "anthropic.claude-3-7-sonnet-20250219-v1:0": { - ID: "anthropic.claude-3-7-sonnet-20250219-v1:0", - Name: "Claude Sonnet 3.7", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "anthropic.claude-3-haiku-20240307-v1:0": { - ID: "anthropic.claude-3-haiku-20240307-v1:0", - Name: "Claude Haiku 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "anthropic.claude-3-opus-20240229-v1:0": { - ID: "anthropic.claude-3-opus-20240229-v1:0", - Name: "Claude Opus 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "anthropic.claude-3-sonnet-20240229-v1:0": { - ID: "anthropic.claude-3-sonnet-20240229-v1:0", - Name: "Claude Sonnet 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "anthropic.claude-haiku-4-5-20251001-v1:0": { - ID: "anthropic.claude-haiku-4-5-20251001-v1:0", - Name: "Claude Haiku 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: &[]float64{0.1}[0], - CacheWrite: &[]float64{1.25}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic.claude-instant-v1": { - ID: "anthropic.claude-instant-v1", - Name: "Claude Instant", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 2.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 100000, - Output: 4096, - }, - }, - "anthropic.claude-opus-4-1-20250805-v1:0": { - ID: "anthropic.claude-opus-4-1-20250805-v1:0", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "anthropic.claude-opus-4-20250514-v1:0": { - ID: "anthropic.claude-opus-4-20250514-v1:0", - Name: "Claude Opus 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "anthropic.claude-sonnet-4-20250514-v1:0": { - ID: "anthropic.claude-sonnet-4-20250514-v1:0", - Name: "Claude Sonnet 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic.claude-sonnet-4-5-20250929-v1:0": { - ID: "anthropic.claude-sonnet-4-5-20250929-v1:0", - Name: "Claude Sonnet 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic.claude-v2": { - ID: "anthropic.claude-v2", - Name: "Claude 2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 8, - Output: 24, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 100000, - Output: 4096, - }, - }, - "anthropic.claude-v2:1": { - ID: "anthropic.claude-v2:1", - Name: "Claude 2.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 8, - Output: 24, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "cohere.command-light-text-v14": { - ID: "cohere.command-light-text-v14", - Name: "Command Light", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "cohere.command-r-plus-v1:0": { - ID: "cohere.command-r-plus-v1:0", - Name: "Command R+", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "cohere.command-r-v1:0": { - ID: "cohere.command-r-v1:0", - Name: "Command R", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 1.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "cohere.command-text-v14": { - ID: "cohere.command-text-v14", - Name: "Command", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "deepseek.r1-v1:0": { - ID: "deepseek.r1-v1:0", - Name: "DeepSeek-R1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.35, - Output: 5.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, + Context: 32768, Output: 32768, }, }, - "meta.llama3-1-70b-instruct-v1:0": { - ID: "meta.llama3-1-70b-instruct-v1:0", - Name: "Llama 3.1 70B Instruct", + "Qwen-Qwen2.5-72B-Instruct": { + ID: "Qwen-Qwen2.5-72B-Instruct", + Name: "Qwen 2.5 72B Instruct", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.72, - Output: 0.72, - CacheRead: nil, + Input: 0.11, + Output: 0.38, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 4096, - }, - }, - "meta.llama3-1-8b-instruct-v1:0": { - ID: "meta.llama3-1-8b-instruct-v1:0", - Name: "Llama 3.1 8B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.22, - Output: 0.22, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "meta.llama3-2-11b-instruct-v1:0": { - ID: "meta.llama3-2-11b-instruct-v1:0", - Name: "Llama 3.2 11B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.16, - Output: 0.16, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "meta.llama3-2-1b-instruct-v1:0": { - ID: "meta.llama3-2-1b-instruct-v1:0", - Name: "Llama 3.2 1B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131000, - Output: 4096, - }, - }, - "meta.llama3-2-3b-instruct-v1:0": { - ID: "meta.llama3-2-3b-instruct-v1:0", - Name: "Llama 3.2 3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131000, - Output: 4096, - }, - }, - "meta.llama3-2-90b-instruct-v1:0": { - ID: "meta.llama3-2-90b-instruct-v1:0", - Name: "Llama 3.2 90B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.72, - Output: 0.72, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "meta.llama3-3-70b-instruct-v1:0": { - ID: "meta.llama3-3-70b-instruct-v1:0", - Name: "Llama 3.3 70B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.72, - Output: 0.72, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "meta.llama3-70b-instruct-v1:0": { - ID: "meta.llama3-70b-instruct-v1:0", - Name: "Llama 3 70B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.65, - Output: 3.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 2048, - }, - }, - "meta.llama3-8b-instruct-v1:0": { - ID: "meta.llama3-8b-instruct-v1:0", - Name: "Llama 3 8B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 2048, - }, - }, - "meta.llama4-maverick-17b-instruct-v1:0": { - ID: "meta.llama4-maverick-17b-instruct-v1:0", - Name: "Llama 4 Maverick 17B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.24, - Output: 0.97, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 16384, - }, - }, - "meta.llama4-scout-17b-instruct-v1:0": { - ID: "meta.llama4-scout-17b-instruct-v1:0", - Name: "Llama 4 Scout 17B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.17, - Output: 0.66, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 3500000, - Output: 16384, - }, - }, - }, - }, - "anthropic": { - ID: "anthropic", - Env: []string{"ANTHROPIC_API_KEY"}, - NPM: "@ai-sdk/anthropic", - Name: "Anthropic", - Models: map[string]ModelInfo{ - "claude-3-5-haiku-20241022": { - ID: "claude-3-5-haiku-20241022", - Name: "Claude Haiku 3.5", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], - CacheWrite: &[]float64{1}[0], - }, - Limit: Limit{ - Context: 200000, Output: 8192, }, }, - "claude-3-5-haiku-latest": { - ID: "claude-3-5-haiku-latest", - Name: "Claude Haiku 3.5", - Attachment: true, - Reasoning: false, + "Qwen-Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen-Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen3 235B A22B Instruct", + Attachment: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], - CacheWrite: &[]float64{1}[0], + Input: 0.13, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ - Context: 200000, + Context: 262144, Output: 8192, }, }, - "claude-3-5-sonnet-20240620": { - ID: "claude-3-5-sonnet-20240620", - Name: "Claude Sonnet 3.5", - Attachment: true, - Reasoning: false, + "Qwen-Qwen3-32B": { + ID: "Qwen-Qwen3-32B", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 0.09, + Output: 0.29, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "claude-3-5-sonnet-20241022": { - ID: "claude-3-5-sonnet-20241022", - Name: "Claude Sonnet 3.5 v2", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, + Context: 128000, Output: 8192, }, }, @@ -2532,95 +121,10 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "claude-3-7-sonnet-latest": { - ID: "claude-3-7-sonnet-latest", - Name: "Claude Sonnet 3.7", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "claude-3-haiku-20240307": { - ID: "claude-3-haiku-20240307", - Name: "Claude Haiku 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1.25, - CacheRead: &[]float64{0.03}[0], - CacheWrite: &[]float64{0.3}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "claude-3-opus-20240229": { - ID: "claude-3-opus-20240229", - Name: "Claude Opus 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "claude-3-sonnet-20240229": { - ID: "claude-3-sonnet-20240229", - Name: "Claude Sonnet 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{0.3}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "claude-haiku-4-5": { - ID: "claude-haiku-4-5", - Name: "Claude Haiku 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: &[]float64{0.1}[0], - CacheWrite: &[]float64{1.25}[0], + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, @@ -2634,50 +138,16 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: &[]float64{0.1}[0], - CacheWrite: &[]float64{1.25}[0], + Input: 1, + Output: 5, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, Output: 64000, }, }, - "claude-opus-4-0": { - ID: "claude-opus-4-0", - Name: "Claude Opus 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "claude-opus-4-1": { - ID: "claude-opus-4-1", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, "claude-opus-4-1-20250805": { ID: "claude-opus-4-1-20250805", Name: "Claude Opus 4.1", @@ -2685,10 +155,10 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], + Input: 15, + Output: 75, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, @@ -2702,27 +172,27 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], + Input: 15, + Output: 75, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, Output: 32000, }, }, - "claude-sonnet-4-0": { - ID: "claude-sonnet-4-0", - Name: "Claude Sonnet 4", + "claude-opus-4-5-20251101": { + ID: "claude-opus-4-5-20251101", + Name: "Claude Opus 4.5", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 5, + Output: 25, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, @@ -2736,27 +206,10 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "claude-sonnet-4-5": { - ID: "claude-sonnet-4-5", - Name: "Claude Sonnet 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, @@ -2770,192 +223,184 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, Output: 64000, }, }, - }, - }, - "azure": { - ID: "azure", - Env: []string{"AZURE_RESOURCE_NAME", "AZURE_API_KEY"}, - NPM: "@ai-sdk/azure", - Name: "Azure", - Models: map[string]ModelInfo{ - "codex-mini": { - ID: "codex-mini", - Name: "Codex Mini", - Attachment: true, + "deepseek-ai-DeepSeek-R1": { + ID: "deepseek-ai-DeepSeek-R1", + Name: "DeepSeek R1", + Attachment: false, Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.5, - Output: 6, - CacheRead: &[]float64{0.375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "gpt-3.5-turbo-0125": { - ID: "gpt-3.5-turbo-0125", - Name: "GPT-3.5 Turbo 0125", - Attachment: false, - Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.5, - Output: 1.5, - CacheRead: nil, + Input: 3, + Output: 7, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 16384, - Output: 16384, - }, - }, - "gpt-3.5-turbo-0301": { - ID: "gpt-3.5-turbo-0301", - Name: "GPT-3.5 Turbo 0301", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "gpt-3.5-turbo-0613": { - ID: "gpt-3.5-turbo-0613", - Name: "GPT-3.5 Turbo 0613", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 16384, - }, - }, - "gpt-3.5-turbo-1106": { - ID: "gpt-3.5-turbo-1106", - Name: "GPT-3.5 Turbo 1106", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 16384, - }, - }, - "gpt-3.5-turbo-instruct": { - ID: "gpt-3.5-turbo-instruct", - Name: "GPT-3.5 Turbo Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "gpt-4": { - ID: "gpt-4", - Name: "GPT-4", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 60, - Output: 120, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, + Context: 128000, Output: 8192, }, }, - "gpt-4-32k": { - ID: "gpt-4-32k", - Name: "GPT-4 32K", + "deepseek-ai-DeepSeek-V3.1-Terminus": { + ID: "deepseek-ai-DeepSeek-V3.1-Terminus", + Name: "DeepSeek V3.1 Terminus", Attachment: false, - Reasoning: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 60, - Output: 120, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "gpt-4-turbo": { - ID: "gpt-4-turbo", - Name: "GPT-4 Turbo", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 10, - Output: 30, - CacheRead: nil, + Input: 0.27, + Output: 1, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 4096, + Output: 8192, }, }, - "gpt-4-turbo-vision": { - ID: "gpt-4-turbo-vision", - Name: "GPT-4 Turbo Vision", - Attachment: true, - Reasoning: false, + "deepseek-ai-DeepSeek-V3.2": { + ID: "deepseek-ai-DeepSeek-V3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 10, - Output: 30, - CacheRead: nil, + Input: 0.27, + Output: 0.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 4096, + Output: 8192, + }, + }, + "deepseek-deepseek-v3.1": { + ID: "deepseek-deepseek-v3.1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 1.66, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "gemini-2.0-flash-001": { + ID: "gemini-2.0-flash-001", + Name: "Gemini 2.0 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 8192, + }, + }, + "gemini-2.0-pro-exp-02-05": { + ID: "gemini-2.0-pro-exp-02-05", + Name: "Gemini 2.0 Pro Exp", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 8192, + }, + }, + "gemini-2.5-flash": { + ID: "gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-flash-preview": { + ID: "gemini-3-flash-preview", + Name: "Gemini 3 Flash Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 65000, }, }, "gpt-4.1": { @@ -2965,9 +410,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: false, Temperature: true, Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], + Input: 2, + Output: 8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -2977,14 +422,14 @@ func GetModelsData() map[string]ProviderInfo { }, "gpt-4.1-mini": { ID: "gpt-4.1-mini", - Name: "GPT-4.1 mini", + Name: "GPT-4.1 Mini", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.4, - Output: 1.6, - CacheRead: &[]float64{0.1}[0], + Input: 0.4, + Output: 1.6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -2994,14 +439,14 @@ func GetModelsData() map[string]ProviderInfo { }, "gpt-4.1-nano": { ID: "gpt-4.1-nano", - Name: "GPT-4.1 nano", + Name: "GPT-4.1 Nano", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.03}[0], + Input: 0.1, + Output: 0.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -3009,16 +454,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 32768, }, }, - "gpt-4o": { - ID: "gpt-4o", - Name: "GPT-4o", + "gpt-4o-2024-11-20": { + ID: "gpt-4o-2024-11-20", + Name: "GPT-4o (2024-11-20)", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 2.5, - Output: 10, - CacheRead: &[]float64{1.25}[0], + Input: 2.5, + Output: 10, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -3028,14 +473,14 @@ func GetModelsData() map[string]ProviderInfo { }, "gpt-4o-mini": { ID: "gpt-4o-mini", - Name: "GPT-4o mini", + Name: "GPT-4o Mini", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.08}[0], + Input: 0.15, + Output: 0.6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -3050,43 +495,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.13}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 272000, - Output: 128000, - }, - }, - "gpt-5-chat": { - ID: "gpt-5-chat", - Name: "GPT-5 Chat", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.13}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "gpt-5-codex": { - ID: "gpt-5-codex", - Name: "GPT-5-Codex", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 1.25, + Output: 10, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -3101,13 +512,13 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 0.25, - Output: 2, - CacheRead: &[]float64{0.03}[0], + Input: 0.25, + Output: 2, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 272000, + Context: 400000, Output: 128000, }, }, @@ -3118,2436 +529,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: &[]float64{0.01}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 272000, - Output: 128000, - }, - }, - "o1": { - ID: "o1", - Name: "o1", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 15, - Output: 60, - CacheRead: &[]float64{7.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "o1-mini": { - ID: "o1-mini", - Name: "o1-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.55}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 65536, - }, - }, - "o1-preview": { - ID: "o1-preview", - Name: "o1-preview", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 16.5, - Output: 66, - CacheRead: &[]float64{8.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "o3": { - ID: "o3", - Name: "o3", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "o3-mini": { - ID: "o3-mini", - Name: "o3-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.55}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "o4-mini": { - ID: "o4-mini", - Name: "o4-mini", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.28}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - }, - }, - "baseten": { - ID: "baseten", - Env: []string{"BASETEN_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Baseten", - Models: map[string]ModelInfo{ - "Qwen3/Qwen3-Coder-480B-A35B-Instruct": { - ID: "Qwen3/Qwen3-Coder-480B-A35B-Instruct", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.38, - Output: 1.53, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "moonshotai/Kimi-K2-Instruct-0905": { - ID: "moonshotai/Kimi-K2-Instruct-0905", - Name: "Kimi K2 Instruct 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - }, - }, - "cerebras": { - ID: "cerebras", - Env: []string{"CEREBRAS_API_KEY"}, - NPM: "@ai-sdk/cerebras", - Name: "Cerebras", - Models: map[string]ModelInfo{ - "gpt-oss-120b": { - ID: "gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 0.69, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen-3-235b-a22b-instruct-2507": { - ID: "qwen-3-235b-a22b-instruct-2507", - Name: "Qwen 3 235B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131000, - Output: 32000, - }, - }, - "qwen-3-coder-480b": { - ID: "qwen-3-coder-480b", - Name: "Qwen 3 Coder 480B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131000, - Output: 32000, - }, - }, - }, - }, - "chutes": { - ID: "chutes", - Env: []string{"CHUTES_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Chutes", - Models: map[string]ModelInfo{ - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", - Name: "Qwen3 235B A22B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.078, - Output: 0.312, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", - Name: "Qwen3-235B-A22B-Thinking-2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.078, - Output: 0.312, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "Qwen/Qwen3-30B-A3B": { - ID: "Qwen/Qwen3-30B-A3B", - Name: "Qwen3 30B A3B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.02, - Output: 0.08, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 40960, - Output: 40960, - }, - }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - ID: "Qwen/Qwen3-30B-A3B-Instruct-2507", - Name: "Qwen3 30B A3B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "Qwen/Qwen3-30B-A3B-Thinking-2507": { - ID: "Qwen/Qwen3-30B-A3B-Thinking-2507", - Name: "Qwen3 30B A3B Thinking 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.08, - Output: 0.29, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "Qwen/Qwen3-Coder-30B-A3B-Instruct": { - ID: "Qwen/Qwen3-Coder-30B-A3B-Instruct", - Name: "Qwen3 Coder 30B A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", - Name: "Qwen3 Coder 480B A35B Instruct (FP8)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", - Name: "Qwen3 Next 80B A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "Qwen/Qwen3-Next-80B-A3B-Thinking": { - ID: "Qwen/Qwen3-Next-80B-A3B-Thinking", - Name: "Qwen3 Next 80B A3B Thinking", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "chutesai/Devstral-Small-2505": { - ID: "chutesai/Devstral-Small-2505", - Name: "Devstral Small (2505)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.02, - Output: 0.08, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "chutesai/Mistral-Small-3.2-24B-Instruct-2506": { - ID: "chutesai/Mistral-Small-3.2-24B-Instruct-2506", - Name: "Mistral Small 3.2 24B Instruct (2506)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.02, - Output: 0.08, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "deepseek-ai/DeepSeek-R1-0528": { - ID: "deepseek-ai/DeepSeek-R1-0528", - Name: "DeepSeek R1 (0528)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.18, - Output: 0.72, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 75000, - Output: 163840, - }, - }, - "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B": { - ID: "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B", - Name: "DeepSeek R1 0528 Qwen3 8B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.02, - Output: 0.07, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { - ID: "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", - Name: "DeepSeek R1 Distill Llama 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.03, - Output: 0.14, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "deepseek-ai/DeepSeek-V3-0324": { - ID: "deepseek-ai/DeepSeek-V3-0324", - Name: "DeepSeek V3 (0324)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.18, - Output: 0.72, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 75000, - Output: 163840, - }, - }, - "deepseek-ai/DeepSeek-V3.1": { - ID: "deepseek-ai/DeepSeek-V3.1", - Name: "DeepSeek V3.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "deepseek-ai/DeepSeek-V3.1-Terminus": { - ID: "deepseek-ai/DeepSeek-V3.1-Terminus", - Name: "DeepSeek V3.1 Terminus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 65536, - }, - }, - "deepseek-ai/DeepSeek-V3.1-turbo": { - ID: "deepseek-ai/DeepSeek-V3.1-turbo", - Name: "DeepSeek V3.1 Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "deepseek-ai/DeepSeek-V3.1:THINKING": { - ID: "deepseek-ai/DeepSeek-V3.1:THINKING", - Name: "DeepSeek V3.1 Reasoning", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "deepseek-ai/DeepSeek-V3.2-Exp": { - ID: "deepseek-ai/DeepSeek-V3.2-Exp", - Name: "DeepSeek V3.2 Exp", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 0.35, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 64000, - }, - }, - "meituan-longcat/LongCat-Flash-Chat-FP8": { - ID: "meituan-longcat/LongCat-Flash-Chat-FP8", - Name: "LongCat Flash Chat FP8", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "moonshotai/Kimi-Dev-72B": { - ID: "moonshotai/Kimi-Dev-72B", - Name: "Kimi Dev 72B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.06664, - Output: 0.266688, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "moonshotai/Kimi-K2-Instruct-0905": { - ID: "moonshotai/Kimi-K2-Instruct-0905", - Name: "Kimi K2 Instruct 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.296176, - Output: 1.18528, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "moonshotai/Kimi-K2-Instruct-75k": { - ID: "moonshotai/Kimi-K2-Instruct-75k", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.59, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 75000, - Output: 75000, - }, - }, - "moonshotai/Kimi-VL-A3B-Thinking": { - ID: "moonshotai/Kimi-VL-A3B-Thinking", - Name: "Kimi VL A3B Thinking", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.02499, - Output: 0.100008, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.41, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "tngtech/DeepSeek-R1T-Chimera": { - ID: "tngtech/DeepSeek-R1T-Chimera", - Name: "DeepSeek R1T Chimera", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.18, - Output: 0.72, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "tngtech/DeepSeek-TNG-R1T2-Chimera": { - ID: "tngtech/DeepSeek-TNG-R1T2-Chimera", - Name: "DeepSeek TNG R1T2 Chimera", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "zai-org/GLM-4.5-Air": { - ID: "zai-org/GLM-4.5-Air", - Name: "GLM 4.5 Air", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 98304, - }, - }, - "zai-org/GLM-4.5-FP8": { - ID: "zai-org/GLM-4.5-FP8", - Name: "GLM 4.5 FP8", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "zai-org/GLM-4.5-turbo": { - ID: "zai-org/GLM-4.5-turbo", - Name: "GLM 4.5 Turbo", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "zai-org/GLM-4.6-FP8": { - ID: "zai-org/GLM-4.6-FP8", - Name: "GLM 4.6 FP8", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.39, - Output: 1.55, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 204800, - Output: 131072, - }, - }, - "zai-org/GLM-4.6-turbo": { - ID: "zai-org/GLM-4.6-turbo", - Name: "GLM 4.6 Turbo", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.15, - Output: 3.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 204800, - Output: 131072, - }, - }, - }, - }, - "cloudflare-workers-ai": { - ID: "cloudflare-workers-ai", - Env: []string{"CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_API_KEY"}, - NPM: "workers-ai-provider", - Name: "Cloudflare Workers AI", - Models: map[string]ModelInfo{ - "aura-1": { - ID: "aura-1", - Name: "@cf/deepgram/aura-1", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.015, - Output: 0.015, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "bart-large-cnn": { - ID: "bart-large-cnn", - Name: "@cf/facebook/bart-large-cnn", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "deepseek-coder-6.7b-base-awq": { - ID: "deepseek-coder-6.7b-base-awq", - Name: "@hf/thebloke/deepseek-coder-6.7b-base-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "deepseek-coder-6.7b-instruct-awq": { - ID: "deepseek-coder-6.7b-instruct-awq", - Name: "@hf/thebloke/deepseek-coder-6.7b-instruct-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "deepseek-math-7b-instruct": { - ID: "deepseek-math-7b-instruct", - Name: "@cf/deepseek-ai/deepseek-math-7b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "deepseek-r1-distill-qwen-32b": { - ID: "deepseek-r1-distill-qwen-32b", - Name: "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 4.88, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 80000, - Output: 80000, - }, - }, - "discolm-german-7b-v1-awq": { - ID: "discolm-german-7b-v1-awq", - Name: "@cf/thebloke/discolm-german-7b-v1-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "dreamshaper-8-lcm": { - ID: "dreamshaper-8-lcm", - Name: "@cf/lykon/dreamshaper-8-lcm", - Attachment: true, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "falcon-7b-instruct": { - ID: "falcon-7b-instruct", - Name: "@cf/tiiuae/falcon-7b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "flux-1-schnell": { - ID: "flux-1-schnell", - Name: "@cf/black-forest-labs/flux-1-schnell", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 5.3e-05, - Output: 0.00011, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2048, - Output: 0, - }, - }, - "gemma-2b-it-lora": { - ID: "gemma-2b-it-lora", - Name: "@cf/google/gemma-2b-it-lora", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "gemma-3-12b-it": { - ID: "gemma-3-12b-it", - Name: "@cf/google/gemma-3-12b-it", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.35, - Output: 0.56, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 80000, - Output: 80000, - }, - }, - "gemma-7b-it": { - ID: "gemma-7b-it", - Name: "@hf/google/gemma-7b-it", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "gemma-7b-it-lora": { - ID: "gemma-7b-it-lora", - Name: "@cf/google/gemma-7b-it-lora", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 3500, - Output: 3500, - }, - }, - "gpt-oss-120b": { - ID: "gpt-oss-120b", - Name: "@cf/openai/gpt-oss-120b", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.35, - Output: 0.75, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "gpt-oss-20b": { - ID: "gpt-oss-20b", - Name: "@cf/openai/gpt-oss-20b", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.2, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hermes-2-pro-mistral-7b": { - ID: "hermes-2-pro-mistral-7b", - Name: "@hf/nousresearch/hermes-2-pro-mistral-7b", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 24000, - Output: 24000, - }, - }, - "llama-2-13b-chat-awq": { - ID: "llama-2-13b-chat-awq", - Name: "@hf/thebloke/llama-2-13b-chat-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "llama-2-7b-chat-fp16": { - ID: "llama-2-7b-chat-fp16", - Name: "@cf/meta/llama-2-7b-chat-fp16", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.56, - Output: 6.67, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "llama-2-7b-chat-hf-lora": { - ID: "llama-2-7b-chat-hf-lora", - Name: "@cf/meta-llama/llama-2-7b-chat-hf-lora", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama-2-7b-chat-int8": { - ID: "llama-2-7b-chat-int8", - Name: "@cf/meta/llama-2-7b-chat-int8", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama-3-8b-instruct": { - ID: "llama-3-8b-instruct", - Name: "@cf/meta/llama-3-8b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.28, - Output: 0.83, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 7968, - Output: 7968, - }, - }, - "llama-3-8b-instruct-awq": { - ID: "llama-3-8b-instruct-awq", - Name: "@cf/meta/llama-3-8b-instruct-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.12, - Output: 0.27, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama-3.1-70b-instruct": { - ID: "llama-3.1-70b-instruct", - Name: "@cf/meta/llama-3.1-70b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 24000, - Output: 24000, - }, - }, - "llama-3.1-8b-instruct": { - ID: "llama-3.1-8b-instruct", - Name: "@cf/meta/llama-3.1-8b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.28, - Output: 0.83, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 7968, - Output: 7968, - }, - }, - "llama-3.1-8b-instruct-awq": { - ID: "llama-3.1-8b-instruct-awq", - Name: "@cf/meta/llama-3.1-8b-instruct-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.12, - Output: 0.27, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama-3.1-8b-instruct-fast": { - ID: "llama-3.1-8b-instruct-fast", - Name: "@cf/meta/llama-3.1-8b-instruct-fast", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "llama-3.1-8b-instruct-fp8": { - ID: "llama-3.1-8b-instruct-fp8", - Name: "@cf/meta/llama-3.1-8b-instruct-fp8", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.29, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 32000, - }, - }, - "llama-3.2-11b-vision-instruct": { - ID: "llama-3.2-11b-vision-instruct", - Name: "@cf/meta/llama-3.2-11b-vision-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.049, - Output: 0.68, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "llama-3.2-1b-instruct": { - ID: "llama-3.2-1b-instruct", - Name: "@cf/meta/llama-3.2-1b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.027, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 60000, - Output: 60000, - }, - }, - "llama-3.2-3b-instruct": { - ID: "llama-3.2-3b-instruct", - Name: "@cf/meta/llama-3.2-3b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.051, - Output: 0.34, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "llama-3.3-70b-instruct-fp8-fast": { - ID: "llama-3.3-70b-instruct-fp8-fast", - Name: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.29, - Output: 2.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 24000, - Output: 24000, - }, - }, - "llama-4-scout-17b-16e-instruct": { - ID: "llama-4-scout-17b-16e-instruct", - Name: "@cf/meta/llama-4-scout-17b-16e-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.27, - Output: 0.85, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131000, - Output: 131000, - }, - }, - "llama-guard-3-8b": { - ID: "llama-guard-3-8b", - Name: "@cf/meta/llama-guard-3-8b", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.48, - Output: 0.03, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "llamaguard-7b-awq": { - ID: "llamaguard-7b-awq", - Name: "@hf/thebloke/llamaguard-7b-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "llava-1.5-7b-hf": { - ID: "llava-1.5-7b-hf", - Name: "@cf/llava-hf/llava-1.5-7b-hf", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "lucid-origin": { - ID: "lucid-origin", - Name: "@cf/leonardo/lucid-origin", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.007, - Output: 0.007, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "m2m100-1.2b": { - ID: "m2m100-1.2b", - Name: "@cf/meta/m2m100-1.2b", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.34, - Output: 0.34, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "melotts": { - ID: "melotts", - Name: "@cf/myshell-ai/melotts", - Attachment: true, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.0002, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "mistral-7b-instruct-v0.1": { - ID: "mistral-7b-instruct-v0.1", - Name: "@cf/mistral/mistral-7b-instruct-v0.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.11, - Output: 0.19, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2824, - Output: 2824, - }, - }, - "mistral-7b-instruct-v0.1-awq": { - ID: "mistral-7b-instruct-v0.1-awq", - Name: "@hf/thebloke/mistral-7b-instruct-v0.1-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "mistral-7b-instruct-v0.2": { - ID: "mistral-7b-instruct-v0.2", - Name: "@hf/mistral/mistral-7b-instruct-v0.2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 3072, - Output: 3072, - }, - }, - "mistral-7b-instruct-v0.2-lora": { - ID: "mistral-7b-instruct-v0.2-lora", - Name: "@cf/mistral/mistral-7b-instruct-v0.2-lora", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 15000, - Output: 15000, - }, - }, - "mistral-small-3.1-24b-instruct": { - ID: "mistral-small-3.1-24b-instruct", - Name: "@cf/mistralai/mistral-small-3.1-24b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.35, - Output: 0.56, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "neural-chat-7b-v3-1-awq": { - ID: "neural-chat-7b-v3-1-awq", - Name: "@hf/thebloke/neural-chat-7b-v3-1-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "nova-3": { - ID: "nova-3", - Name: "@cf/deepgram/nova-3", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.0052, - Output: 0.0052, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "openchat-3.5-0106": { - ID: "openchat-3.5-0106", - Name: "@cf/openchat/openchat-3.5-0106", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "openhermes-2.5-mistral-7b-awq": { - ID: "openhermes-2.5-mistral-7b-awq", - Name: "@hf/thebloke/openhermes-2.5-mistral-7b-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "phi-2": { - ID: "phi-2", - Name: "@cf/microsoft/phi-2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2048, - Output: 2048, - }, - }, - "phoenix-1.0": { - ID: "phoenix-1.0", - Name: "@cf/leonardo/phoenix-1.0", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.0058, - Output: 0.0058, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "qwen1.5-0.5b-chat": { - ID: "qwen1.5-0.5b-chat", - Name: "@cf/qwen/qwen1.5-0.5b-chat", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 32000, - }, - }, - "qwen1.5-1.8b-chat": { - ID: "qwen1.5-1.8b-chat", - Name: "@cf/qwen/qwen1.5-1.8b-chat", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 32000, - }, - }, - "qwen1.5-14b-chat-awq": { - ID: "qwen1.5-14b-chat-awq", - Name: "@cf/qwen/qwen1.5-14b-chat-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 7500, - Output: 7500, - }, - }, - "qwen1.5-7b-chat-awq": { - ID: "qwen1.5-7b-chat-awq", - Name: "@cf/qwen/qwen1.5-7b-chat-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 20000, - Output: 20000, - }, - }, - "qwen2.5-coder-32b-instruct": { - ID: "qwen2.5-coder-32b-instruct", - Name: "@cf/qwen/qwen2.5-coder-32b-instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.66, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "qwq-32b": { - ID: "qwq-32b", - Name: "@cf/qwen/qwq-32b", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.66, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 24000, - Output: 24000, - }, - }, - "resnet-50": { - ID: "resnet-50", - Name: "@cf/microsoft/resnet-50", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 2.5e-06, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "sqlcoder-7b-2": { - ID: "sqlcoder-7b-2", - Name: "@cf/defog/sqlcoder-7b-2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 10000, - Output: 10000, - }, - }, - "stable-diffusion-v1-5-img2img": { - ID: "stable-diffusion-v1-5-img2img", - Name: "@cf/runwayml/stable-diffusion-v1-5-img2img", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "stable-diffusion-v1-5-inpainting": { - ID: "stable-diffusion-v1-5-inpainting", - Name: "@cf/runwayml/stable-diffusion-v1-5-inpainting", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "stable-diffusion-xl-base-1.0": { - ID: "stable-diffusion-xl-base-1.0", - Name: "@cf/stabilityai/stable-diffusion-xl-base-1.0", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "stable-diffusion-xl-lightning": { - ID: "stable-diffusion-xl-lightning", - Name: "@cf/bytedance/stable-diffusion-xl-lightning", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "starling-lm-7b-beta": { - ID: "starling-lm-7b-beta", - Name: "@hf/nexusflow/starling-lm-7b-beta", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - "tinyllama-1.1b-chat-v1.0": { - ID: "tinyllama-1.1b-chat-v1.0", - Name: "@cf/tinyllama/tinyllama-1.1b-chat-v1.0", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2048, - Output: 2048, - }, - }, - "uform-gen2-qwen-500m": { - ID: "uform-gen2-qwen-500m", - Name: "@cf/unum/uform-gen2-qwen-500m", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "una-cybertron-7b-v2-bf16": { - ID: "una-cybertron-7b-v2-bf16", - Name: "@cf/fblgit/una-cybertron-7b-v2-bf16", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 15000, - Output: 15000, - }, - }, - "whisper": { - ID: "whisper", - Name: "@cf/openai/whisper", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.00045, - Output: 0.00045, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "whisper-large-v3-turbo": { - ID: "whisper-large-v3-turbo", - Name: "@cf/openai/whisper-large-v3-turbo", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.00051, - Output: 0.00051, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "whisper-tiny-en": { - ID: "whisper-tiny-en", - Name: "@cf/openai/whisper-tiny-en", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 0, - }, - }, - "zephyr-7b-beta-awq": { - ID: "zephyr-7b-beta-awq", - Name: "@hf/thebloke/zephyr-7b-beta-awq", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 4096, - }, - }, - }, - }, - "cortecs": { - ID: "cortecs", - Env: []string{"CORTECS_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Cortecs", - Models: map[string]ModelInfo{ - "claude-4-5-sonnet": { - ID: "claude-4-5-sonnet", - Name: "Claude 4.5 Sonnet", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3.259, - Output: 16.296, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 200000, - }, - }, - "claude-sonnet-4": { - ID: "claude-sonnet-4", - Name: "Claude Sonnet 4", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3.307, - Output: 16.536, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "deepseek-v3-0324": { - ID: "deepseek-v3-0324", - Name: "DeepSeek V3 0324", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.551, - Output: 1.654, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "gemini-2.5-pro": { - ID: "gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.654, - Output: 11.024, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65535, - }, - }, - "gpt-4.1": { - ID: "gpt-4.1", - Name: "GPT 4.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.354, - Output: 9.417, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "gpt-oss-120b": { - ID: "gpt-oss-120b", - Name: "GPT Oss 120b", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "kimi-k2-instruct": { - ID: "kimi-k2-instruct", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.551, - Output: 2.646, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131000, - Output: 131000, - }, - }, - "llama-3.1-405b-instruct": { - ID: "llama-3.1-405b-instruct", - Name: "Llama 3.1 405B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "nova-pro-v1": { - ID: "nova-pro-v1", - Name: "Nova Pro 1.0", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.016, - Output: 4.061, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 300000, - Output: 5000, - }, - }, - "qwen3-32b": { - ID: "qwen3-32b", - Name: "Qwen3 32B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.099, - Output: 0.33, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 16384, - }, - }, - "qwen3-coder-480b-a35b-instruct": { - ID: "qwen3-coder-480b-a35b-instruct", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.441, - Output: 1.984, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262000, - Output: 262000, - }, - }, - }, - }, - "deepinfra": { - ID: "deepinfra", - Env: []string{"DEEPINFRA_API_KEY"}, - NPM: "@ai-sdk/deepinfra", - Name: "Deep Infra", - Models: map[string]ModelInfo{ - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo", - Name: "Qwen3 Coder 480B A35B Instruct Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "moonshotai/Kimi-K2-Instruct": { - ID: "moonshotai/Kimi-K2-Instruct", - Name: "Kimi K2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "zai-org/GLM-4.5": { - ID: "zai-org/GLM-4.5", - Name: "GLM-4.5", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 98304, - }, - }, - }, - }, - "deepseek": { - ID: "deepseek", - Env: []string{"DEEPSEEK_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "DeepSeek", - Models: map[string]ModelInfo{ - "deepseek-chat": { - ID: "deepseek-chat", - Name: "DeepSeek Chat", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.57, - Output: 1.68, - CacheRead: &[]float64{0.07}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "deepseek-reasoner": { - ID: "deepseek-reasoner", - Name: "DeepSeek Reasoner", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.57, - Output: 1.68, - CacheRead: &[]float64{0.07}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - }, - }, - "fastrouter": { - ID: "fastrouter", - Env: []string{"FASTROUTER_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "FastRouter", - Models: map[string]ModelInfo{ - "anthropic/claude-opus-4.1": { - ID: "anthropic/claude-opus-4.1", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "anthropic/claude-sonnet-4": { - ID: "anthropic/claude-sonnet-4", - Name: "Claude Sonnet 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "deepseek-ai/deepseek-r1-distill-llama-70b": { - ID: "deepseek-ai/deepseek-r1-distill-llama-70b", - Name: "DeepSeek R1 Distill Llama 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.03, - Output: 0.14, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "google/gemini-2.5-flash": { - ID: "google/gemini-2.5-flash", - Name: "Gemini 2.5 Flash", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.0375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-pro": { - ID: "google/gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "moonshotai/kimi-k2": { - ID: "moonshotai/kimi-k2", - Name: "Kimi K2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.55, - Output: 2.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/gpt-4.1": { - ID: "openai/gpt-4.1", - Name: "GPT-4.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-5": { - ID: "openai/gpt-5", - Name: "GPT-5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.125}[0], + Input: 0.05, + Output: 0.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -5555,16 +539,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 128000, }, }, - "openai/gpt-5-mini": { - ID: "openai/gpt-5-mini", - Name: "GPT-5 Mini", + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", Attachment: true, Reasoning: true, - Temperature: true, + Temperature: false, Cost: Cost{ - Input: 0.25, - Output: 2, - CacheRead: &[]float64{0.025}[0], + Input: 1.25, + Output: 10, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -5572,16 +556,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 128000, }, }, - "openai/gpt-5-nano": { - ID: "openai/gpt-5-nano", - Name: "GPT-5 Nano", + "gpt-5.1-chat-latest": { + ID: "gpt-5.1-chat-latest", + Name: "GPT-5.1 Chat Latest", Attachment: true, Reasoning: true, - Temperature: true, + Temperature: false, Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: &[]float64{0.005}[0], + Input: 1.25, + Output: 10, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -5589,2337 +573,105 @@ func GetModelsData() map[string]ProviderInfo { Output: 128000, }, }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, + "gpt-5.2": { + ID: "gpt-5.2", + Name: "GPT-5.2", + Attachment: true, Reasoning: true, - Temperature: true, + Temperature: false, Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, + Input: 1.75, + Output: 14, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 131072, - Output: 32768, + Context: 400000, + Output: 128000, }, }, - "openai/gpt-oss-20b": { - ID: "openai/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 65536, - }, - }, - "qwen/qwen3-coder": { - ID: "qwen/qwen3-coder", - Name: "Qwen3 Coder", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "x-ai/grok-4": { - ID: "x-ai/grok-4", + "grok-4-0709": { + ID: "grok-4-0709", Name: "Grok 4", - Attachment: false, + Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: &[]float64{15}[0], - }, - Limit: Limit{ - Context: 256000, - Output: 64000, - }, - }, - }, - }, - "fireworks-ai": { - ID: "fireworks-ai", - Env: []string{"FIREWORKS_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Fireworks AI", - Models: map[string]ModelInfo{ - "accounts/fireworks/models/deepseek-r1-0528": { - ID: "accounts/fireworks/models/deepseek-r1-0528", - Name: "Deepseek R1 05/28", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 160000, - Output: 16384, - }, - }, - "accounts/fireworks/models/deepseek-v3-0324": { - ID: "accounts/fireworks/models/deepseek-v3-0324", - Name: "Deepseek V3 03-24", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.9, - Output: 0.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 160000, - Output: 16384, - }, - }, - "accounts/fireworks/models/deepseek-v3p1": { - ID: "accounts/fireworks/models/deepseek-v3p1", - Name: "DeepSeek V3.1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.56, - Output: 1.68, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "accounts/fireworks/models/glm-4p5": { - ID: "accounts/fireworks/models/glm-4p5", - Name: "GLM 4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.55, - Output: 2.19, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "accounts/fireworks/models/glm-4p5-air": { - ID: "accounts/fireworks/models/glm-4p5-air", - Name: "GLM 4.5 Air", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.22, - Output: 0.88, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "accounts/fireworks/models/gpt-oss-120b": { - ID: "accounts/fireworks/models/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "accounts/fireworks/models/gpt-oss-20b": { - ID: "accounts/fireworks/models/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "accounts/fireworks/models/kimi-k2-instruct": { - ID: "accounts/fireworks/models/kimi-k2-instruct", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "accounts/fireworks/models/qwen3-235b-a22b": { - ID: "accounts/fireworks/models/qwen3-235b-a22b", - Name: "Qwen3 235B-A22B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.22, - Output: 0.88, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct": { - ID: "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.45, - Output: 1.8, - CacheRead: nil, + Input: 3, + Output: 15, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 256000, - Output: 32768, - }, - }, - }, - }, - "github-copilot": { - ID: "github-copilot", - Env: []string{"GITHUB_TOKEN"}, - NPM: "@ai-sdk/openai-compatible", - Name: "GitHub Copilot", - Models: map[string]ModelInfo{ - "claude-3.5-sonnet": { - ID: "claude-3.5-sonnet", - Name: "Claude Sonnet 3.5", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 90000, - Output: 8192, - }, - }, - "claude-3.7-sonnet": { - ID: "claude-3.7-sonnet", - Name: "Claude Sonnet 3.7", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, Output: 16384, }, }, - "claude-3.7-sonnet-thought": { - ID: "claude-3.7-sonnet-thought", - Name: "Claude Sonnet 3.7 Thinking", + "grok-4-1-fast-non-reasoning": { + ID: "grok-4-1-fast-non-reasoning", + Name: "Grok 4.1 Fast (Non-Reasoning)", Attachment: true, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.2, + Output: 0.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 200000, + Context: 2000000, Output: 16384, }, }, - "claude-haiku-4-5": { - ID: "claude-haiku-4-5", - Name: "Claude Haiku 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "claude-opus-4": { - ID: "claude-opus-4", - Name: "Claude Opus 4", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 80000, - Output: 16000, - }, - }, - "claude-opus-41": { - ID: "claude-opus-41", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 80000, - Output: 16000, - }, - }, - "claude-sonnet-4": { - ID: "claude-sonnet-4", - Name: "Claude Sonnet 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16000, - }, - }, - "claude-sonnet-4.5": { - ID: "claude-sonnet-4.5", - Name: "Claude Sonnet 4.5 (Preview)", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16000, - }, - }, - "gemini-2.0-flash-001": { - ID: "gemini-2.0-flash-001", - Name: "Gemini 2.0 Flash", + "grok-4-fast-non-reasoning": { + ID: "grok-4-fast-non-reasoning", + Name: "Grok 4 Fast (Non-Reasoning)", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.2, + Output: 0.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 1000000, - Output: 8192, - }, - }, - "gemini-2.5-pro": { - ID: "gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 64000, - }, - }, - "gpt-4.1": { - ID: "gpt-4.1", - Name: "GPT-4.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, + Context: 2000000, Output: 16384, }, }, - "gpt-4o": { - ID: "gpt-4o", - Name: "GPT-4o", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "gpt-5": { - ID: "gpt-5", - Name: "GPT-5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 64000, - }, - }, - "gpt-5-codex": { - ID: "gpt-5-codex", - Name: "GPT-5-Codex", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 64000, - }, - }, - "gpt-5-mini": { - ID: "gpt-5-mini", - Name: "GPT-5-mini", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 64000, - }, - }, "grok-code-fast-1": { ID: "grok-code-fast-1", Name: "Grok Code Fast 1", - Attachment: false, - Reasoning: true, + Attachment: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.2, + Output: 1.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 256000, - Output: 10000, - }, - }, - "o3": { - ID: "o3", - Name: "o3 (Preview)", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, Output: 16384, }, }, - "o3-mini": { - ID: "o3-mini", - Name: "o3-mini", + "kimi-k2-turbo-preview": { + ID: "kimi-k2-turbo-preview", + Name: "Kimi K2 Turbo Preview", Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 65536, - }, - }, - "o4-mini": { - ID: "o4-mini", - Name: "o4-mini (Preview)", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 65536, - }, - }, - }, - }, - "github-models": { - ID: "github-models", - Env: []string{"GITHUB_TOKEN"}, - NPM: "@ai-sdk/openai-compatible", - Name: "GitHub Models", - Models: map[string]ModelInfo{ - "ai21-labs/ai21-jamba-1.5-large": { - ID: "ai21-labs/ai21-jamba-1.5-large", - Name: "AI21 Jamba 1.5 Large", - Attachment: false, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.15, + Output: 8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 256000, - Output: 4096, - }, - }, - "ai21-labs/ai21-jamba-1.5-mini": { - ID: "ai21-labs/ai21-jamba-1.5-mini", - Name: "AI21 Jamba 1.5 Mini", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 4096, - }, - }, - "cohere/cohere-command-a": { - ID: "cohere/cohere-command-a", - Name: "Cohere Command A", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "cohere/cohere-command-r": { - ID: "cohere/cohere-command-r", - Name: "Cohere Command R", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "cohere/cohere-command-r-08-2024": { - ID: "cohere/cohere-command-r-08-2024", - Name: "Cohere Command R 08-2024", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "cohere/cohere-command-r-plus": { - ID: "cohere/cohere-command-r-plus", - Name: "Cohere Command R+", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "cohere/cohere-command-r-plus-08-2024": { - ID: "cohere/cohere-command-r-plus-08-2024", - Name: "Cohere Command R+ 08-2024", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "core42/jais-30b-chat": { - ID: "core42/jais-30b-chat", - Name: "JAIS 30b Chat", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 2048, - }, - }, - "deepseek/deepseek-r1": { - ID: "deepseek/deepseek-r1", - Name: "DeepSeek-R1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - "deepseek/deepseek-r1-0528": { - ID: "deepseek/deepseek-r1-0528", - Name: "DeepSeek-R1-0528", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - "deepseek/deepseek-v3-0324": { - ID: "deepseek/deepseek-v3-0324", - Name: "DeepSeek-V3-0324", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "meta/llama-3.2-11b-vision-instruct": { - ID: "meta/llama-3.2-11b-vision-instruct", - Name: "Llama-3.2-11B-Vision-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "meta/llama-3.2-90b-vision-instruct": { - ID: "meta/llama-3.2-90b-vision-instruct", - Name: "Llama-3.2-90B-Vision-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "meta/llama-3.3-70b-instruct": { - ID: "meta/llama-3.3-70b-instruct", - Name: "Llama-3.3-70B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "meta/llama-4-maverick-17b-128e-instruct-fp8": { - ID: "meta/llama-4-maverick-17b-128e-instruct-fp8", - Name: "Llama 4 Maverick 17B 128E Instruct FP8", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "meta/llama-4-scout-17b-16e-instruct": { - ID: "meta/llama-4-scout-17b-16e-instruct", - Name: "Llama 4 Scout 17B 16E Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "meta/meta-llama-3-70b-instruct": { - ID: "meta/meta-llama-3-70b-instruct", - Name: "Meta-Llama-3-70B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 2048, - }, - }, - "meta/meta-llama-3-8b-instruct": { - ID: "meta/meta-llama-3-8b-instruct", - Name: "Meta-Llama-3-8B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 2048, - }, - }, - "meta/meta-llama-3.1-405b-instruct": { - ID: "meta/meta-llama-3.1-405b-instruct", - Name: "Meta-Llama-3.1-405B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "meta/meta-llama-3.1-70b-instruct": { - ID: "meta/meta-llama-3.1-70b-instruct", - Name: "Meta-Llama-3.1-70B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "meta/meta-llama-3.1-8b-instruct": { - ID: "meta/meta-llama-3.1-8b-instruct", - Name: "Meta-Llama-3.1-8B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "microsoft/mai-ds-r1": { - ID: "microsoft/mai-ds-r1", - Name: "MAI-DS-R1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - "microsoft/phi-3-medium-128k-instruct": { - ID: "microsoft/phi-3-medium-128k-instruct", - Name: "Phi-3-medium instruct (128k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-3-medium-4k-instruct": { - ID: "microsoft/phi-3-medium-4k-instruct", - Name: "Phi-3-medium instruct (4k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 1024, - }, - }, - "microsoft/phi-3-mini-128k-instruct": { - ID: "microsoft/phi-3-mini-128k-instruct", - Name: "Phi-3-mini instruct (128k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-3-mini-4k-instruct": { - ID: "microsoft/phi-3-mini-4k-instruct", - Name: "Phi-3-mini instruct (4k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 1024, - }, - }, - "microsoft/phi-3-small-128k-instruct": { - ID: "microsoft/phi-3-small-128k-instruct", - Name: "Phi-3-small instruct (128k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-3-small-8k-instruct": { - ID: "microsoft/phi-3-small-8k-instruct", - Name: "Phi-3-small instruct (8k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 2048, - }, - }, - "microsoft/phi-3.5-mini-instruct": { - ID: "microsoft/phi-3.5-mini-instruct", - Name: "Phi-3.5-mini instruct (128k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-3.5-moe-instruct": { - ID: "microsoft/phi-3.5-moe-instruct", - Name: "Phi-3.5-MoE instruct (128k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-3.5-vision-instruct": { - ID: "microsoft/phi-3.5-vision-instruct", - Name: "Phi-3.5-vision instruct (128k)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-4": { - ID: "microsoft/phi-4", - Name: "Phi-4", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4096, - }, - }, - "microsoft/phi-4-mini-instruct": { - ID: "microsoft/phi-4-mini-instruct", - Name: "Phi-4-mini-instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-4-mini-reasoning": { - ID: "microsoft/phi-4-mini-reasoning", - Name: "Phi-4-mini-reasoning", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-4-multimodal-instruct": { - ID: "microsoft/phi-4-multimodal-instruct", - Name: "Phi-4-multimodal-instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "microsoft/phi-4-reasoning": { - ID: "microsoft/phi-4-reasoning", - Name: "Phi-4-Reasoning", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "mistral-ai/codestral-2501": { - ID: "mistral-ai/codestral-2501", - Name: "Codestral 25.01", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 8192, - }, - }, - "mistral-ai/ministral-3b": { - ID: "mistral-ai/ministral-3b", - Name: "Ministral 3B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "mistral-ai/mistral-large-2411": { - ID: "mistral-ai/mistral-large-2411", - Name: "Mistral Large 24.11", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "mistral-ai/mistral-medium-2505": { - ID: "mistral-ai/mistral-medium-2505", - Name: "Mistral Medium 3 (25.05)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "mistral-ai/mistral-nemo": { - ID: "mistral-ai/mistral-nemo", - Name: "Mistral Nemo", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "mistral-ai/mistral-small-2503": { - ID: "mistral-ai/mistral-small-2503", - Name: "Mistral Small 3.1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "openai/gpt-4.1": { - ID: "openai/gpt-4.1", - Name: "GPT-4.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-4.1-mini": { - ID: "openai/gpt-4.1-mini", - Name: "GPT-4.1-mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-4.1-nano": { - ID: "openai/gpt-4.1-nano", - Name: "GPT-4.1-nano", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-4o": { - ID: "openai/gpt-4o", - Name: "GPT-4o", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-4o-mini": { - ID: "openai/gpt-4o-mini", - Name: "GPT-4o mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/o1": { - ID: "openai/o1", - Name: "OpenAI o1", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openai/o1-mini": { - ID: "openai/o1-mini", - Name: "OpenAI o1-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 65536, - }, - }, - "openai/o1-preview": { - ID: "openai/o1-preview", - Name: "OpenAI o1-preview", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "openai/o3": { - ID: "openai/o3", - Name: "OpenAI o3", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openai/o3-mini": { - ID: "openai/o3-mini", - Name: "OpenAI o3-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openai/o4-mini": { - ID: "openai/o4-mini", - Name: "OpenAI o4-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "xai/grok-3": { - ID: "xai/grok-3", - Name: "Grok 3", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "xai/grok-3-mini": { - ID: "xai/grok-3-mini", - Name: "Grok 3 Mini", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - }, - }, - "google": { - ID: "google", - Env: []string{"GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY"}, - NPM: "@ai-sdk/google", - Name: "Google", - Models: map[string]ModelInfo{ - "gemini-1.5-flash": { - ID: "gemini-1.5-flash", - Name: "Gemini 1.5 Flash", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.075, - Output: 0.3, - CacheRead: &[]float64{0.01875}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 8192, - }, - }, - "gemini-1.5-flash-8b": { - ID: "gemini-1.5-flash-8b", - Name: "Gemini 1.5 Flash-8B", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.0375, - Output: 0.15, - CacheRead: &[]float64{0.01}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 8192, - }, - }, - "gemini-1.5-pro": { - ID: "gemini-1.5-pro", - Name: "Gemini 1.5 Pro", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 5, - CacheRead: &[]float64{0.3125}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1000000, - Output: 8192, - }, - }, - "gemini-2.0-flash": { - ID: "gemini-2.0-flash", - Name: "Gemini 2.0 Flash", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "gemini-2.0-flash-lite": { - ID: "gemini-2.0-flash-lite", - Name: "Gemini 2.0 Flash Lite", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.075, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "gemini-2.5-flash": { - ID: "gemini-2.5-flash", - Name: "Gemini 2.5 Flash", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-image": { - ID: "gemini-2.5-flash-image", - Name: "Gemini 2.5 Flash Image", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 30, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "gemini-2.5-flash-image-preview": { - ID: "gemini-2.5-flash-image-preview", - Name: "Gemini 2.5 Flash Image (Preview)", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 30, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "gemini-2.5-flash-lite": { - ID: "gemini-2.5-flash-lite", - Name: "Gemini 2.5 Flash Lite", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-lite-preview-06-17": { - ID: "gemini-2.5-flash-lite-preview-06-17", - Name: "Gemini 2.5 Flash Lite Preview 06-17", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-lite-preview-09-2025": { - ID: "gemini-2.5-flash-lite-preview-09-2025", - Name: "Gemini 2.5 Flash Lite Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-04-17": { - ID: "gemini-2.5-flash-preview-04-17", - Name: "Gemini 2.5 Flash Preview 04-17", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.0375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-05-20": { - ID: "gemini-2.5-flash-preview-05-20", - Name: "Gemini 2.5 Flash Preview 05-20", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.0375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-09-2025": { - ID: "gemini-2.5-flash-preview-09-2025", - Name: "Gemini 2.5 Flash Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-tts": { - ID: "gemini-2.5-flash-preview-tts", - Name: "Gemini 2.5 Flash Preview TTS", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.5, - Output: 10, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8000, - Output: 16000, - }, - }, - "gemini-2.5-pro": { - ID: "gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-pro-preview-05-06": { - ID: "gemini-2.5-pro-preview-05-06", - Name: "Gemini 2.5 Pro Preview 05-06", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-pro-preview-06-05": { - ID: "gemini-2.5-pro-preview-06-05", - Name: "Gemini 2.5 Pro Preview 06-05", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-pro-preview-tts": { - ID: "gemini-2.5-pro-preview-tts", - Name: "Gemini 2.5 Pro Preview TTS", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 1, - Output: 20, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8000, - Output: 16000, - }, - }, - "gemini-flash-latest": { - ID: "gemini-flash-latest", - Name: "Gemini Flash Latest", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-flash-lite-latest": { - ID: "gemini-flash-lite-latest", - Name: "Gemini Flash-Lite Latest", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-live-2.5-flash": { - ID: "gemini-live-2.5-flash", - Name: "Gemini Live 2.5 Flash", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8000, - }, - }, - "gemini-live-2.5-flash-preview-native-audio": { - ID: "gemini-live-2.5-flash-preview-native-audio", - Name: "Gemini Live 2.5 Flash Preview Native Audio", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 65536, - }, - }, - }, - }, - "google-vertex": { - ID: "google-vertex", - Env: []string{"GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"}, - NPM: "@ai-sdk/google-vertex", - Name: "Vertex", - Models: map[string]ModelInfo{ - "gemini-2.0-flash": { - ID: "gemini-2.0-flash", - Name: "Gemini 2.0 Flash", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "gemini-2.0-flash-lite": { - ID: "gemini-2.0-flash-lite", - Name: "Gemini 2.0 Flash Lite", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.075, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "gemini-2.5-flash": { - ID: "gemini-2.5-flash", - Name: "Gemini 2.5 Flash", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.383}[0], - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-lite": { - ID: "gemini-2.5-flash-lite", - Name: "Gemini 2.5 Flash Lite", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-lite-preview-06-17": { - ID: "gemini-2.5-flash-lite-preview-06-17", - Name: "Gemini 2.5 Flash Lite Preview 06-17", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 65536, - }, - }, - "gemini-2.5-flash-lite-preview-09-2025": { - ID: "gemini-2.5-flash-lite-preview-09-2025", - Name: "Gemini 2.5 Flash Lite Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-04-17": { - ID: "gemini-2.5-flash-preview-04-17", - Name: "Gemini 2.5 Flash Preview 04-17", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.0375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-05-20": { - ID: "gemini-2.5-flash-preview-05-20", - Name: "Gemini 2.5 Flash Preview 05-20", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.0375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-flash-preview-09-2025": { - ID: "gemini-2.5-flash-preview-09-2025", - Name: "Gemini 2.5 Flash Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.383}[0], - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-pro": { - ID: "gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-pro-preview-05-06": { - ID: "gemini-2.5-pro-preview-05-06", - Name: "Gemini 2.5 Pro Preview 05-06", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-2.5-pro-preview-06-05": { - ID: "gemini-2.5-pro-preview-06-05", - Name: "Gemini 2.5 Pro Preview 06-05", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-flash-latest": { - ID: "gemini-flash-latest", - Name: "Gemini Flash Latest", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.383}[0], - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "gemini-flash-lite-latest": { - ID: "gemini-flash-lite-latest", - Name: "Gemini Flash-Lite Latest", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - }, - }, - "google-vertex-anthropic": { - ID: "google-vertex-anthropic", - Env: []string{"GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"}, - NPM: "@ai-sdk/google-vertex", - Name: "Vertex", - Models: map[string]ModelInfo{ - "claude-3-5-haiku@20241022": { - ID: "claude-3-5-haiku@20241022", - Name: "Claude Haiku 3.5", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], - CacheWrite: &[]float64{1}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "claude-3-5-sonnet@20241022": { - ID: "claude-3-5-sonnet@20241022", - Name: "Claude Sonnet 3.5 v2", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 8192, - }, - }, - "claude-3-7-sonnet@20250219": { - ID: "claude-3-7-sonnet@20250219", - Name: "Claude Sonnet 3.7", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "claude-opus-4-1@20250805": { - ID: "claude-opus-4-1@20250805", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "claude-opus-4@20250514": { - ID: "claude-opus-4@20250514", - Name: "Claude Opus 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "claude-sonnet-4@20250514": { - ID: "claude-sonnet-4@20250514", - Name: "Claude Sonnet 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - }, - }, - "groq": { - ID: "groq", - Env: []string{"GROQ_API_KEY"}, - NPM: "@ai-sdk/groq", - Name: "Groq", - Models: map[string]ModelInfo{ - "deepseek-r1-distill-llama-70b": { - ID: "deepseek-r1-distill-llama-70b", - Name: "DeepSeek R1 Distill Llama 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.75, - Output: 0.99, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "gemma2-9b-it": { - ID: "gemma2-9b-it", - Name: "Gemma 2 9B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama-3.1-8b-instant": { - ID: "llama-3.1-8b-instant", - Name: "Llama 3.1 8B Instant", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.08, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, Output: 8192, }, }, @@ -7930,653 +682,77 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.59, - Output: 0.79, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "llama-guard-3-8b": { - ID: "llama-guard-3-8b", - Name: "Llama Guard 3 8B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama3-70b-8192": { - ID: "llama3-70b-8192", - Name: "Llama 3 70B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.59, - Output: 0.79, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "llama3-8b-8192": { - ID: "llama3-8b-8192", - Name: "Llama 3 8B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.08, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "meta-llama/llama-4-maverick-17b-128e-instruct": { - ID: "meta-llama/llama-4-maverick-17b-128e-instruct", - Name: "Llama 4 Maverick 17B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "meta-llama/llama-4-scout-17b-16e-instruct": { - ID: "meta-llama/llama-4-scout-17b-16e-instruct", - Name: "Llama 4 Scout 17B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.11, - Output: 0.34, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "meta-llama/llama-guard-4-12b": { - ID: "meta-llama/llama-guard-4-12b", - Name: "Llama Guard 4 12B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 128, - }, - }, - "mistral-saba-24b": { - ID: "mistral-saba-24b", - Name: "Mistral Saba 24B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.79, - Output: 0.79, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "moonshotai/kimi-k2-instruct": { - ID: "moonshotai/kimi-k2-instruct", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "moonshotai/kimi-k2-instruct-0905": { - ID: "moonshotai/kimi-k2-instruct-0905", - Name: "Kimi K2 Instruct 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 16384, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.75, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/gpt-oss-20b": { - ID: "openai/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen-qwq-32b": { - ID: "qwen-qwq-32b", - Name: "Qwen QwQ 32B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.29, - Output: 0.39, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "qwen/qwen3-32b": { - ID: "qwen/qwen3-32b", - Name: "Qwen3 32B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.29, - Output: 0.59, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - }, - }, - "huggingface": { - ID: "huggingface", - Env: []string{"HF_TOKEN"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Hugging Face", - Models: map[string]ModelInfo{ - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", - Name: "Qwen3-235B-A22B-Thinking-2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", - Name: "Qwen3-Coder-480B-A35B-Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "Qwen/Qwen3-Next-80B-A3B-Instruct": { - ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", - Name: "Qwen3-Next-80B-A3B-Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "Qwen/Qwen3-Next-80B-A3B-Thinking": { - ID: "Qwen/Qwen3-Next-80B-A3B-Thinking", - Name: "Qwen3-Next-80B-A3B-Thinking", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "deepseek-ai/DeepSeek-R1-0528": { - ID: "deepseek-ai/DeepSeek-R1-0528", - Name: "DeepSeek-R1-0528", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "deepseek-ai/Deepseek-V3-0324": { - ID: "deepseek-ai/Deepseek-V3-0324", - Name: "DeepSeek-V3-0324", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 1.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16384, - Output: 8192, - }, - }, - "moonshotai/Kimi-K2-Instruct": { - ID: "moonshotai/Kimi-K2-Instruct", - Name: "Kimi-K2-Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "moonshotai/Kimi-K2-Instruct-0905": { - ID: "moonshotai/Kimi-K2-Instruct-0905", - Name: "Kimi-K2-Instruct-0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 16384, - }, - }, - "zai-org/GLM-4.5": { - ID: "zai-org/GLM-4.5", - Name: "GLM-4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 98304, - }, - }, - "zai-org/GLM-4.5-Air": { - ID: "zai-org/GLM-4.5-Air", - Name: "GLM-4.5-Air", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 1.1, - CacheRead: nil, + Input: 0.59, + Output: 0.79, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 96000, + Output: 32768, }, }, - "zai-org/GLM-4.6": { - ID: "zai-org/GLM-4.6", - Name: "GLM-4.6", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: &[]float64{0.11}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 128000, - }, - }, - }, - }, - "inception": { - ID: "inception", - Env: []string{"INCEPTION_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Inception", - Models: map[string]ModelInfo{ - "mercury": { - ID: "mercury", - Name: "Mercury", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1, - CacheRead: &[]float64{0.25}[0], - CacheWrite: &[]float64{1}[0], - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "mercury-coder": { - ID: "mercury-coder", - Name: "Mercury Coder", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 1, - CacheRead: &[]float64{0.25}[0], - CacheWrite: &[]float64{1}[0], - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - }, - }, - "inference": { - ID: "inference", - Env: []string{"INFERENCE_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Inference", - Models: map[string]ModelInfo{ - "google/gemma-3": { - ID: "google/gemma-3", - Name: "Google Gemma 3", + "meta-llama-Llama-4-Maverick-17B-128E-Instruct-FP8": { + ID: "meta-llama-Llama-4-Maverick-17B-128E-Instruct-FP8", + Name: "Llama 4 Maverick 17B 128E Instruct FP8", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.15, - Output: 0.3, - CacheRead: nil, + Input: 0.14, + Output: 0.59, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 125000, + Context: 1000000, + Output: 32768, + }, + }, + "meta-llama-Meta-Llama-3.1-405B-Instruct-Turbo": { + ID: "meta-llama-Meta-Llama-3.1-405B-Instruct-Turbo", + Name: "Llama 3.1 405B Instruct Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3.5, + Output: 3.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, Output: 4096, }, }, - "meta/llama-3.1-8b-instruct": { - ID: "meta/llama-3.1-8b-instruct", + "meta-llama-Meta-Llama-3.1-70B-Instruct": { + ID: "meta-llama-Meta-Llama-3.1-70B-Instruct", + Name: "Llama 3.1 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta-llama-Meta-Llama-3.1-8B-Instruct": { + ID: "meta-llama-Meta-Llama-3.1-8B-Instruct", Name: "Llama 3.1 8B Instruct", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.025, - Output: 0.025, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4096, - }, - }, - "meta/llama-3.2-11b-vision-instruct": { - ID: "meta/llama-3.2-11b-vision-instruct", - Name: "Llama 3.2 11B Vision Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.055, - Output: 0.055, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4096, - }, - }, - "meta/llama-3.2-1b-instruct": { - ID: "meta/llama-3.2-1b-instruct", - Name: "Llama 3.2 1B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.01, - Output: 0.01, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4096, - }, - }, - "meta/llama-3.2-3b-instruct": { - ID: "meta/llama-3.2-3b-instruct", - Name: "Llama 3.2 3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.02, - Output: 0.02, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4096, - }, - }, - "mistral/mistral-nemo-12b-instruct": { - ID: "mistral/mistral-nemo-12b-instruct", - Name: "Mistral Nemo 12B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.038, - Output: 0.1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4096, - }, - }, - "osmosis/osmosis-structure-0.6b": { - ID: "osmosis/osmosis-structure-0.6b", - Name: "Osmosis Structure 0.6B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4000, - Output: 2048, - }, - }, - "qwen/qwen-2.5-7b-vision-instruct": { - ID: "qwen/qwen-2.5-7b-vision-instruct", - Name: "Qwen 2.5 7B Vision Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 125000, - Output: 4096, - }, - }, - "qwen/qwen3-embedding-4b": { - ID: "qwen/qwen3-embedding-4b", - Name: "Qwen 3 Embedding 4B", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.01, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 2048, - }, - }, - }, - }, - "llama": { - ID: "llama", - Env: []string{"LLAMA_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Llama", - Models: map[string]ModelInfo{ - "cerebras-llama-4-maverick-17b-128e-instruct": { - ID: "cerebras-llama-4-maverick-17b-128e-instruct", - Name: "Cerebras-Llama-4-Maverick-17B-128E-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.02, + Output: 0.05, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -8584,1701 +760,6 @@ func GetModelsData() map[string]ProviderInfo { Output: 4096, }, }, - "cerebras-llama-4-scout-17b-16e-instruct": { - ID: "cerebras-llama-4-scout-17b-16e-instruct", - Name: "Cerebras-Llama-4-Scout-17B-16E-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "groq-llama-4-maverick-17b-128e-instruct": { - ID: "groq-llama-4-maverick-17b-128e-instruct", - Name: "Groq-Llama-4-Maverick-17B-128E-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "llama-3.3-70b-instruct": { - ID: "llama-3.3-70b-instruct", - Name: "Llama-3.3-70B-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "llama-3.3-8b-instruct": { - ID: "llama-3.3-8b-instruct", - Name: "Llama-3.3-8B-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "llama-4-maverick-17b-128e-instruct-fp8": { - ID: "llama-4-maverick-17b-128e-instruct-fp8", - Name: "Llama-4-Maverick-17B-128E-Instruct-FP8", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "llama-4-scout-17b-16e-instruct-fp8": { - ID: "llama-4-scout-17b-16e-instruct-fp8", - Name: "Llama-4-Scout-17B-16E-Instruct-FP8", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - }, - }, - "lmstudio": { - ID: "lmstudio", - Env: []string{"LMSTUDIO_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "LMStudio", - Models: map[string]ModelInfo{ - "openai/gpt-oss-20b": { - ID: "openai/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "qwen/qwen3-30b-a3b-2507": { - ID: "qwen/qwen3-30b-a3b-2507", - Name: "Qwen3 30B A3B 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 16384, - }, - }, - "qwen/qwen3-coder-30b": { - ID: "qwen/qwen3-coder-30b", - Name: "Qwen3 Coder 30B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - }, - }, - "lucidquery": { - ID: "lucidquery", - Env: []string{"LUCIDQUERY_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "LucidQuery AI", - Models: map[string]ModelInfo{ - "lucidnova-rf1-100b": { - ID: "lucidnova-rf1-100b", - Name: "LucidNova RF1 100B", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 2, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 120000, - Output: 8000, - }, - }, - "lucidquery-nexus-coder": { - ID: "lucidquery-nexus-coder", - Name: "LucidQuery Nexus Coder", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 2, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 250000, - Output: 60000, - }, - }, - }, - }, - "mistral": { - ID: "mistral", - Env: []string{"MISTRAL_API_KEY"}, - NPM: "@ai-sdk/mistral", - Name: "Mistral", - Models: map[string]ModelInfo{ - "codestral-latest": { - ID: "codestral-latest", - Name: "Codestral", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 4096, - }, - }, - "devstral-medium-2507": { - ID: "devstral-medium-2507", - Name: "Devstral Medium", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "devstral-small-2505": { - ID: "devstral-small-2505", - Name: "Devstral Small 2505", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "devstral-small-2507": { - ID: "devstral-small-2507", - Name: "Devstral Small", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "magistral-medium-latest": { - ID: "magistral-medium-latest", - Name: "Magistral Medium", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "magistral-small": { - ID: "magistral-small", - Name: "Magistral Small", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 1.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "ministral-3b-latest": { - ID: "ministral-3b-latest", - Name: "Ministral 3B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.04, - Output: 0.04, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "ministral-8b-latest": { - ID: "ministral-8b-latest", - Name: "Ministral 8B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistral-large-latest": { - ID: "mistral-large-latest", - Name: "Mistral Large", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "mistral-medium-2505": { - ID: "mistral-medium-2505", - Name: "Mistral Medium 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "mistral-medium-2508": { - ID: "mistral-medium-2508", - Name: "Mistral Medium 3.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "mistral-medium-latest": { - ID: "mistral-medium-latest", - Name: "Mistral Medium", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "mistral-nemo": { - ID: "mistral-nemo", - Name: "Mistral Nemo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistral-small-latest": { - ID: "mistral-small-latest", - Name: "Mistral Small", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "open-mistral-7b": { - ID: "open-mistral-7b", - Name: "Mistral 7B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 0.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8000, - Output: 8000, - }, - }, - "open-mixtral-8x22b": { - ID: "open-mixtral-8x22b", - Name: "Mixtral 8x22B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 64000, - Output: 64000, - }, - }, - "open-mixtral-8x7b": { - ID: "open-mixtral-8x7b", - Name: "Mixtral 8x7B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 0.7, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 32000, - }, - }, - "pixtral-12b": { - ID: "pixtral-12b", - Name: "Pixtral 12B", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "pixtral-large-latest": { - ID: "pixtral-large-latest", - Name: "Pixtral Large", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - }, - }, - "modelscope": { - ID: "modelscope", - Env: []string{"MODELSCOPE_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "ModelScope", - Models: map[string]ModelInfo{ - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", - Name: "Qwen3 235B A22B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", - Name: "Qwen3-235B-A22B-Thinking-2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "Qwen/Qwen3-30B-A3B-Instruct-2507": { - ID: "Qwen/Qwen3-30B-A3B-Instruct-2507", - Name: "Qwen3 30B A3B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 16384, - }, - }, - "Qwen/Qwen3-30B-A3B-Thinking-2507": { - ID: "Qwen/Qwen3-30B-A3B-Thinking-2507", - Name: "Qwen3 30B A3B Thinking 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 32768, - }, - }, - "Qwen/Qwen3-Coder-30B-A3B-Instruct": { - ID: "Qwen/Qwen3-Coder-30B-A3B-Instruct", - Name: "Qwen3 Coder 30B A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 65536, - }, - }, - "ZhipuAI/GLM-4.5": { - ID: "ZhipuAI/GLM-4.5", - Name: "GLM-4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 98304, - }, - }, - }, - }, - "moonshotai": { - ID: "moonshotai", - Env: []string{"MOONSHOT_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Moonshot AI", - Models: map[string]ModelInfo{ - "kimi-k2-0711-preview": { - ID: "kimi-k2-0711-preview", - Name: "Kimi K2 0711", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "kimi-k2-0905-preview": { - ID: "kimi-k2-0905-preview", - Name: "Kimi K2 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "kimi-k2-turbo-preview": { - ID: "kimi-k2-turbo-preview", - Name: "Kimi K2 Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.4, - Output: 10, - CacheRead: &[]float64{0.6}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - }, - }, - "moonshotai-cn": { - ID: "moonshotai-cn", - Env: []string{"MOONSHOT_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Moonshot AI (China)", - Models: map[string]ModelInfo{ - "kimi-k2-0711-preview": { - ID: "kimi-k2-0711-preview", - Name: "Kimi K2 0711", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "kimi-k2-0905-preview": { - ID: "kimi-k2-0905-preview", - Name: "Kimi K2 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "kimi-k2-turbo-preview": { - ID: "kimi-k2-turbo-preview", - Name: "Kimi K2 Turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.4, - Output: 10, - CacheRead: &[]float64{0.6}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - }, - }, - "morph": { - ID: "morph", - Env: []string{"MORPH_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Morph", - Models: map[string]ModelInfo{ - "auto": { - ID: "auto", - Name: "Auto", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.85, - Output: 1.55, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 32000, - }, - }, - "morph-v3-fast": { - ID: "morph-v3-fast", - Name: "Morph v3 Fast", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.8, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 16000, - }, - }, - "morph-v3-large": { - ID: "morph-v3-large", - Name: "Morph v3 Large", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0.9, - Output: 1.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32000, - Output: 32000, - }, - }, - }, - }, - "nebius": { - ID: "nebius", - Env: []string{"NEBIUS_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Nebius AI Studio", - Models: map[string]ModelInfo{ - "NousResearch/hermes-4-405b": { - ID: "NousResearch/hermes-4-405b", - Name: "Hermes-4 405B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "NousResearch/hermes-4-70b": { - ID: "NousResearch/hermes-4-70b", - Name: "Hermes 4 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.13, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "deepseek-ai/deepseek-v3": { - ID: "deepseek-ai/deepseek-v3", - Name: "DeepSeek V3", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 1.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "meta-llama/llama-3.3-70b-instruct-base": { - ID: "meta-llama/llama-3.3-70b-instruct-base", - Name: "Llama-3.3-70B-Instruct (Base)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.13, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "meta-llama/llama-3.3-70b-instruct-fast": { - ID: "meta-llama/llama-3.3-70b-instruct-fast", - Name: "Llama-3.3-70B-Instruct (Fast)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 0.75, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "meta-llama/llama-3_1-405b-instruct": { - ID: "meta-llama/llama-3_1-405b-instruct", - Name: "Llama 3.1 405B Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "moonshotai/kimi-k2-instruct": { - ID: "moonshotai/kimi-k2-instruct", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "nvidia/llama-3_1-nemotron-ultra-253b-v1": { - ID: "nvidia/llama-3_1-nemotron-ultra-253b-v1", - Name: "Llama 3.1 Nemotron Ultra 253B v1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 1.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "openai/gpt-oss-20b": { - ID: "openai/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen/qwen3-235b-a22b-instruct-2507": { - ID: "qwen/qwen3-235b-a22b-instruct-2507", - Name: "Qwen3 235B A22B Instruct 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 8192, - }, - }, - "qwen/qwen3-235b-a22b-thinking-2507": { - ID: "qwen/qwen3-235b-a22b-thinking-2507", - Name: "Qwen3 235B A22B Thinking 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 8192, - }, - }, - "qwen/qwen3-coder-480b-a35b-instruct": { - ID: "qwen/qwen3-coder-480b-a35b-instruct", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "zai-org/glm-4.5": { - ID: "zai-org/glm-4.5", - Name: "GLM 4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "zai-org/glm-4.5-air": { - ID: "zai-org/glm-4.5-air", - Name: "GLM 4.5 Air", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - }, - }, - "nvidia": { - ID: "nvidia", - Env: []string{"NVIDIA_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Nvidia", - Models: map[string]ModelInfo{ - "black-forest-labs/flux.1-dev": { - ID: "black-forest-labs/flux.1-dev", - Name: "FLUX.1-dev", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 4096, - Output: 0, - }, - }, - "deepseek-ai/deepseek-v3.1": { - ID: "deepseek-ai/deepseek-v3.1", - Name: "DeepSeek V3.1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "google/gemma-3-27b-it": { - ID: "google/gemma-3-27b-it", - Name: "Gemma-3-27B-IT", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "microsoft/phi-4-mini-instruct": { - ID: "microsoft/phi-4-mini-instruct", - Name: "Phi-4-Mini", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "moonshotai/kimi-k2-instruct": { - ID: "moonshotai/kimi-k2-instruct", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "moonshotai/kimi-k2-instruct-0905": { - ID: "moonshotai/kimi-k2-instruct-0905", - Name: "Kimi K2 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "nvidia/cosmos-nemotron-34b": { - ID: "nvidia/cosmos-nemotron-34b", - Name: "Cosmos Nemotron 34B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "nvidia/llama-3.1-nemotron-ultra-253b-v1": { - ID: "nvidia/llama-3.1-nemotron-ultra-253b-v1", - Name: "Llama-3.1-Nemotron-Ultra-253B-v1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "nvidia/nemoretriever-ocr-v1": { - ID: "nvidia/nemoretriever-ocr-v1", - Name: "NeMo Retriever OCR v1", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 4096, - }, - }, - "nvidia/parakeet-tdt-0.6b-v2": { - ID: "nvidia/parakeet-tdt-0.6b-v2", - Name: "Parakeet TDT 0.6B v2", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 4096, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT-OSS-120B", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "openai/whisper-large-v3": { - ID: "openai/whisper-large-v3", - Name: "Whisper Large v3", - Attachment: false, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 0, - Output: 4096, - }, - }, - "qwen/qwen3-235b-a22b": { - ID: "qwen/qwen3-235b-a22b", - Name: "Qwen3-235B-A22B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen/qwen3-coder-480b-a35b-instruct": { - ID: "qwen/qwen3-coder-480b-a35b-instruct", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - }, - }, - "openai": { - ID: "openai", - Env: []string{"OPENAI_API_KEY"}, - NPM: "@ai-sdk/openai", - Name: "OpenAI", - Models: map[string]ModelInfo{ - "codex-mini-latest": { - ID: "codex-mini-latest", - Name: "Codex Mini", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.5, - Output: 6, - CacheRead: &[]float64{0.375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "gpt-3.5-turbo": { - ID: "gpt-3.5-turbo", - Name: "GPT-3.5-turbo", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 1.5, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16385, - Output: 4096, - }, - }, - "gpt-4": { - ID: "gpt-4", - Name: "GPT-4", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 30, - Output: 60, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "gpt-4-turbo": { - ID: "gpt-4-turbo", - Name: "GPT-4 Turbo", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 10, - Output: 30, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "gpt-4.1": { - ID: "gpt-4.1", - Name: "GPT-4.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "gpt-4.1-mini": { - ID: "gpt-4.1-mini", - Name: "GPT-4.1 mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.6, - CacheRead: &[]float64{0.1}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "gpt-4.1-nano": { - ID: "gpt-4.1-nano", - Name: "GPT-4.1 nano", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.03}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "gpt-4o": { - ID: "gpt-4o", - Name: "GPT-4o", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.5, - Output: 10, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "gpt-4o-2024-05-13": { - ID: "gpt-4o-2024-05-13", - Name: "GPT-4o (2024-05-13)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 5, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "gpt-4o-2024-08-06": { - ID: "gpt-4o-2024-08-06", - Name: "GPT-4o (2024-08-06)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.5, - Output: 10, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "gpt-4o-2024-11-20": { - ID: "gpt-4o-2024-11-20", - Name: "GPT-4o (2024-11-20)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.5, - Output: 10, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "gpt-4o-mini": { - ID: "gpt-4o-mini", - Name: "GPT-4o mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.08}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "gpt-5": { - ID: "gpt-5", - Name: "GPT-5", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.13}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "gpt-5-chat-latest": { - ID: "gpt-5-chat-latest", - Name: "GPT-5 Chat (latest)", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "gpt-5-codex": { - ID: "gpt-5-codex", - Name: "GPT-5-Codex", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.125}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "gpt-5-mini": { - ID: "gpt-5-mini", - Name: "GPT-5 Mini", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.25, - Output: 2, - CacheRead: &[]float64{0.03}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "gpt-5-nano": { - ID: "gpt-5-nano", - Name: "GPT-5 Nano", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: &[]float64{0.01}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "o1": { - ID: "o1", - Name: "o1", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 15, - Output: 60, - CacheRead: &[]float64{7.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "o1-mini": { - ID: "o1-mini", - Name: "o1-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.55}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 65536, - }, - }, - "o1-preview": { - ID: "o1-preview", - Name: "o1-preview", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 60, - CacheRead: &[]float64{7.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "o1-pro": { - ID: "o1-pro", - Name: "o1-pro", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 150, - Output: 600, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, "o3": { ID: "o3", Name: "o3", @@ -10286,26 +767,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "o3-deep-research": { - ID: "o3-deep-research", - Name: "o3-deep-research", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 10, - Output: 40, - CacheRead: &[]float64{2.5}[0], + Input: 2, + Output: 8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10320,9 +784,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.55}[0], + Input: 1.1, + Output: 4.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10337,9 +801,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 20, - Output: 80, - CacheRead: nil, + Input: 20, + Output: 80, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10354,9 +818,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: false, Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.28}[0], + Input: 1.1, + Output: 4.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10364,65 +828,133 @@ func GetModelsData() map[string]ProviderInfo { Output: 100000, }, }, - "o4-mini-deep-research": { - ID: "o4-mini-deep-research", - Name: "o4-mini-deep-research", + "openai-gpt-oss-120b": { + ID: "openai-gpt-oss-120b", + Name: "GPT-OSS 120B", Attachment: true, Reasoning: true, - Temperature: false, + Temperature: true, Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], + Input: 0.08, + Output: 0.44, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 200000, - Output: 100000, + Context: 128000, + Output: 32768, }, }, - }, - }, - "opencode": { - ID: "opencode", - Env: []string{"OPENCODE_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "OpenCode Zen", - Models: map[string]ModelInfo{ - "an-g8x": { - ID: "an-g8x", - Name: "Code G8X (alpha)", + "qwen-2.5-coder-32b": { + ID: "qwen-2.5-coder-32b", + Name: "Qwen 2.5 Coder 32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.79, + Output: 0.79, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "qwen-qwen3-Max": { + ID: "qwen-qwen3-Max", + Name: "Qwen3 Max", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, + Input: 1.2, + Output: 6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 200000, - Output: 128000, + Context: 131072, + Output: 16384, }, }, - "claude-3-5-haiku": { - ID: "claude-3-5-haiku", - Name: "Claude Haiku 3.5", - Attachment: true, + "qwen-qwen3-coder-480b-a35b-instruct": { + ID: "qwen-qwen3-coder-480b-a35b-instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "zai-org-glm-4.5": { + ID: "zai-org-glm-4.5", + Name: "GLM-4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "zai-org-glm-4.6": { + ID: "zai-org-glm-4.6", + Name: "GLM-4.6", + Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], - CacheWrite: &[]float64{1}[0], + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ - Context: 200000, + Context: 128000, Output: 8192, }, }, + }, + }, + "aihubmix": { + ID: "aihubmix", + Env: []string{"AIHUBMIX_API_KEY" }, + NPM: "@aihubmix/ai-sdk-provider", + Name: "AIHubMix", + Models: map[string]ModelInfo{ + "Kimi-K2-0905": { + ID: "Kimi-K2-0905", + Name: "Kimi K2 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, "claude-haiku-4-5": { ID: "claude-haiku-4-5", Name: "Claude Haiku 4.5", @@ -10430,9 +962,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1, - Output: 1.25, - CacheRead: &[]float64{0.1}[0], + Input: 1.1, + Output: 5.5, + CacheRead: &[]float64{0.11}[0], CacheWrite: &[]float64{1.25}[0], }, Limit: Limit{ @@ -10447,9 +979,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], + Input: 16.5, + Output: 82.5, + CacheRead: &[]float64{1.5}[0], CacheWrite: &[]float64{18.75}[0], }, Limit: Limit{ @@ -10457,21 +989,21 @@ func GetModelsData() map[string]ProviderInfo { Output: 32000, }, }, - "claude-sonnet-4": { - ID: "claude-sonnet-4", - Name: "Claude Sonnet 4", + "claude-opus-4-5": { + ID: "claude-opus-4-5", + Name: "Claude Opus 4.5", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], }, Limit: Limit{ - Context: 1000000, - Output: 64000, + Context: 200000, + Output: 32000, }, }, "claude-sonnet-4-5": { @@ -10481,43 +1013,128 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], + Input: 3.3, + Output: 16.5, + CacheRead: &[]float64{0.3}[0], CacheWrite: &[]float64{3.75}[0], }, Limit: Limit{ - Context: 1000000, + Context: 200000, Output: 64000, }, }, - "code-supernova": { - ID: "code-supernova", - Name: "Code Supernova 1M", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], - CacheWrite: &[]float64{0}[0], - }, - Limit: Limit{ - Context: 1000000, - Output: 1000000, - }, - }, - "glm-4.6": { - ID: "glm-4.6", - Name: "GLM-4.6 (beta)", + "coding-glm-4.7-free": { + ID: "coding-glm-4.7-free", + Name: "Coding GLM-4.7 Free", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 1.9, - CacheRead: nil, + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "deepseek-v3.2": { + ID: "deepseek-v3.2", + Name: "DeepSeek-V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 64000, + }, + }, + "deepseek-v3.2-think": { + ID: "deepseek-v3.2-think", + Name: "DeepSeek-V3.2-Think", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 64000, + }, + }, + "gemini-2.5-flash": { + ID: "gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 65000, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 5, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 65000, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 65000, + }, + }, + "glm-4.7": { + ID: "glm-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1.1, + CacheRead: &[]float64{0.548}[0], CacheWrite: nil, }, Limit: Limit{ @@ -10525,16 +1142,101 @@ func GetModelsData() map[string]ProviderInfo { Output: 131072, }, }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-mini": { + ID: "gpt-4.1-mini", + Name: "GPT-4.1 mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-nano": { + ID: "gpt-4.1-nano", + Name: "GPT-4.1 nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4o": { + ID: "gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o-2024-11-20": { + ID: "gpt-4o-2024-11-20", + Name: "GPT-4o (2024-11-20)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, "gpt-5": { ID: "gpt-5", Name: "GPT-5", Attachment: true, Reasoning: true, - Temperature: false, + Temperature: true, Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.125}[0], + Input: 5, + Output: 20, + CacheRead: &[]float64{2.5}[0], CacheWrite: nil, }, Limit: Limit{ @@ -10545,13 +1247,13 @@ func GetModelsData() map[string]ProviderInfo { "gpt-5-codex": { ID: "gpt-5-codex", Name: "GPT-5-Codex", - Attachment: true, + Attachment: false, Reasoning: true, Temperature: false, Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.125}[0], + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], CacheWrite: nil, }, Limit: Limit{ @@ -10559,33 +1261,203 @@ func GetModelsData() map[string]ProviderInfo { Output: 128000, }, }, - "grok-code": { - ID: "grok-code", - Name: "Grok Code Fast 1", + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "GPT-5-Mini", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], - CacheWrite: &[]float64{0}[0], + Input: 1.5, + Output: 6, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, }, Limit: Limit{ - Context: 256000, - Output: 256000, + Context: 200000, + Output: 64000, }, }, - "kimi-k2": { - ID: "kimi-k2", - Name: "Kimi K2", + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "GPT-5-Nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: &[]float64{0.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5-pro": { + ID: "gpt-5-pro", + Name: "GPT-5-Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 7, + Output: 28, + CacheRead: &[]float64{3.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "GPT-5.1 Codex", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-max": { + ID: "gpt-5.1-codex-max", + Name: "GPT-5.1-Codex-Max", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "GPT-5.1 Codex Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2": { + ID: "gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "minimax-m2.1": { + ID: "minimax-m2.1", + Name: "MiniMax M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "minimax-m2.1-free": { + ID: "minimax-m2.1-free", + Name: "MiniMax M2.1 Free", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "o4-mini": { + ID: "o4-mini", + Name: "o4-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.5, + Output: 6, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 65536, + }, + }, + "qwen3-235b-a22b-instruct-2507": { + ID: "qwen3-235b-a22b-instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: &[]float64{0.36}[0], + Input: 0.28, + Output: 1.12, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10593,160 +1465,92 @@ func GetModelsData() map[string]ProviderInfo { Output: 262144, }, }, - "qwen3-coder": { - ID: "qwen3-coder", - Name: "Qwen3 Coder", + "qwen3-235b-a22b-thinking-2507": { + ID: "qwen3-235b-a22b-thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", Attachment: false, - Reasoning: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.45, - Output: 1.8, - CacheRead: nil, + Input: 0.28, + Output: 2.8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 262144, - Output: 65536, + Output: 262144, + }, + }, + "qwen3-coder-480b-a35b-instruct": { + ID: "qwen3-coder-480b-a35b-instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.82, + Output: 3.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131000, }, }, }, }, - "openrouter": { - ID: "openrouter", - Env: []string{"OPENROUTER_API_KEY"}, + "alibaba": { + ID: "alibaba", + Env: []string{"DASHSCOPE_API_KEY" }, NPM: "@ai-sdk/openai-compatible", - Name: "OpenRouter", + Name: "Alibaba", Models: map[string]ModelInfo{ - "anthropic/claude-3.5-haiku": { - ID: "anthropic/claude-3.5-haiku", - Name: "Claude Haiku 3.5", - Attachment: true, - Reasoning: false, + "qvq-max": { + ID: "qvq-max", + Name: "QVQ Max", + Attachment: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], - CacheWrite: &[]float64{1}[0], + Input: 1.2, + Output: 4.8, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ - Context: 200000, + Context: 131072, Output: 8192, }, }, - "anthropic/claude-3.7-sonnet": { - ID: "anthropic/claude-3.7-sonnet", - Name: "Claude Sonnet 3.7", - Attachment: true, + "qwen-flash": { + ID: "qwen-flash", + Name: "Qwen Flash", + Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 128000, - }, - }, - "anthropic/claude-4.5-haiku": { - ID: "anthropic/claude-4.5-haiku", - Name: "Claude Haiku 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: &[]float64{0.1}[0], - CacheWrite: &[]float64{1.25}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic/claude-opus-4": { - ID: "anthropic/claude-opus-4", - Name: "Claude Opus 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "anthropic/claude-opus-4.1": { - ID: "anthropic/claude-opus-4.1", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "anthropic/claude-sonnet-4": { - ID: "anthropic/claude-sonnet-4", - Name: "Claude Sonnet 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic/claude-sonnet-4.5": { - ID: "anthropic/claude-sonnet-4.5", - Name: "Claude Sonnet 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 0.05, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 1000000, - Output: 64000, + Output: 32768, }, }, - "cognitivecomputations/dolphin3.0-mistral-24b": { - ID: "cognitivecomputations/dolphin3.0-mistral-24b", - Name: "Dolphin3.0 Mistral 24B", + "qwen-max": { + ID: "qwen-max", + Name: "Qwen Max", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 1.6, + Output: 6.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10754,33 +1558,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "cognitivecomputations/dolphin3.0-r1-mistral-24b": { - ID: "cognitivecomputations/dolphin3.0-r1-mistral-24b", - Name: "Dolphin3.0 R1 Mistral 24B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "deepseek/deepseek-chat-v3-0324": { - ID: "deepseek/deepseek-chat-v3-0324", - Name: "DeepSeek V3 0324", + "qwen-mt-plus": { + ID: "qwen-mt-plus", + Name: "Qwen-MT Plus", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 2.46, + Output: 7.37, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -10788,3012 +1575,577 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "deepseek/deepseek-chat-v3.1": { - ID: "deepseek/deepseek-chat-v3.1", - Name: "DeepSeek-V3.1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "deepseek/deepseek-r1-0528-qwen3-8b:free": { - ID: "deepseek/deepseek-r1-0528-qwen3-8b:free", - Name: "Deepseek R1 0528 Qwen3 8B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "deepseek/deepseek-r1-0528:free": { - ID: "deepseek/deepseek-r1-0528:free", - Name: "R1 0528 (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "deepseek/deepseek-r1-distill-llama-70b": { - ID: "deepseek/deepseek-r1-distill-llama-70b", - Name: "DeepSeek R1 Distill Llama 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "deepseek/deepseek-r1-distill-qwen-14b": { - ID: "deepseek/deepseek-r1-distill-qwen-14b", - Name: "DeepSeek R1 Distill Qwen 14B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 64000, - Output: 8192, - }, - }, - "deepseek/deepseek-r1:free": { - ID: "deepseek/deepseek-r1:free", - Name: "R1 (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "deepseek/deepseek-v3-base:free": { - ID: "deepseek/deepseek-v3-base:free", - Name: "DeepSeek V3 Base (free)", + "qwen-mt-turbo": { + ID: "qwen-mt-turbo", + Name: "Qwen-MT Turbo", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.16, + Output: 0.49, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 163840, - Output: 163840, + Context: 16384, + Output: 8192, }, }, - "deepseek/deepseek-v3.1-terminus": { - ID: "deepseek/deepseek-v3.1-terminus", - Name: "DeepSeek V3.1 Terminus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.27, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 65536, - }, - }, - "featherless/qwerky-72b": { - ID: "featherless/qwerky-72b", - Name: "Qwerky 72B", + "qwen-omni-turbo": { + ID: "qwen-omni-turbo", + Name: "Qwen-Omni Turbo", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.07, + Output: 0.27, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 32768, - Output: 8192, + Output: 2048, }, }, - "google/gemini-2.0-flash-001": { - ID: "google/gemini-2.0-flash-001", - Name: "Gemini 2.0 Flash", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "google/gemini-2.0-flash-exp:free": { - ID: "google/gemini-2.0-flash-exp:free", - Name: "Gemini 2.0 Flash Experimental (free)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 1048576, - }, - }, - "google/gemini-2.5-flash": { - ID: "google/gemini-2.5-flash", - Name: "Gemini 2.5 Flash", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.0375}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-flash-lite": { - ID: "google/gemini-2.5-flash-lite", - Name: "Gemini 2.5 Flash Lite", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-flash-lite-preview-09-2025": { - ID: "google/gemini-2.5-flash-lite-preview-09-2025", - Name: "Gemini 2.5 Flash Lite Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-flash-preview-09-2025": { - ID: "google/gemini-2.5-flash-preview-09-2025", - Name: "Gemini 2.5 Flash Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.031}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-pro": { - ID: "google/gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-pro-preview-05-06": { - ID: "google/gemini-2.5-pro-preview-05-06", - Name: "Gemini 2.5 Pro Preview 05-06", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-pro-preview-06-05": { - ID: "google/gemini-2.5-pro-preview-06-05", - Name: "Gemini 2.5 Pro Preview 06-05", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemma-2-9b-it:free": { - ID: "google/gemma-2-9b-it:free", - Name: "Gemma 2 9B (free)", + "qwen-omni-turbo-realtime": { + ID: "qwen-omni-turbo-realtime", + Name: "Qwen-Omni Turbo Realtime", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "google/gemma-3-12b-it": { - ID: "google/gemma-3-12b-it", - Name: "Gemma 3 12B IT", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 96000, - Output: 8192, - }, - }, - "google/gemma-3-27b-it": { - ID: "google/gemma-3-27b-it", - Name: "Gemma 3 27B IT", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 96000, - Output: 8192, - }, - }, - "google/gemma-3n-e4b-it": { - ID: "google/gemma-3n-e4b-it", - Name: "Gemma 3n E4B IT", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "google/gemma-3n-e4b-it:free": { - ID: "google/gemma-3n-e4b-it:free", - Name: "Gemma 3n 4B (free)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 8192, - Output: 8192, - }, - }, - "meta-llama/llama-3.2-11b-vision-instruct": { - ID: "meta-llama/llama-3.2-11b-vision-instruct", - Name: "Llama 3.2 11B Vision Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "meta-llama/llama-3.3-70b-instruct:free": { - ID: "meta-llama/llama-3.3-70b-instruct:free", - Name: "Llama 3.3 70B Instruct (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 65536, - }, - }, - "meta-llama/llama-4-scout:free": { - ID: "meta-llama/llama-4-scout:free", - Name: "Llama 4 Scout (free)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 64000, - Output: 64000, - }, - }, - "microsoft/mai-ds-r1:free": { - ID: "microsoft/mai-ds-r1:free", - Name: "MAI DS R1 (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "mistralai/codestral-2508": { - ID: "mistralai/codestral-2508", - Name: "Codestral 2508", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 256000, - }, - }, - "mistralai/devstral-medium-2507": { - ID: "mistralai/devstral-medium-2507", - Name: "Devstral Medium", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "mistralai/devstral-small-2505": { - ID: "mistralai/devstral-small-2505", - Name: "Devstral Small", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.06, - Output: 0.12, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistralai/devstral-small-2505:free": { - ID: "mistralai/devstral-small-2505:free", - Name: "Devstral Small 2505 (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.27, + Output: 1.07, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 32768, - Output: 32768, + Output: 2048, }, }, - "mistralai/devstral-small-2507": { - ID: "mistralai/devstral-small-2507", - Name: "Devstral Small 1.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "mistralai/mistral-7b-instruct:free": { - ID: "mistralai/mistral-7b-instruct:free", - Name: "Mistral 7B Instruct (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "mistralai/mistral-medium-3": { - ID: "mistralai/mistral-medium-3", - Name: "Mistral Medium 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "mistralai/mistral-medium-3.1": { - ID: "mistralai/mistral-medium-3.1", - Name: "Mistral Medium 3.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "mistralai/mistral-nemo:free": { - ID: "mistralai/mistral-nemo:free", - Name: "Mistral Nemo (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "mistralai/mistral-small-3.1-24b-instruct": { - ID: "mistralai/mistral-small-3.1-24b-instruct", - Name: "Mistral Small 3.1 24B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "mistralai/mistral-small-3.2-24b-instruct": { - ID: "mistralai/mistral-small-3.2-24b-instruct", - Name: "Mistral Small 3.2 24B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 96000, - Output: 8192, - }, - }, - "mistralai/mistral-small-3.2-24b-instruct:free": { - ID: "mistralai/mistral-small-3.2-24b-instruct:free", - Name: "Mistral Small 3.2 24B (free)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 96000, - Output: 96000, - }, - }, - "moonshotai/kimi-dev-72b:free": { - ID: "moonshotai/kimi-dev-72b:free", - Name: "Kimi Dev 72b (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "moonshotai/kimi-k2": { - ID: "moonshotai/kimi-k2", - Name: "Kimi K2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.55, - Output: 2.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "moonshotai/kimi-k2-0905": { - ID: "moonshotai/kimi-k2-0905", - Name: "Kimi K2 Instruct 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 16384, - }, - }, - "moonshotai/kimi-k2:free": { - ID: "moonshotai/kimi-k2:free", - Name: "Kimi K2 (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32800, - Output: 32800, - }, - }, - "nousresearch/deephermes-3-llama-3-8b-preview": { - ID: "nousresearch/deephermes-3-llama-3-8b-preview", - Name: "DeepHermes 3 Llama 3 8B Preview", + "qwen-plus": { + ID: "qwen-plus", + Name: "Qwen Plus", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "nousresearch/hermes-4-405b": { - ID: "nousresearch/hermes-4-405b", - Name: "Hermes 4 405B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "nousresearch/hermes-4-70b": { - ID: "nousresearch/hermes-4-70b", - Name: "Hermes 4 70B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.13, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "openai/gpt-4.1": { - ID: "openai/gpt-4.1", - Name: "GPT-4.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4.1-mini": { - ID: "openai/gpt-4.1-mini", - Name: "GPT-4.1 Mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.6, - CacheRead: &[]float64{0.1}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4o-mini": { - ID: "openai/gpt-4o-mini", - Name: "GPT-4o-mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.08}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-5": { - ID: "openai/gpt-5", - Name: "GPT-5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-chat": { - ID: "openai/gpt-5-chat", - Name: "GPT-5 Chat (latest)", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-codex": { - ID: "openai/gpt-5-codex", - Name: "GPT-5 Codex", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.125}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-image": { - ID: "openai/gpt-5-image", - Name: "GPT-5 Image", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 5, - Output: 10, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-mini": { - ID: "openai/gpt-5-mini", - Name: "GPT-5 Mini", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-nano": { - ID: "openai/gpt-5-nano", - Name: "GPT-5 Nano", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.072, - Output: 0.28, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/gpt-oss-20b": { - ID: "openai/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.05, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/o4-mini": { - ID: "openai/o4-mini", - Name: "o4 Mini", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.28}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openrouter/cypher-alpha:free": { - ID: "openrouter/cypher-alpha:free", - Name: "Cypher Alpha (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.4, + Output: 1.2, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 1000000, - Output: 1000000, + Output: 32768, }, }, - "openrouter/horizon-alpha": { - ID: "openrouter/horizon-alpha", - Name: "Horizon Alpha", - Attachment: true, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 128000, - }, - }, - "openrouter/horizon-beta": { - ID: "openrouter/horizon-beta", - Name: "Horizon Beta", - Attachment: true, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 128000, - }, - }, - "openrouter/sonoma-dusk-alpha": { - ID: "openrouter/sonoma-dusk-alpha", - Name: "Sonoma Dusk Alpha", - Attachment: true, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2000000, - Output: 2000000, - }, - }, - "openrouter/sonoma-sky-alpha": { - ID: "openrouter/sonoma-sky-alpha", - Name: "Sonoma Sky Alpha", - Attachment: true, - Reasoning: false, - Temperature: false, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2000000, - Output: 2000000, - }, - }, - "qwen/qwen-2.5-coder-32b-instruct": { - ID: "qwen/qwen-2.5-coder-32b-instruct", - Name: "Qwen2.5 Coder 32B Instruct", + "qwen-plus-character-ja": { + ID: "qwen-plus-character-ja", + Name: "Qwen Plus Character (Japanese)", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "qwen/qwen2.5-vl-32b-instruct:free": { - ID: "qwen/qwen2.5-vl-32b-instruct:free", - Name: "Qwen2.5 VL 32B Instruct (free)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.5, + Output: 1.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 8192, - Output: 8192, + Output: 512, }, }, - "qwen/qwen2.5-vl-72b-instruct": { - ID: "qwen/qwen2.5-vl-72b-instruct", - Name: "Qwen2.5 VL 72B Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "qwen/qwen2.5-vl-72b-instruct:free": { - ID: "qwen/qwen2.5-vl-72b-instruct:free", - Name: "Qwen2.5 VL 72B Instruct (free)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "qwen/qwen3-14b:free": { - ID: "qwen/qwen3-14b:free", - Name: "Qwen3 14B (free)", + "qwen-turbo": { + ID: "qwen-turbo", + Name: "Qwen Turbo", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0.05, + Output: 0.2, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 40960, - Output: 40960, - }, - }, - "qwen/qwen3-235b-a22b-07-25": { - ID: "qwen/qwen3-235b-a22b-07-25", - Name: "Qwen3 235B A22B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.85, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "qwen/qwen3-235b-a22b-07-25:free": { - ID: "qwen/qwen3-235b-a22b-07-25:free", - Name: "Qwen3 235B A22B Instruct 2507 (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "qwen/qwen3-235b-a22b-thinking-2507": { - ID: "qwen/qwen3-235b-a22b-thinking-2507", - Name: "Qwen3 235B A22B Thinking 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.078, - Output: 0.312, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 81920, - }, - }, - "qwen/qwen3-235b-a22b:free": { - ID: "qwen/qwen3-235b-a22b:free", - Name: "Qwen3 235B A22B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - "qwen/qwen3-30b-a3b-instruct-2507": { - ID: "qwen/qwen3-30b-a3b-instruct-2507", - Name: "Qwen3 30B A3B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262000, - Output: 262000, - }, - }, - "qwen/qwen3-30b-a3b-thinking-2507": { - ID: "qwen/qwen3-30b-a3b-thinking-2507", - Name: "Qwen3 30B A3B Thinking 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262000, - Output: 262000, - }, - }, - "qwen/qwen3-30b-a3b:free": { - ID: "qwen/qwen3-30b-a3b:free", - Name: "Qwen3 30B A3B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 40960, - Output: 40960, - }, - }, - "qwen/qwen3-32b:free": { - ID: "qwen/qwen3-32b:free", - Name: "Qwen3 32B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 40960, - Output: 40960, - }, - }, - "qwen/qwen3-8b:free": { - ID: "qwen/qwen3-8b:free", - Name: "Qwen3 8B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 40960, - Output: 40960, - }, - }, - "qwen/qwen3-coder": { - ID: "qwen/qwen3-coder", - Name: "Qwen3 Coder", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "qwen/qwen3-coder:free": { - ID: "qwen/qwen3-coder:free", - Name: "Qwen3 Coder 480B A35B Instruct (free)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 66536, - }, - }, - "qwen/qwen3-max": { - ID: "qwen/qwen3-max", - Name: "Qwen3 Max", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 32768, - }, - }, - "qwen/qwen3-next-80b-a3b-instruct": { - ID: "qwen/qwen3-next-80b-a3b-instruct", - Name: "Qwen3 Next 80B A3B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.14, - Output: 1.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "qwen/qwen3-next-80b-a3b-thinking": { - ID: "qwen/qwen3-next-80b-a3b-thinking", - Name: "Qwen3 Next 80B A3B Thinking", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.14, - Output: 1.4, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "qwen/qwq-32b:free": { - ID: "qwen/qwq-32b:free", - Name: "QwQ 32B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "rekaai/reka-flash-3": { - ID: "rekaai/reka-flash-3", - Name: "Reka Flash 3", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "sarvamai/sarvam-m:free": { - ID: "sarvamai/sarvam-m:free", - Name: "Sarvam-M (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "thudm/glm-z1-32b:free": { - ID: "thudm/glm-z1-32b:free", - Name: "GLM Z1 32B (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "tngtech/deepseek-r1t2-chimera:free": { - ID: "tngtech/deepseek-r1t2-chimera:free", - Name: "DeepSeek R1T2 Chimera (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 163840, - }, - }, - "x-ai/grok-3": { - ID: "x-ai/grok-3", - Name: "Grok 3", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: &[]float64{15}[0], - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "x-ai/grok-3-beta": { - ID: "x-ai/grok-3-beta", - Name: "Grok 3 Beta", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: &[]float64{15}[0], - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "x-ai/grok-3-mini": { - ID: "x-ai/grok-3-mini", - Name: "Grok 3 Mini", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.5}[0], - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "x-ai/grok-3-mini-beta": { - ID: "x-ai/grok-3-mini-beta", - Name: "Grok 3 Mini Beta", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.5}[0], - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "x-ai/grok-4": { - ID: "x-ai/grok-4", - Name: "Grok 4", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: &[]float64{15}[0], - }, - Limit: Limit{ - Context: 256000, - Output: 64000, - }, - }, - "x-ai/grok-4-fast": { - ID: "x-ai/grok-4-fast", - Name: "Grok 4 Fast", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.5, - CacheRead: &[]float64{0.05}[0], - CacheWrite: &[]float64{0.05}[0], - }, - Limit: Limit{ - Context: 2000000, - Output: 30000, - }, - }, - "x-ai/grok-4-fast:free": { - ID: "x-ai/grok-4-fast:free", - Name: "Grok 4 Fast (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], - CacheWrite: &[]float64{0}[0], - }, - Limit: Limit{ - Context: 2000000, - Output: 2000000, - }, - }, - "x-ai/grok-code-fast-1": { - ID: "x-ai/grok-code-fast-1", - Name: "Grok Code Fast 1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 1.5, - CacheRead: &[]float64{0.02}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 10000, - }, - }, - "z-ai/glm-4.5": { - ID: "z-ai/glm-4.5", - Name: "GLM 4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 96000, - }, - }, - "z-ai/glm-4.5-air": { - ID: "z-ai/glm-4.5-air", - Name: "GLM 4.5 Air", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 1.1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 96000, - }, - }, - "z-ai/glm-4.5-air:free": { - ID: "z-ai/glm-4.5-air:free", - Name: "GLM 4.5 Air (free)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 96000, - }, - }, - "z-ai/glm-4.5v": { - ID: "z-ai/glm-4.5v", - Name: "GLM 4.5V", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 1.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 64000, + Context: 1000000, Output: 16384, }, }, - "z-ai/glm-4.6": { - ID: "z-ai/glm-4.6", - Name: "GLM 4.6", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: &[]float64{0.11}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 128000, - }, - }, - }, - }, - "perplexity": { - ID: "perplexity", - Env: []string{"PERPLEXITY_API_KEY"}, - NPM: "@perplexity-ai/perplexity_ai", - Name: "Perplexity", - Models: map[string]ModelInfo{ - "sonar": { - ID: "sonar", - Name: "Sonar", + "qwen-vl-max": { + ID: "qwen-vl-max", + Name: "Qwen-VL Max", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 1, - Output: 1, - CacheRead: nil, + Input: 0.8, + Output: 3.2, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "sonar-pro": { - ID: "sonar-pro", - Name: "Sonar Pro", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, + Context: 131072, Output: 8192, }, }, - "sonar-reasoning": { - ID: "sonar-reasoning", - Name: "Sonar Reasoning", + "qwen-vl-ocr": { + ID: "qwen-vl-ocr", + Name: "Qwen-VL OCR", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.72, + Output: 0.72, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 34096, + Output: 4096, + }, + }, + "qwen-vl-plus": { + ID: "qwen-vl-plus", + Name: "Qwen-VL Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.21, + Output: 0.63, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-14b-instruct": { + ID: "qwen2-5-14b-instruct", + Name: "Qwen2.5 14B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-32b-instruct": { + ID: "qwen2-5-32b-instruct", + Name: "Qwen2.5 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 2.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-72b-instruct": { + ID: "qwen2-5-72b-instruct", + Name: "Qwen2.5 72B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.4, + Output: 5.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-7b-instruct": { + ID: "qwen2-5-7b-instruct", + Name: "Qwen2.5 7B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.175, + Output: 0.7, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-omni-7b": { + ID: "qwen2-5-omni-7b", + Name: "Qwen2.5-Omni 7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 2048, + }, + }, + "qwen2-5-vl-72b-instruct": { + ID: "qwen2-5-vl-72b-instruct", + Name: "Qwen2.5-VL 72B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.8, + Output: 8.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-vl-7b-instruct": { + ID: "qwen2-5-vl-7b-instruct", + Name: "Qwen2.5-VL 7B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen3-14b": { + ID: "qwen3-14b", + Name: "Qwen3 14B", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: nil, + Input: 0.35, + Output: 1.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 128000, - Output: 4096, + Context: 131072, + Output: 8192, }, }, - "sonar-reasoning-pro": { - ID: "sonar-reasoning-pro", - Name: "Sonar Reasoning Pro", - Attachment: true, + "qwen3-235b-a22b": { + ID: "qwen3-235b-a22b", + Name: "Qwen3 235B-A22B", + Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: nil, + Input: 0.7, + Output: 2.8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - }, - }, - "requesty": { - ID: "requesty", - Env: []string{"REQUESTY_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Requesty", - Models: map[string]ModelInfo{ - "anthropic/claude-3-7-sonnet": { - ID: "anthropic/claude-3-7-sonnet", - Name: "Claude Sonnet 3.7", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic/claude-4-sonnet-20250522": { - ID: "anthropic/claude-4-sonnet-20250522", - Name: "Claude Sonnet 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic/claude-opus-4": { - ID: "anthropic/claude-opus-4", - Name: "Claude Opus 4", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "anthropic/claude-opus-4-1-20250805": { - ID: "anthropic/claude-opus-4-1-20250805", - Name: "Claude Opus 4.1", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 32000, - }, - }, - "google/gemini-2.5-flash": { - ID: "google/gemini-2.5-flash", - Name: "Gemini 2.5 Flash", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.55}[0], - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-pro": { - ID: "google/gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: &[]float64{2.375}[0], - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "openai/gpt-4.1": { - ID: "openai/gpt-4.1", - Name: "GPT-4.1", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4.1-mini": { - ID: "openai/gpt-4.1-mini", - Name: "GPT-4.1 Mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.6, - CacheRead: &[]float64{0.1}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4o-mini": { - ID: "openai/gpt-4o-mini", - Name: "GPT-4o Mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.08}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, + Context: 131072, Output: 16384, }, }, - "openai/gpt-5": { - ID: "openai/gpt-5", - Name: "GPT-5", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.13}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-mini": { - ID: "openai/gpt-5-mini", - Name: "GPT-5 Mini", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.25, - Output: 2, - CacheRead: &[]float64{0.03}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32000, - }, - }, - "openai/gpt-5-nano": { - ID: "openai/gpt-5-nano", - Name: "GPT-5 Nano", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: &[]float64{0.01}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 16000, - Output: 4000, - }, - }, - "openai/o4-mini": { - ID: "openai/o4-mini", - Name: "o4 Mini", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.28}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - }, - }, - "submodel": { - ID: "submodel", - Env: []string{"SUBMODEL_INSTAGEN_ACCESS_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "submodel", - Models: map[string]ModelInfo{ - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", - Name: "Qwen3 235B A22B Instruct 2507", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", - Name: "Qwen3 235B A22B Thinking 2507", + "qwen3-32b": { + ID: "qwen3-32b", + Name: "Qwen3 32B", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 131072, - }, - }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", - Name: "Qwen3 Coder 480B A35B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 262144, - Output: 262144, - }, - }, - "deepseek-ai/DeepSeek-R1-0528": { - ID: "deepseek-ai/DeepSeek-R1-0528", - Name: "DeepSeek R1 0528", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2.15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 75000, - Output: 163840, - }, - }, - "deepseek-ai/DeepSeek-V3-0324": { - ID: "deepseek-ai/DeepSeek-V3-0324", - Name: "DeepSeek V3 0324", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 75000, - Output: 163840, - }, - }, - "deepseek-ai/DeepSeek-V3.1": { - ID: "deepseek-ai/DeepSeek-V3.1", - Name: "DeepSeek V3.1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 75000, - Output: 163840, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.5, - CacheRead: nil, + Input: 0.7, + Output: 2.8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 131072, - Output: 32768, + Output: 16384, }, }, - "zai-org/GLM-4.5-Air": { - ID: "zai-org/GLM-4.5-Air", - Name: "GLM 4.5 Air", + "qwen3-8b": { + ID: "qwen3-8b", + Name: "Qwen3 8B", Attachment: false, - Reasoning: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.1, - Output: 0.5, - CacheRead: nil, + Input: 0.18, + Output: 0.7, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 131072, - Output: 131072, + Output: 8192, }, }, - "zai-org/GLM-4.5-FP8": { - ID: "zai-org/GLM-4.5-FP8", - Name: "GLM 4.5 FP8", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - }, - }, - "synthetic": { - ID: "synthetic", - Env: []string{"SYNTHETIC_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Synthetic", - Models: map[string]ModelInfo{ - "hf:Qwen/Qwen2.5-Coder-32B-Instruct": { - ID: "hf:Qwen/Qwen2.5-Coder-32B-Instruct", - Name: "Qwen2.5-Coder-32B-Instruct", + "qwen3-asr-flash": { + ID: "qwen3-asr-flash", + Name: "Qwen3-ASR Flash", Attachment: false, Reasoning: false, - Temperature: true, + Temperature: false, Cost: Cost{ - Input: 0.8, - Output: 0.8, - CacheRead: nil, + Input: 0.035, + Output: 0.035, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 32768, - Output: 32768, - }, - }, - "hf:Qwen/Qwen3-235B-A22B-Instruct-2507": { - ID: "hf:Qwen/Qwen3-235B-A22B-Instruct-2507", - Name: "Qwen 3 235B Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 32000, - }, - }, - "hf:Qwen/Qwen3-235B-A22B-Thinking-2507": { - ID: "hf:Qwen/Qwen3-235B-A22B-Thinking-2507", - Name: "Qwen3 235B A22B Thinking 2507", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.65, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 32000, - }, - }, - "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct": { - ID: "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct", - Name: "Qwen 3 Coder 480B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 32000, - }, - }, - "hf:deepseek-ai/DeepSeek-R1": { - ID: "hf:deepseek-ai/DeepSeek-R1", - Name: "DeepSeek R1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.55, - Output: 2.19, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hf:deepseek-ai/DeepSeek-R1-0528": { - ID: "hf:deepseek-ai/DeepSeek-R1-0528", - Name: "DeepSeek R1 (0528)", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hf:deepseek-ai/DeepSeek-V3": { - ID: "hf:deepseek-ai/DeepSeek-V3", - Name: "DeepSeek V3", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 1.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hf:deepseek-ai/DeepSeek-V3-0324": { - ID: "hf:deepseek-ai/DeepSeek-V3-0324", - Name: "DeepSeek V3 (0324)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.2, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hf:deepseek-ai/DeepSeek-V3.1": { - ID: "hf:deepseek-ai/DeepSeek-V3.1", - Name: "DeepSeek V3.1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.56, - Output: 1.68, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hf:deepseek-ai/DeepSeek-V3.1-Terminus": { - ID: "hf:deepseek-ai/DeepSeek-V3.1-Terminus", - Name: "DeepSeek V3.1 Terminus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.2, - Output: 1.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "hf:meta-llama/Llama-3.1-405B-Instruct": { - ID: "hf:meta-llama/Llama-3.1-405B-Instruct", - Name: "Llama-3.1-405B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "hf:meta-llama/Llama-3.1-70B-Instruct": { - ID: "hf:meta-llama/Llama-3.1-70B-Instruct", - Name: "Llama-3.1-70B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.9, - Output: 0.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "hf:meta-llama/Llama-3.1-8B-Instruct": { - ID: "hf:meta-llama/Llama-3.1-8B-Instruct", - Name: "Llama-3.1-8B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "hf:meta-llama/Llama-3.3-70B-Instruct": { - ID: "hf:meta-llama/Llama-3.3-70B-Instruct", - Name: "Llama-3.3-70B-Instruct", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.9, - Output: 0.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { - ID: "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", - Name: "Llama-4-Maverick-17B-128E-Instruct-FP8", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.22, - Output: 0.88, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 524000, + Context: 53248, Output: 4096, }, }, - "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct": { - ID: "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct", - Name: "Llama-4-Scout-17B-16E-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 328000, - Output: 4096, - }, - }, - "hf:moonshotai/Kimi-K2-Instruct": { - ID: "hf:moonshotai/Kimi-K2-Instruct", - Name: "Kimi K2", + "qwen3-coder-30b-a3b-instruct": { + ID: "qwen3-coder-30b-a3b-instruct", + Name: "Qwen3-Coder 30B-A3B Instruct", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "hf:moonshotai/Kimi-K2-Instruct-0905": { - ID: "hf:moonshotai/Kimi-K2-Instruct-0905", - Name: "Kimi K2 0905", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.2, - Output: 1.2, - CacheRead: nil, + Input: 0.45, + Output: 2.25, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 262144, - Output: 32768, + Output: 65536, }, }, - "hf:openai/gpt-oss-120b": { - ID: "hf:openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32768, - }, - }, - "hf:zai-org/GLM-4.5": { - ID: "hf:zai-org/GLM-4.5", - Name: "GLM 4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.55, - Output: 2.19, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 96000, - }, - }, - "hf:zai-org/GLM-4.6": { - ID: "hf:zai-org/GLM-4.6", - Name: "GLM 4.6", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.55, - Output: 2.19, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 96000, - }, - }, - }, - }, - "togetherai": { - ID: "togetherai", - Env: []string{"TOGETHER_API_KEY"}, - NPM: "@ai-sdk/togetherai", - Name: "Together AI", - Models: map[string]ModelInfo{ - "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", - Name: "Qwen3 Coder 480B A35B Instruct", + "qwen3-coder-480b-a35b-instruct": { + ID: "qwen3-coder-480b-a35b-instruct", + Name: "Qwen3-Coder 480B-A35B Instruct", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 2, - Output: 2, - CacheRead: nil, + Input: 1.5, + Output: 7.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 262144, - Output: 66536, + Output: 65536, }, }, - "deepseek-ai/DeepSeek-R1": { - ID: "deepseek-ai/DeepSeek-R1", - Name: "DeepSeek R1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 7, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163839, - Output: 12288, - }, - }, - "deepseek-ai/DeepSeek-V3": { - ID: "deepseek-ai/DeepSeek-V3", - Name: "DeepSeek V3", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 1.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 12288, - }, - }, - "meta-llama/Llama-3.3-70B-Instruct-Turbo": { - ID: "meta-llama/Llama-3.3-70B-Instruct-Turbo", - Name: "Llama 3.3 70B", + "qwen3-coder-flash": { + ID: "qwen3-coder-flash", + Name: "Qwen3 Coder Flash", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.88, - Output: 0.88, - CacheRead: nil, + Input: 0.3, + Output: 1.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 131072, - Output: 66536, + Context: 1000000, + Output: 65536, }, }, - "moonshotai/Kimi-K2-Instruct": { - ID: "moonshotai/Kimi-K2-Instruct", - Name: "Kimi K2 Instruct", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 131072, - }, - }, - }, - }, - "upstage": { - ID: "upstage", - Env: []string{"UPSTAGE_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Upstage", - Models: map[string]ModelInfo{ - "solar-mini": { - ID: "solar-mini", - Name: "solar-mini", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 4096, - }, - }, - "solar-pro2": { - ID: "solar-pro2", - Name: "solar-pro2", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.25, - Output: 0.25, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - }, - }, - "v0": { - ID: "v0", - Env: []string{"V0_API_KEY"}, - NPM: "@ai-sdk/vercel", - Name: "v0", - Models: map[string]ModelInfo{ - "v0-1.0-md": { - ID: "v0-1.0-md", - Name: "v0-1.0-md", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32000, - }, - }, - "v0-1.5-lg": { - ID: "v0-1.5-lg", - Name: "v0-1.5-lg", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 512000, - Output: 32000, - }, - }, - "v0-1.5-md": { - ID: "v0-1.5-md", - Name: "v0-1.5-md", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32000, - }, - }, - }, - }, - "venice": { - ID: "venice", - Env: []string{"VENICE_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Venice AI", - Models: map[string]ModelInfo{ - "deepseek-coder-v2-lite": { - ID: "deepseek-coder-v2-lite", - Name: "DeepSeek Coder V2 Lite", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "deepseek-r1-671b": { - ID: "deepseek-r1-671b", - Name: "DeepSeek R1 671B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3.5, - Output: 14, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "dolphin-2.9.2-qwen2-72b": { - ID: "dolphin-2.9.2-qwen2-72b", - Name: "Dolphin 72B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "llama-3.1-405b": { - ID: "llama-3.1-405b", - Name: "Llama 3.1 405B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1.5, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - "llama-3.2-3b": { - ID: "llama-3.2-3b", - Name: "Llama 3.2 3B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "llama-3.3-70b": { - ID: "llama-3.3-70b", - Name: "Llama 3.3 70B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 65536, - Output: 8192, - }, - }, - "mistral-31-24b": { - ID: "mistral-31-24b", - Name: "Venice Medium", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen-2.5-coder-32b": { - ID: "qwen-2.5-coder-32b", - Name: "Qwen 2.5 Coder 32B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "qwen-2.5-qwq-32b": { - ID: "qwen-2.5-qwq-32b", - Name: "Venice Reasoning", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "qwen-2.5-vl": { - ID: "qwen-2.5-vl", - Name: "Qwen 2.5 VL 72B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "qwen3-235b": { - ID: "qwen3-235b", - Name: "Venice Large", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.5, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "qwen3-4b": { - ID: "qwen3-4b", - Name: "Venice Small", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - "venice-uncensored": { - ID: "venice-uncensored", - Name: "Venice Uncensored 1.1", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 32768, - Output: 8192, - }, - }, - }, - }, - "vercel": { - ID: "vercel", - Env: []string{"AI_GATEWAY_API_KEY"}, - NPM: "@ai-sdk/gateway", - Name: "Vercel AI Gateway", - Models: map[string]ModelInfo{ - "alibaba/qwen3-coder-plus": { - ID: "alibaba/qwen3-coder-plus", + "qwen3-coder-plus": { + ID: "qwen3-coder-plus", Name: "Qwen3 Coder Plus", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: nil, + Input: 1, + Output: 5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 1000000, - Output: 1000000, + Context: 1048576, + Output: 65536, }, }, - "alibaba/qwen3-max": { - ID: "alibaba/qwen3-max", + "qwen3-livetranslate-flash-realtime": { + ID: "qwen3-livetranslate-flash-realtime", + Name: "Qwen3-LiveTranslate Flash Realtime", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 53248, + Output: 4096, + }, + }, + "qwen3-max": { + ID: "qwen3-max", Name: "Qwen3 Max", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 1.2, - Output: 6, - CacheRead: nil, + Input: 1.2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "qwen3-next-80b-a3b-instruct": { + ID: "qwen3-next-80b-a3b-instruct", + Name: "Qwen3-Next 80B-A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-next-80b-a3b-thinking": { + ID: "qwen3-next-80b-a3b-thinking", + Name: "Qwen3-Next 80B-A3B (Thinking)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-omni-flash": { + ID: "qwen3-omni-flash", + Name: "Qwen3-Omni Flash", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.43, + Output: 1.66, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 16384, + }, + }, + "qwen3-omni-flash-realtime": { + ID: "qwen3-omni-flash-realtime", + Name: "Qwen3-Omni Flash Realtime", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.52, + Output: 1.99, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 16384, + }, + }, + "qwen3-vl-235b-a22b": { + ID: "qwen3-vl-235b-a22b", + Name: "Qwen3-VL 235B-A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 2.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-vl-30b-a3b": { + ID: "qwen3-vl-30b-a3b", + Name: "Qwen3-VL 30B-A3B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-vl-plus": { + ID: "qwen3-vl-plus", + Name: "Qwen3-VL Plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -13801,16 +2153,908 @@ func GetModelsData() map[string]ProviderInfo { Output: 32768, }, }, - "alibaba/qwen3-next-80b-a3b-instruct": { - ID: "alibaba/qwen3-next-80b-a3b-instruct", - Name: "Qwen3 Next 80B A3B Instruct", + "qwq-plus": { + ID: "qwq-plus", + Name: "QwQ Plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 2.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + }, + }, + "alibaba-cn": { + ID: "alibaba-cn", + Env: []string{"DASHSCOPE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Alibaba (China)", + Models: map[string]ModelInfo{ + "deepseek-r1": { + ID: "deepseek-r1", + Name: "DeepSeek R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 2.294, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "deepseek-r1-0528": { + ID: "deepseek-r1-0528", + Name: "DeepSeek R1 0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 2.294, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "deepseek-r1-distill-llama-70b": { + ID: "deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 16384, + }, + }, + "deepseek-r1-distill-llama-8b": { + ID: "deepseek-r1-distill-llama-8b", + Name: "DeepSeek R1 Distill Llama 8B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 16384, + }, + }, + "deepseek-r1-distill-qwen-1-5b": { + ID: "deepseek-r1-distill-qwen-1-5b", + Name: "DeepSeek R1 Distill Qwen 1.5B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 16384, + }, + }, + "deepseek-r1-distill-qwen-14b": { + ID: "deepseek-r1-distill-qwen-14b", + Name: "DeepSeek R1 Distill Qwen 14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.431, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 16384, + }, + }, + "deepseek-r1-distill-qwen-32b": { + ID: "deepseek-r1-distill-qwen-32b", + Name: "DeepSeek R1 Distill Qwen 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 16384, + }, + }, + "deepseek-r1-distill-qwen-7b": { + ID: "deepseek-r1-distill-qwen-7b", + Name: "DeepSeek R1 Distill Qwen 7B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.072, + Output: 0.144, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 16384, + }, + }, + "deepseek-v3": { + ID: "deepseek-v3", + Name: "DeepSeek V3", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.5, - Output: 2, - CacheRead: nil, + Input: 0.287, + Output: 1.147, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 8192, + }, + }, + "deepseek-v3-1": { + ID: "deepseek-v3-1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 1.721, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "deepseek-v3-2-exp": { + ID: "deepseek-v3-2-exp", + Name: "DeepSeek V3.2 Exp", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.431, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "moonshot-kimi-k2-instruct": { + ID: "moonshot-kimi-k2-instruct", + Name: "Moonshot Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 2.294, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "qvq-max": { + ID: "qvq-max", + Name: "QVQ Max", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.147, + Output: 4.588, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen-deep-research": { + ID: "qwen-deep-research", + Name: "Qwen Deep Research", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 7.742, + Output: 23.367, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 32768, + }, + }, + "qwen-doc-turbo": { + ID: "qwen-doc-turbo", + Name: "Qwen Doc Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.087, + Output: 0.144, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen-flash": { + ID: "qwen-flash", + Name: "Qwen Flash", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.022, + Output: 0.216, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 32768, + }, + }, + "qwen-long": { + ID: "qwen-long", + Name: "Qwen Long", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.072, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 10000000, + Output: 8192, + }, + }, + "qwen-math-plus": { + ID: "qwen-math-plus", + Name: "Qwen Math Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 1.721, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 3072, + }, + }, + "qwen-math-turbo": { + ID: "qwen-math-turbo", + Name: "Qwen Math Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 3072, + }, + }, + "qwen-max": { + ID: "qwen-max", + Name: "Qwen Max", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.345, + Output: 1.377, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen-mt-plus": { + ID: "qwen-mt-plus", + Name: "Qwen-MT Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.259, + Output: 0.775, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 8192, + }, + }, + "qwen-mt-turbo": { + ID: "qwen-mt-turbo", + Name: "Qwen-MT Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.101, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 8192, + }, + }, + "qwen-omni-turbo": { + ID: "qwen-omni-turbo", + Name: "Qwen-Omni Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.058, + Output: 0.23, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 2048, + }, + }, + "qwen-omni-turbo-realtime": { + ID: "qwen-omni-turbo-realtime", + Name: "Qwen-Omni Turbo Realtime", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.23, + Output: 0.918, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 2048, + }, + }, + "qwen-plus": { + ID: "qwen-plus", + Name: "Qwen Plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.115, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 32768, + }, + }, + "qwen-plus-character": { + ID: "qwen-plus-character", + Name: "Qwen Plus Character", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.115, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 4096, + }, + }, + "qwen-turbo": { + ID: "qwen-turbo", + Name: "Qwen Turbo", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.044, + Output: 0.087, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 16384, + }, + }, + "qwen-vl-max": { + ID: "qwen-vl-max", + Name: "Qwen-VL Max", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.23, + Output: 0.574, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen-vl-ocr": { + ID: "qwen-vl-ocr", + Name: "Qwen-VL OCR", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.717, + Output: 0.717, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 34096, + Output: 4096, + }, + }, + "qwen-vl-plus": { + ID: "qwen-vl-plus", + Name: "Qwen-VL Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.115, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-14b-instruct": { + ID: "qwen2-5-14b-instruct", + Name: "Qwen2.5 14B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.431, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-32b-instruct": { + ID: "qwen2-5-32b-instruct", + Name: "Qwen2.5 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-72b-instruct": { + ID: "qwen2-5-72b-instruct", + Name: "Qwen2.5 72B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 1.721, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-7b-instruct": { + ID: "qwen2-5-7b-instruct", + Name: "Qwen2.5 7B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.072, + Output: 0.144, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-coder-32b-instruct": { + ID: "qwen2-5-coder-32b-instruct", + Name: "Qwen2.5-Coder 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-coder-7b-instruct": { + ID: "qwen2-5-coder-7b-instruct", + Name: "Qwen2.5-Coder 7B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-math-72b-instruct": { + ID: "qwen2-5-math-72b-instruct", + Name: "Qwen2.5-Math 72B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.574, + Output: 1.721, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 3072, + }, + }, + "qwen2-5-math-7b-instruct": { + ID: "qwen2-5-math-7b-instruct", + Name: "Qwen2.5-Math 7B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 3072, + }, + }, + "qwen2-5-omni-7b": { + ID: "qwen2-5-omni-7b", + Name: "Qwen2.5-Omni 7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.087, + Output: 0.345, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 2048, + }, + }, + "qwen2-5-vl-72b-instruct": { + ID: "qwen2-5-vl-72b-instruct", + Name: "Qwen2.5-VL 72B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.294, + Output: 6.881, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen2-5-vl-7b-instruct": { + ID: "qwen2-5-vl-7b-instruct", + Name: "Qwen2.5-VL 7B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.717, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen3-14b": { + ID: "qwen3-14b", + Name: "Qwen3 14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.574, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen3-235b-a22b": { + ID: "qwen3-235b-a22b", + Name: "Qwen3 235B-A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 1.147, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "qwen3-32b": { + ID: "qwen3-32b", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 1.147, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "qwen3-8b": { + ID: "qwen3-8b", + Name: "Qwen3 8B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.072, + Output: 0.287, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen3-asr-flash": { + ID: "qwen3-asr-flash", + Name: "Qwen3-ASR Flash", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.032, + Output: 0.032, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 53248, + Output: 4096, + }, + }, + "qwen3-coder-30b-a3b-instruct": { + ID: "qwen3-coder-30b-a3b-instruct", + Name: "Qwen3-Coder 30B-A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.216, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "qwen3-coder-480b-a35b-instruct": { + ID: "qwen3-coder-480b-a35b-instruct", + Name: "Qwen3-Coder 480B-A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.861, + Output: 3.441, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "qwen3-coder-flash": { + ID: "qwen3-coder-flash", + Name: "Qwen3 Coder Flash", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.574, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 65536, + }, + }, + "qwen3-coder-plus": { + ID: "qwen3-coder-plus", + Name: "Qwen3 Coder Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "qwen3-max": { + ID: "qwen3-max", + Name: "Qwen3 Max", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.861, + Output: 3.441, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "qwen3-next-80b-a3b-instruct": { + ID: "qwen3-next-80b-a3b-instruct", + Name: "Qwen3-Next 80B-A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.144, + Output: 0.574, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -13818,16 +3062,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 32768, }, }, - "alibaba/qwen3-next-80b-a3b-thinking": { - ID: "alibaba/qwen3-next-80b-a3b-thinking", - Name: "Qwen3 Next 80B A3B Thinking", + "qwen3-next-80b-a3b-thinking": { + ID: "qwen3-next-80b-a3b-thinking", + Name: "Qwen3-Next 80B-A3B (Thinking)", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.5, - Output: 6, - CacheRead: nil, + Input: 0.144, + Output: 1.434, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -13835,50 +3079,211 @@ func GetModelsData() map[string]ProviderInfo { Output: 32768, }, }, - "alibaba/qwen3-vl-instruct": { - ID: "alibaba/qwen3-vl-instruct", - Name: "Qwen3 VL Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.7, - Output: 2.8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 129024, - }, - }, - "alibaba/qwen3-vl-thinking": { - ID: "alibaba/qwen3-vl-thinking", - Name: "Qwen3 VL Thinking", - Attachment: true, + "qwen3-omni-flash": { + ID: "qwen3-omni-flash", + Name: "Qwen3-Omni Flash", + Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.7, - Output: 8.4, - CacheRead: nil, + Input: 0.058, + Output: 0.23, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 16384, + }, + }, + "qwen3-omni-flash-realtime": { + ID: "qwen3-omni-flash-realtime", + Name: "Qwen3-Omni Flash Realtime", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.23, + Output: 0.918, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 16384, + }, + }, + "qwen3-vl-235b-a22b": { + ID: "qwen3-vl-235b-a22b", + Name: "Qwen3-VL 235B-A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.286705, + Output: 1.14682, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 131072, - Output: 129024, + Output: 32768, }, }, - "amazon/nova-lite": { - ID: "amazon/nova-lite", + "qwen3-vl-30b-a3b": { + ID: "qwen3-vl-30b-a3b", + Name: "Qwen3-VL 30B-A3B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.108, + Output: 0.431, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-vl-plus": { + ID: "qwen3-vl-plus", + Name: "Qwen3-VL Plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.143353, + Output: 1.433525, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "qwq-32b": { + ID: "qwq-32b", + Name: "QwQ 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.287, + Output: 0.861, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwq-plus": { + ID: "qwq-plus", + Name: "QwQ Plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.23, + Output: 0.574, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "tongyi-intent-detect-v3": { + ID: "tongyi-intent-detect-v3", + Name: "Tongyi Intent Detect V3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.058, + Output: 0.144, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 1024, + }, + }, + }, + }, + "amazon-bedrock": { + ID: "amazon-bedrock", + Env: []string{"AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION" }, + NPM: "@ai-sdk/amazon-bedrock", + Name: "Amazon Bedrock", + Models: map[string]ModelInfo{ + "ai21.jamba-1-5-large-v1:0": { + ID: "ai21.jamba-1-5-large-v1:0", + Name: "Jamba 1.5 Large", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 4096, + }, + }, + "ai21.jamba-1-5-mini-v1:0": { + ID: "ai21.jamba-1-5-mini-v1:0", + Name: "Jamba 1.5 Mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 4096, + }, + }, + "amazon.nova-2-lite-v1:0": { + ID: "amazon.nova-2-lite-v1:0", + Name: "Nova 2 Lite", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.33, + Output: 2.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "amazon.nova-lite-v1:0": { + ID: "amazon.nova-lite-v1:0", Name: "Nova Lite", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.06, - Output: 0.24, - CacheRead: &[]float64{0.015}[0], + Input: 0.06, + Output: 0.24, + CacheRead: &[]float64{0.015}[0], CacheWrite: nil, }, Limit: Limit{ @@ -13886,16 +3291,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "amazon/nova-micro": { - ID: "amazon/nova-micro", + "amazon.nova-micro-v1:0": { + ID: "amazon.nova-micro-v1:0", Name: "Nova Micro", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.035, - Output: 0.14, - CacheRead: &[]float64{0.00875}[0], + Input: 0.035, + Output: 0.14, + CacheRead: &[]float64{0.00875}[0], CacheWrite: nil, }, Limit: Limit{ @@ -13903,16 +3308,33 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "amazon/nova-pro": { - ID: "amazon/nova-pro", + "amazon.nova-premier-v1:0": { + ID: "amazon.nova-premier-v1:0", + Name: "Nova Premier", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 12.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 16384, + }, + }, + "amazon.nova-pro-v1:0": { + ID: "amazon.nova-pro-v1:0", Name: "Nova Pro", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.8, - Output: 3.2, - CacheRead: &[]float64{0.2}[0], + Input: 0.8, + Output: 3.2, + CacheRead: &[]float64{0.2}[0], CacheWrite: nil, }, Limit: Limit{ @@ -13920,16 +3342,50 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "anthropic/claude-3-5-haiku": { - ID: "anthropic/claude-3-5-haiku", + "amazon.titan-text-express-v1": { + ID: "amazon.titan-text-express-v1", + Name: "Titan Text G1 - Express", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "amazon.titan-text-express-v1:0:8k": { + ID: "amazon.titan-text-express-v1:0:8k", + Name: "Titan Text G1 - Express", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "anthropic.claude-3-5-haiku-20241022-v1:0": { + ID: "anthropic.claude-3-5-haiku-20241022-v1:0", Name: "Claude Haiku 3.5", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.8, - Output: 4, - CacheRead: &[]float64{0.08}[0], + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], CacheWrite: &[]float64{1}[0], }, Limit: Limit{ @@ -13937,50 +3393,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "anthropic/claude-3-haiku": { - ID: "anthropic/claude-3-haiku", - Name: "Claude Haiku 3", + "anthropic.claude-3-5-sonnet-20240620-v1:0": { + ID: "anthropic.claude-3-5-sonnet-20240620-v1:0", + Name: "Claude Sonnet 3.5", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.25, - Output: 1.25, - CacheRead: &[]float64{0.03}[0], - CacheWrite: &[]float64{0.3}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "anthropic/claude-3-opus": { - ID: "anthropic/claude-3-opus", - Name: "Claude Opus 3", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 4096, - }, - }, - "anthropic/claude-3.5-sonnet": { - ID: "anthropic/claude-3.5-sonnet", - Name: "Claude Sonnet 3.5 v2", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], CacheWrite: &[]float64{3.75}[0], }, Limit: Limit{ @@ -13988,101 +3410,101 @@ func GetModelsData() map[string]ProviderInfo { Output: 8192, }, }, - "anthropic/claude-3.7-sonnet": { - ID: "anthropic/claude-3.7-sonnet", + "anthropic.claude-3-5-sonnet-20241022-v2:0": { + ID: "anthropic.claude-3-5-sonnet-20241022-v2:0", + Name: "Claude Sonnet 3.5 v2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic.claude-3-7-sonnet-20250219-v1:0": { + ID: "anthropic.claude-3-7-sonnet-20250219-v1:0", Name: "Claude Sonnet 3.7", Attachment: true, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], CacheWrite: &[]float64{3.75}[0], }, Limit: Limit{ Context: 200000, - Output: 64000, + Output: 8192, }, }, - "anthropic/claude-4-1-opus": { - ID: "anthropic/claude-4-1-opus", - Name: "Claude Opus 4", + "anthropic.claude-3-haiku-20240307-v1:0": { + ID: "anthropic.claude-3-haiku-20240307-v1:0", + Name: "Claude Haiku 3", Attachment: true, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], + Input: 0.25, + Output: 1.25, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, - Output: 32000, + Output: 4096, }, }, - "anthropic/claude-4-opus": { - ID: "anthropic/claude-4-opus", - Name: "Claude Opus 4", + "anthropic.claude-3-opus-20240229-v1:0": { + ID: "anthropic.claude-3-opus-20240229-v1:0", + Name: "Claude Opus 3", Attachment: true, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 15, - Output: 75, - CacheRead: &[]float64{1.5}[0], - CacheWrite: &[]float64{18.75}[0], + Input: 15, + Output: 75, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, - Output: 32000, + Output: 4096, }, }, - "anthropic/claude-4-sonnet": { - ID: "anthropic/claude-4-sonnet", - Name: "Claude Sonnet 4", + "anthropic.claude-3-sonnet-20240229-v1:0": { + ID: "anthropic.claude-3-sonnet-20240229-v1:0", + Name: "Claude Sonnet 3", Attachment: true, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, }, Limit: Limit{ Context: 200000, - Output: 64000, + Output: 4096, }, }, - "anthropic/claude-4.5-sonnet": { - ID: "anthropic/claude-4.5-sonnet", - Name: "Claude Sonnet 4.5", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.3}[0], - CacheWrite: &[]float64{3.75}[0], - }, - Limit: Limit{ - Context: 200000, - Output: 64000, - }, - }, - "anthropic/claude-haiku-4.5": { - ID: "anthropic/claude-haiku-4.5", + "anthropic.claude-haiku-4-5-20251001-v1:0": { + ID: "anthropic.claude-haiku-4-5-20251001-v1:0", Name: "Claude Haiku 4.5", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1, - Output: 1.25, - CacheRead: &[]float64{0.1}[0], + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], CacheWrite: &[]float64{1.25}[0], }, Limit: Limit{ @@ -14090,33 +3512,220 @@ func GetModelsData() map[string]ProviderInfo { Output: 64000, }, }, - "cerebras/qwen3-coder": { - ID: "cerebras/qwen3-coder", - Name: "Qwen 3 Coder 480B", + "anthropic.claude-instant-v1": { + ID: "anthropic.claude-instant-v1", + Name: "Claude Instant", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 2, - Output: 2, - CacheRead: nil, + Input: 0.8, + Output: 2.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 131000, + Context: 100000, + Output: 4096, + }, + }, + "anthropic.claude-opus-4-1-20250805-v1:0": { + ID: "anthropic.claude-opus-4-1-20250805-v1:0", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, Output: 32000, }, }, - "deepseek/deepseek-r1": { - ID: "deepseek/deepseek-r1", + "anthropic.claude-opus-4-20250514-v1:0": { + ID: "anthropic.claude-opus-4-20250514-v1:0", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic.claude-opus-4-5-20251101-v1:0": { + ID: "anthropic.claude-opus-4-5-20251101-v1:0", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic.claude-sonnet-4-20250514-v1:0": { + ID: "anthropic.claude-sonnet-4-20250514-v1:0", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic.claude-sonnet-4-5-20250929-v1:0": { + ID: "anthropic.claude-sonnet-4-5-20250929-v1:0", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic.claude-v2": { + ID: "anthropic.claude-v2", + Name: "Claude 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 8, + Output: 24, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 100000, + Output: 4096, + }, + }, + "anthropic.claude-v2:1": { + ID: "anthropic.claude-v2:1", + Name: "Claude 2.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 8, + Output: 24, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "cohere.command-light-text-v14": { + ID: "cohere.command-light-text-v14", + Name: "Command Light", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "cohere.command-r-plus-v1:0": { + ID: "cohere.command-r-plus-v1:0", + Name: "Command R+", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cohere.command-r-v1:0": { + ID: "cohere.command-r-v1:0", + Name: "Command R", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cohere.command-text-v14": { + ID: "cohere.command-text-v14", + Name: "Command", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "deepseek.r1-v1:0": { + ID: "deepseek.r1-v1:0", Name: "DeepSeek-R1", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1.35, - Output: 5.4, - CacheRead: nil, + Input: 1.35, + Output: 5.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -14124,458 +3733,373 @@ func GetModelsData() map[string]ProviderInfo { Output: 32768, }, }, - "deepseek/deepseek-r1-distill-llama-70b": { - ID: "deepseek/deepseek-r1-distill-llama-70b", - Name: "DeepSeek R1 Distill Llama 70B", + "deepseek.v3-v1:0": { + ID: "deepseek.v3-v1:0", + Name: "DeepSeek-V3.1", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.75, - Output: 0.99, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "deepseek/deepseek-v3.1-terminus": { - ID: "deepseek/deepseek-v3.1-terminus", - Name: "DeepSeek V3.1 Terminus", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.27, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 8192, - }, - }, - "deepseek/deepseek-v3.2-exp": { - ID: "deepseek/deepseek-v3.2-exp", - Name: "DeepSeek V3.2 Exp", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.28, - Output: 0.42, - CacheRead: nil, + Input: 0.58, + Output: 1.68, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 163840, - Output: 8192, + Output: 81920, }, }, - "deepseek/deepseek-v3.2-exp-thinking": { - ID: "deepseek/deepseek-v3.2-exp-thinking", - Name: "DeepSeek V3.2 Exp Thinking", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.28, - Output: 0.42, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 163840, - Output: 8192, - }, - }, - "google/gemini-2.0-flash": { - ID: "google/gemini-2.0-flash", - Name: "Gemini 2.0 Flash", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "google/gemini-2.0-flash-lite": { - ID: "google/gemini-2.0-flash-lite", - Name: "Gemini 2.0 Flash Lite", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.075, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 8192, - }, - }, - "google/gemini-2.5-flash": { - ID: "google/gemini-2.5-flash", - Name: "Gemini 2.5 Flash", + "global.anthropic.claude-opus-4-5-20251101-v1:0": { + ID: "global.anthropic.claude-opus-4-5-20251101-v1:0", + Name: "Claude Opus 4.5 (Global)", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, + Input: 5, + Output: 25, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], }, Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-flash-lite": { - ID: "google/gemini-2.5-flash-lite", - Name: "Gemini 2.5 Flash Lite", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-flash-lite-preview-09-2025": { - ID: "google/gemini-2.5-flash-lite-preview-09-2025", - Name: "Gemini 2.5 Flash Lite Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.025}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-flash-preview-09-2025": { - ID: "google/gemini-2.5-flash-preview-09-2025", - Name: "Gemini 2.5 Flash Preview 09-25", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 2.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: &[]float64{0.383}[0], - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "google/gemini-2.5-pro": { - ID: "google/gemini-2.5-pro", - Name: "Gemini 2.5 Pro", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.31}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1048576, - Output: 65536, - }, - }, - "meta/llama-3.3-70b": { - ID: "meta/llama-3.3-70b", - Name: "Llama-3.3-70B-Instruct", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "meta/llama-4-maverick": { - ID: "meta/llama-4-maverick", - Name: "Llama-4-Maverick-17B-128E-Instruct-FP8", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "meta/llama-4-scout": { - ID: "meta/llama-4-scout", - Name: "Llama-4-Scout-17B-16E-Instruct-FP8", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 4096, - }, - }, - "mistral/codestral": { - ID: "mistral/codestral", - Name: "Codestral", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.9, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 4096, - }, - }, - "mistral/magistral-medium": { - ID: "mistral/magistral-medium", - Name: "Magistral Medium", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "mistral/magistral-small": { - ID: "mistral/magistral-small", - Name: "Magistral Small", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.5, - Output: 1.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistral/ministral-3b": { - ID: "mistral/ministral-3b", - Name: "Ministral 3B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.04, - Output: 0.04, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistral/ministral-8b": { - ID: "mistral/ministral-8b", - Name: "Ministral 8B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistral/mistral-large": { - ID: "mistral/mistral-large", - Name: "Mistral Large", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 16384, - }, - }, - "mistral/mistral-small": { - ID: "mistral/mistral-small", - Name: "Mistral Small", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "mistral/mixtral-8x22b-instruct": { - ID: "mistral/mixtral-8x22b-instruct", - Name: "Mixtral 8x22B", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 64000, + Context: 200000, Output: 64000, }, }, - "mistral/pixtral-12b": { - ID: "mistral/pixtral-12b", - Name: "Pixtral 12B", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "mistral/pixtral-large": { - ID: "mistral/pixtral-large", - Name: "Pixtral Large", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 6, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 128000, - }, - }, - "moonshotai/kimi-k2": { - ID: "moonshotai/kimi-k2", - Name: "Kimi K2 Instruct", + "google.gemma-3-12b-it": { + ID: "google.gemma-3-12b-it", + Name: "Google Gemma 3 12B", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 1, - Output: 3, - CacheRead: nil, + Input: 0.049999999999999996, + Output: 0.09999999999999999, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 131072, - Output: 16384, + Output: 8192, }, }, - "morph/morph-v3-fast": { - ID: "morph/morph-v3-fast", - Name: "Morph v3 Fast", - Attachment: false, + "google.gemma-3-27b-it": { + ID: "google.gemma-3-27b-it", + Name: "Google Gemma 3 27B Instruct", + Attachment: true, Reasoning: false, - Temperature: false, + Temperature: true, Cost: Cost{ - Input: 0.8, - Output: 1.2, - CacheRead: nil, + Input: 0.12, + Output: 0.2, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 16000, - Output: 16000, + Context: 202752, + Output: 8192, }, }, - "morph/morph-v3-large": { - ID: "morph/morph-v3-large", - Name: "Morph v3 Large", + "google.gemma-3-4b-it": { + ID: "google.gemma-3-4b-it", + Name: "Gemma 3 4B IT", Attachment: false, Reasoning: false, - Temperature: false, + Temperature: true, Cost: Cost{ - Input: 0.9, - Output: 1.9, - CacheRead: nil, + Input: 0.04, + Output: 0.08, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta.llama3-1-70b-instruct-v1:0": { + ID: "meta.llama3-1-70b-instruct-v1:0", + Name: "Llama 3.1 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.72, + Output: 0.72, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta.llama3-1-8b-instruct-v1:0": { + ID: "meta.llama3-1-8b-instruct-v1:0", + Name: "Llama 3.1 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.22, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta.llama3-2-11b-instruct-v1:0": { + ID: "meta.llama3-2-11b-instruct-v1:0", + Name: "Llama 3.2 11B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.16, + Output: 0.16, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta.llama3-2-1b-instruct-v1:0": { + ID: "meta.llama3-2-1b-instruct-v1:0", + Name: "Llama 3.2 1B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 4096, + }, + }, + "meta.llama3-2-3b-instruct-v1:0": { + ID: "meta.llama3-2-3b-instruct-v1:0", + Name: "Llama 3.2 3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 4096, + }, + }, + "meta.llama3-2-90b-instruct-v1:0": { + ID: "meta.llama3-2-90b-instruct-v1:0", + Name: "Llama 3.2 90B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.72, + Output: 0.72, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta.llama3-3-70b-instruct-v1:0": { + ID: "meta.llama3-3-70b-instruct-v1:0", + Name: "Llama 3.3 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.72, + Output: 0.72, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta.llama3-70b-instruct-v1:0": { + ID: "meta.llama3-70b-instruct-v1:0", + Name: "Llama 3 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.65, + Output: 3.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta.llama3-8b-instruct-v1:0": { + ID: "meta.llama3-8b-instruct-v1:0", + Name: "Llama 3 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta.llama4-maverick-17b-instruct-v1:0": { + ID: "meta.llama4-maverick-17b-instruct-v1:0", + Name: "Llama 4 Maverick 17B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.24, + Output: 0.97, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 16384, + }, + }, + "meta.llama4-scout-17b-instruct-v1:0": { + ID: "meta.llama4-scout-17b-instruct-v1:0", + Name: "Llama 4 Scout 17B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.66, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 3500000, + Output: 16384, + }, + }, + "minimax.minimax-m2": { + ID: "minimax.minimax-m2", + Name: "MiniMax M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204608, + Output: 128000, + }, + }, + "mistral.ministral-3-14b-instruct": { + ID: "mistral.ministral-3-14b-instruct", + Name: "Ministral 14B 3.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistral.ministral-3-8b-instruct": { + ID: "mistral.ministral-3-8b-instruct", + Name: "Ministral 3 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistral.mistral-7b-instruct-v0:2": { + ID: "mistral.mistral-7b-instruct-v0:2", + Name: "Mistral-7B-Instruct-v0.3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.11, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 127000, + }, + }, + "mistral.mistral-large-2402-v1:0": { + ID: "mistral.mistral-large-2402-v1:0", + Name: "Mistral Large (24.02)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistral.mixtral-8x7b-instruct-v0:1": { + ID: "mistral.mixtral-8x7b-instruct-v0:1", + Name: "Mixtral-8x7B-Instruct-v0.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 0.7, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -14583,16 +4107,16 @@ func GetModelsData() map[string]ProviderInfo { Output: 32000, }, }, - "openai/gpt-4-turbo": { - ID: "openai/gpt-4-turbo", - Name: "GPT-4 Turbo", - Attachment: true, + "mistral.voxtral-mini-3b-2507": { + ID: "mistral.voxtral-mini-3b-2507", + Name: "Voxtral Mini 3B 2507", + Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 10, - Output: 30, - CacheRead: nil, + Input: 0.04, + Output: 0.04, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -14600,755 +4124,1052 @@ func GetModelsData() map[string]ProviderInfo { Output: 4096, }, }, - "openai/gpt-4.1": { - ID: "openai/gpt-4.1", - Name: "GPT-4.1", + "mistral.voxtral-small-24b-2507": { + ID: "mistral.voxtral-small-24b-2507", + Name: "Voxtral Small 24B 2507", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], + Input: 0.15, + Output: 0.35, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4.1-mini": { - ID: "openai/gpt-4.1-mini", - Name: "GPT-4.1 mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.4, - Output: 1.6, - CacheRead: &[]float64{0.1}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4.1-nano": { - ID: "openai/gpt-4.1-nano", - Name: "GPT-4.1 nano", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.4, - CacheRead: &[]float64{0.03}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 1047576, - Output: 32768, - }, - }, - "openai/gpt-4o": { - ID: "openai/gpt-4o", - Name: "GPT-4o", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2.5, - Output: 10, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-4o-mini": { - ID: "openai/gpt-4o-mini", - Name: "GPT-4o mini", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.15, - Output: 0.6, - CacheRead: &[]float64{0.08}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 16384, - }, - }, - "openai/gpt-5": { - ID: "openai/gpt-5", - Name: "GPT-5", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.13}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-codex": { - ID: "openai/gpt-5-codex", - Name: "GPT-5-Codex", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.25, - Output: 10, - CacheRead: &[]float64{0.125}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-mini": { - ID: "openai/gpt-5-mini", - Name: "GPT-5 Mini", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.25, - Output: 2, - CacheRead: &[]float64{0.03}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-5-nano": { - ID: "openai/gpt-5-nano", - Name: "GPT-5 Nano", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 0.05, - Output: 0.4, - CacheRead: &[]float64{0.01}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 400000, - Output: 128000, - }, - }, - "openai/gpt-oss-120b": { - ID: "openai/gpt-oss-120b", - Name: "GPT OSS 120B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.1, - Output: 0.5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/gpt-oss-20b": { - ID: "openai/gpt-oss-20b", - Name: "GPT OSS 20B", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.07, - Output: 0.3, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 32768, - }, - }, - "openai/o1": { - ID: "openai/o1", - Name: "o1", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 15, - Output: 60, - CacheRead: &[]float64{7.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openai/o3": { - ID: "openai/o3", - Name: "o3", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: &[]float64{0.5}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openai/o3-mini": { - ID: "openai/o3-mini", - Name: "o3-mini", - Attachment: false, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.55}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "openai/o4-mini": { - ID: "openai/o4-mini", - Name: "o4-mini", - Attachment: true, - Reasoning: true, - Temperature: false, - Cost: Cost{ - Input: 1.1, - Output: 4.4, - CacheRead: &[]float64{0.28}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 100000, - }, - }, - "perplexity/sonar": { - ID: "perplexity/sonar", - Name: "Sonar", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 1, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 127000, - Output: 8000, - }, - }, - "perplexity/sonar-pro": { - ID: "perplexity/sonar-pro", - Name: "Sonar Pro", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 200000, - Output: 8000, - }, - }, - "perplexity/sonar-reasoning": { - ID: "perplexity/sonar-reasoning", - Name: "Sonar Reasoning", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 1, - Output: 5, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 127000, - Output: 8000, - }, - }, - "perplexity/sonar-reasoning-pro": { - ID: "perplexity/sonar-reasoning-pro", - Name: "Sonar Reasoning Pro", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 8, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 127000, - Output: 8000, - }, - }, - "vercel/v0-1.0-md": { - ID: "vercel/v0-1.0-md", - Name: "v0-1.0-md", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32000, - }, - }, - "vercel/v0-1.5-md": { - ID: "vercel/v0-1.5-md", - Name: "v0-1.5-md", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: nil, - CacheWrite: nil, - }, - Limit: Limit{ - Context: 128000, - Output: 32000, - }, - }, - "xai/grok-2": { - ID: "xai/grok-2", - Name: "Grok 2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, + Context: 32000, Output: 8192, }, }, - "xai/grok-2-vision": { - ID: "xai/grok-2-vision", - Name: "Grok 2 Vision", - Attachment: true, - Reasoning: false, + "moonshot.kimi-k2-thinking": { + ID: "moonshot.kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], + Input: 0.6, + Output: 2.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 8192, + Context: 256000, + Output: 256000, + }, + }, + "nvidia.nemotron-nano-12b-v2": { + ID: "nvidia.nemotron-nano-12b-v2", + Name: "NVIDIA Nemotron Nano 12B v2 VL BF16", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, Output: 4096, }, }, - "xai/grok-3": { - ID: "xai/grok-3", - Name: "Grok 3", + "nvidia.nemotron-nano-9b-v2": { + ID: "nvidia.nemotron-nano-9b-v2", + Name: "NVIDIA Nemotron Nano 9B v2", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "xai/grok-3-fast": { - ID: "xai/grok-3-fast", - Name: "Grok 3 Fast", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 5, - Output: 25, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "xai/grok-3-mini": { - ID: "xai/grok-3-mini", - Name: "Grok 3 Mini", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "xai/grok-3-mini-fast": { - ID: "xai/grok-3-mini-fast", - Name: "Grok 3 Mini Fast", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 4, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "xai/grok-4": { - ID: "xai/grok-4", - Name: "Grok 4", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 64000, - }, - }, - "xai/grok-4-fast": { - ID: "xai/grok-4-fast", - Name: "Grok 4 Fast", - Attachment: true, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.5, - CacheRead: &[]float64{0.05}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2000000, - Output: 30000, - }, - }, - "xai/grok-4-fast-non-reasoning": { - ID: "xai/grok-4-fast-non-reasoning", - Name: "Grok 4 Fast (Non-Reasoning)", - Attachment: true, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 0.5, - CacheRead: &[]float64{0.05}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 2000000, - Output: 30000, - }, - }, - "xai/grok-code-fast-1": { - ID: "xai/grok-code-fast-1", - Name: "Grok Code Fast 1", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.2, - Output: 1.5, - CacheRead: &[]float64{0.02}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 256000, - Output: 10000, - }, - }, - "zai/glm-4.5": { - ID: "zai/glm-4.5", - Name: "GLM 4.5", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: nil, + Input: 0.06, + Output: 0.23, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 96000, + Output: 4096, }, }, - "zai/glm-4.5-air": { - ID: "zai/glm-4.5-air", - Name: "GLM 4.5 Air", + "openai.gpt-oss-120b-1:0": { + ID: "openai.gpt-oss-120b-1:0", + Name: "gpt-oss-120b", Attachment: false, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 1.1, - CacheRead: nil, + Input: 0.15, + Output: 0.6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 96000, + Output: 4096, }, }, - "zai/glm-4.5v": { - ID: "zai/glm-4.5v", - Name: "GLM 4.5V", - Attachment: true, - Reasoning: true, + "openai.gpt-oss-20b-1:0": { + ID: "openai.gpt-oss-20b-1:0", + Name: "gpt-oss-20b", + Attachment: false, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 1.8, - CacheRead: nil, + Input: 0.07, + Output: 0.3, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 66000, - Output: 16000, + Context: 128000, + Output: 4096, }, }, - "zai/glm-4.6": { - ID: "zai/glm-4.6", - Name: "GLM 4.6", + "openai.gpt-oss-safeguard-120b": { + ID: "openai.gpt-oss-safeguard-120b", + Name: "GPT OSS Safeguard 120B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "openai.gpt-oss-safeguard-20b": { + ID: "openai.gpt-oss-safeguard-20b", + Name: "GPT OSS Safeguard 20B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "qwen.qwen3-235b-a22b-2507-v1:0": { + ID: "qwen.qwen3-235b-a22b-2507-v1:0", + Name: "Qwen3 235B A22B 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "qwen.qwen3-32b-v1:0": { + ID: "qwen.qwen3-32b-v1:0", + Name: "Qwen3 32B (dense)", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: nil, + Input: 0.15, + Output: 0.6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 200000, - Output: 96000, + Context: 16384, + Output: 16384, + }, + }, + "qwen.qwen3-coder-30b-a3b-v1:0": { + ID: "qwen.qwen3-coder-30b-a3b-v1:0", + Name: "Qwen3 Coder 30B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "qwen.qwen3-coder-480b-a35b-v1:0": { + ID: "qwen.qwen3-coder-480b-a35b-v1:0", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "qwen.qwen3-next-80b-a3b": { + ID: "qwen.qwen3-next-80b-a3b", + Name: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "qwen.qwen3-vl-235b-a22b": { + ID: "qwen.qwen3-vl-235b-a22b", + Name: "Qwen/Qwen3-VL-235B-A22B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, }, }, }, }, - "wandb": { - ID: "wandb", - Env: []string{"WANDB_API_KEY"}, - NPM: "@ai-sdk/openai-compatible", - Name: "Weights & Biases", + "anthropic": { + ID: "anthropic", + Env: []string{"ANTHROPIC_API_KEY" }, + NPM: "@ai-sdk/anthropic", + Name: "Anthropic", Models: map[string]ModelInfo{ - "Qwen/Qwen3-235B-A22B-Instruct-2507": { - ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", - Name: "Qwen3 235B A22B Instruct 2507", + "claude-3-5-haiku-20241022": { + ID: "claude-3-5-haiku-20241022", + Name: "Claude Haiku 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3-5-haiku-latest": { + ID: "claude-3-5-haiku-latest", + Name: "Claude Haiku 3.5 (latest)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3-5-sonnet-20240620": { + ID: "claude-3-5-sonnet-20240620", + Name: "Claude Sonnet 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3-5-sonnet-20241022": { + ID: "claude-3-5-sonnet-20241022", + Name: "Claude Sonnet 3.5 v2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3-7-sonnet-20250219": { + ID: "claude-3-7-sonnet-20250219", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-3-7-sonnet-latest": { + ID: "claude-3-7-sonnet-latest", + Name: "Claude Sonnet 3.7 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-3-haiku-20240307": { + ID: "claude-3-haiku-20240307", + Name: "Claude Haiku 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1.25, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "claude-3-opus-20240229": { + ID: "claude-3-opus-20240229", + Name: "Claude Opus 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "claude-3-sonnet-20240229": { + ID: "claude-3-sonnet-20240229", + Name: "Claude Sonnet 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "claude-haiku-4-5": { + ID: "claude-haiku-4-5", + Name: "Claude Haiku 4.5 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-haiku-4-5-20251001": { + ID: "claude-haiku-4-5-20251001", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4-0": { + ID: "claude-opus-4-0", + Name: "Claude Opus 4 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-1": { + ID: "claude-opus-4-1", + Name: "Claude Opus 4.1 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-1-20250805": { + ID: "claude-opus-4-1-20250805", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-20250514": { + ID: "claude-opus-4-20250514", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-5": { + ID: "claude-opus-4-5", + Name: "Claude Opus 4.5 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4-5-20251101": { + ID: "claude-opus-4-5-20251101", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-0": { + ID: "claude-sonnet-4-0", + Name: "Claude Sonnet 4 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-20250514": { + ID: "claude-sonnet-4-20250514", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-5": { + ID: "claude-sonnet-4-5", + Name: "Claude Sonnet 4.5 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-5-20250929": { + ID: "claude-sonnet-4-5-20250929", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + }, + }, + "azure": { + ID: "azure", + Env: []string{"AZURE_RESOURCE_NAME", "AZURE_API_KEY" }, + NPM: "@ai-sdk/azure", + Name: "Azure", + Models: map[string]ModelInfo{ + "claude-haiku-4-5": { + ID: "claude-haiku-4-5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4-1": { + ID: "claude-opus-4-1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-5": { + ID: "claude-opus-4-5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-5": { + ID: "claude-sonnet-4-5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "codestral-2501": { + ID: "codestral-2501", + Name: "Codestral 25.01", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.1, - Output: 0.1, - CacheRead: nil, + Input: 0.3, + Output: 0.9, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 262144, - Output: 131072, + Context: 256000, + Output: 256000, }, }, - "Qwen/Qwen3-235B-A22B-Thinking-2507": { - ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", - Name: "Qwen3-235B-A22B-Thinking-2507", + "codex-mini": { + ID: "codex-mini", + Name: "Codex Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.5, + Output: 6, + CacheRead: &[]float64{0.375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "cohere-command-a": { + ID: "cohere-command-a", + Name: "Command A", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.1, - Output: 0.1, - CacheRead: nil, + Input: 2.5, + Output: 10, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 262144, - Output: 131072, + Context: 256000, + Output: 8000, }, }, - "Qwen/Qwen3-Coder-480B-A35B-Instruct": { - ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", - Name: "Qwen3-Coder-480B-A35B-Instruct", + "cohere-command-r-08-2024": { + ID: "cohere-command-r-08-2024", + Name: "Command R", Attachment: false, - Reasoning: false, + Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1, - Output: 1.5, - CacheRead: nil, + Input: 0.15, + Output: 0.6, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 262144, - Output: 66536, + Context: 128000, + Output: 4000, }, }, - "deepseek-ai/DeepSeek-R1-0528": { - ID: "deepseek-ai/DeepSeek-R1-0528", + "cohere-command-r-plus-08-2024": { + ID: "cohere-command-r-plus-08-2024", + Name: "Command R+", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4000, + }, + }, + "cohere-embed-v-4-0": { + ID: "cohere-embed-v-4-0", + Name: "Embed v4", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.12, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 1536, + }, + }, + "cohere-embed-v3-english": { + ID: "cohere-embed-v3-english", + Name: "Embed v3 English", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512, + Output: 1024, + }, + }, + "cohere-embed-v3-multilingual": { + ID: "cohere-embed-v3-multilingual", + Name: "Embed v3 Multilingual", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512, + Output: 1024, + }, + }, + "deepseek-r1": { + ID: "deepseek-r1", + Name: "DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek-r1-0528": { + ID: "deepseek-r1-0528", Name: "DeepSeek-R1-0528", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 1.35, - Output: 5.4, - CacheRead: nil, + Input: 1.35, + Output: 5.4, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 161000, + Context: 163840, Output: 163840, }, }, - "deepseek-ai/DeepSeek-V3-0324": { - ID: "deepseek-ai/DeepSeek-V3-0324", + "deepseek-v3-0324": { + ID: "deepseek-v3-0324", Name: "DeepSeek-V3-0324", Attachment: false, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 1.14, - Output: 2.75, - CacheRead: nil, + Input: 1.14, + Output: 4.56, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 161000, - Output: 8192, + Context: 131072, + Output: 131072, }, }, - "meta-llama/Llama-3.1-8B-Instruct": { - ID: "meta-llama/Llama-3.1-8B-Instruct", - Name: "Meta-Llama-3.1-8B-Instruct", + "deepseek-v3.1": { + ID: "deepseek-v3.1", + Name: "DeepSeek-V3.1", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.22, - Output: 0.22, - CacheRead: nil, + Input: 0.56, + Output: 1.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "deepseek-v3.2": { + ID: "deepseek-v3.2", + Name: "DeepSeek-V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: &[]float64{0.028}[0], CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 32768, + Output: 128000, }, }, - "meta-llama/Llama-3.3-70B-Instruct": { - ID: "meta-llama/Llama-3.3-70B-Instruct", - Name: "Llama-3.3-70B-Instruct", + "deepseek-v3.2-speciale": { + ID: "deepseek-v3.2-speciale", + Name: "DeepSeek-V3.2-Speciale", Attachment: false, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.71, - Output: 0.71, - CacheRead: nil, + Input: 0.28, + Output: 0.42, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ Context: 128000, - Output: 32768, + Output: 128000, }, }, - "meta-llama/Llama-4-Scout-17B-16E-Instruct": { - ID: "meta-llama/Llama-4-Scout-17B-16E-Instruct", - Name: "Llama 4 Scout 17B 16E Instruct", + "gpt-3.5-turbo-0125": { + ID: "gpt-3.5-turbo-0125", + Name: "GPT-3.5 Turbo 0125", Attachment: false, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.17, - Output: 0.66, - CacheRead: nil, + Input: 0.5, + Output: 1.5, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ - Context: 64000, + Context: 16384, + Output: 16384, + }, + }, + "gpt-3.5-turbo-0301": { + ID: "gpt-3.5-turbo-0301", + Name: "GPT-3.5 Turbo 0301", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "gpt-3.5-turbo-0613": { + ID: "gpt-3.5-turbo-0613", + Name: "GPT-3.5 Turbo 0613", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "gpt-3.5-turbo-1106": { + ID: "gpt-3.5-turbo-1106", + Name: "GPT-3.5 Turbo 1106", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "gpt-3.5-turbo-instruct": { + ID: "gpt-3.5-turbo-instruct", + Name: "GPT-3.5 Turbo Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "gpt-4": { + ID: "gpt-4", + Name: "GPT-4", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 60, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, Output: 8192, }, }, - "microsoft/Phi-4-mini-instruct": { - ID: "microsoft/Phi-4-mini-instruct", - Name: "Phi-4-mini-instruct", + "gpt-4-32k": { + ID: "gpt-4-32k", + Name: "GPT-4 32K", Attachment: false, - Reasoning: true, + Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.08, - Output: 0.35, - CacheRead: nil, + Input: 60, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "gpt-4-turbo": { + ID: "gpt-4-turbo", + Name: "GPT-4 Turbo", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 30, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -15356,16 +5177,84 @@ func GetModelsData() map[string]ProviderInfo { Output: 4096, }, }, - "moonshotai/Kimi-K2-Instruct": { - ID: "moonshotai/Kimi-K2-Instruct", - Name: "Kimi-K2-Instruct", - Attachment: false, + "gpt-4-turbo-vision": { + ID: "gpt-4-turbo-vision", + Name: "GPT-4 Turbo Vision", + Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 1.35, - Output: 4, - CacheRead: nil, + Input: 10, + Output: 30, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-mini": { + ID: "gpt-4.1-mini", + Name: "GPT-4.1 mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-nano": { + ID: "gpt-4.1-nano", + Name: "GPT-4.1 nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4o": { + ID: "gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15373,114 +5262,242 @@ func GetModelsData() map[string]ProviderInfo { Output: 16384, }, }, - }, - }, - "xai": { - ID: "xai", - Env: []string{"XAI_API_KEY"}, - NPM: "@ai-sdk/xai", - Name: "xAI", - Models: map[string]ModelInfo{ - "grok-2": { - ID: "grok-2", - Name: "Grok 2", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-2-1212": { - ID: "grok-2-1212", - Name: "Grok 2 (1212)", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-2-latest": { - ID: "grok-2-latest", - Name: "Grok 2 Latest", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-2-vision": { - ID: "grok-2-vision", - Name: "Grok 2 Vision", + "gpt-4o-mini": { + ID: "gpt-4o-mini", + Name: "GPT-4o mini", Attachment: true, Reasoning: false, Temperature: true, Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], CacheWrite: nil, }, Limit: Limit{ - Context: 8192, - Output: 4096, + Context: 128000, + Output: 16384, }, }, - "grok-2-vision-1212": { - ID: "grok-2-vision-1212", - Name: "Grok 2 Vision (1212)", + "gpt-5": { + ID: "gpt-5", + Name: "GPT-5", Attachment: true, - Reasoning: false, - Temperature: true, + Reasoning: true, + Temperature: false, Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], CacheWrite: nil, }, Limit: Limit{ - Context: 8192, - Output: 4096, + Context: 272000, + Output: 128000, }, }, - "grok-2-vision-latest": { - ID: "grok-2-vision-latest", - Name: "Grok 2 Vision Latest", + "gpt-5-chat": { + ID: "gpt-5-chat", + Name: "GPT-5 Chat", Attachment: true, - Reasoning: false, - Temperature: true, + Reasoning: true, + Temperature: false, Cost: Cost{ - Input: 2, - Output: 10, - CacheRead: &[]float64{2}[0], + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], CacheWrite: nil, }, Limit: Limit{ - Context: 8192, - Output: 4096, + Context: 128000, + Output: 16384, + }, + }, + "gpt-5-codex": { + ID: "gpt-5-codex", + Name: "GPT-5-Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5-pro": { + ID: "gpt-5-pro", + Name: "GPT-5 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 272000, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5.1-chat": { + ID: "gpt-5.1-chat", + Name: "GPT-5.1 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "GPT-5.1 Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-max": { + ID: "gpt-5.1-codex-max", + Name: "GPT-5.1 Codex Max", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "GPT-5.1 Codex Mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2": { + ID: "gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2-chat": { + ID: "gpt-5.2-chat", + Name: "GPT-5.2 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, }, }, "grok-3": { @@ -15490,60 +5507,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: false, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-3-fast": { - ID: "grok-3-fast", - Name: "Grok 3 Fast", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 5, - Output: 25, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-3-fast-latest": { - ID: "grok-3-fast-latest", - Name: "Grok 3 Fast Latest", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 5, - Output: 25, - CacheRead: &[]float64{1.25}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-3-latest": { - ID: "grok-3-latest", - Name: "Grok 3 Latest", - Attachment: false, - Reasoning: false, - Temperature: true, - Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15558,60 +5524,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.3, - Output: 0.5, - CacheRead: &[]float64{0.075}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-3-mini-fast": { - ID: "grok-3-mini-fast", - Name: "Grok 3 Mini Fast", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 4, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-3-mini-fast-latest": { - ID: "grok-3-mini-fast-latest", - Name: "Grok 3 Mini Fast Latest", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.6, - Output: 4, - CacheRead: &[]float64{0.15}[0], - CacheWrite: nil, - }, - Limit: Limit{ - Context: 131072, - Output: 8192, - }, - }, - "grok-3-mini-latest": { - ID: "grok-3-mini-latest", - Name: "Grok 3 Mini Latest", - Attachment: false, - Reasoning: true, - Temperature: true, - Cost: Cost{ - Input: 0.3, - Output: 0.5, - CacheRead: &[]float64{0.075}[0], + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15626,9 +5541,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 3, - Output: 15, - CacheRead: &[]float64{0.75}[0], + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15636,6 +5551,27957 @@ func GetModelsData() map[string]ProviderInfo { Output: 64000, }, }, + "grok-4-fast-non-reasoning": { + ID: "grok-4-fast-non-reasoning", + Name: "Grok 4 Fast (Non-Reasoning)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "grok-4-fast-reasoning": { + ID: "grok-4-fast-reasoning", + Name: "Grok 4 Fast (Reasoning)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "grok-code-fast-1": { + ID: "grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 10000, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "llama-3.2-11b-vision-instruct": { + ID: "llama-3.2-11b-vision-instruct", + Name: "Llama-3.2-11B-Vision-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.37, + Output: 0.37, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-3.2-90b-vision-instruct": { + ID: "llama-3.2-90b-vision-instruct", + Name: "Llama-3.2-90B-Vision-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.04, + Output: 2.04, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-3.3-70b-instruct": { + ID: "llama-3.3-70b-instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.71, + Output: 0.71, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "llama-4-maverick-17b-128e-instruct-fp8": { + ID: "llama-4-maverick-17b-128e-instruct-fp8", + Name: "Llama 4 Maverick 17B 128E Instruct FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-4-scout-17b-16e-instruct": { + ID: "llama-4-scout-17b-16e-instruct", + Name: "Llama 4 Scout 17B 16E Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.78, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mai-ds-r1": { + ID: "mai-ds-r1", + Name: "MAI-DS-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta-llama-3-70b-instruct": { + ID: "meta-llama-3-70b-instruct", + Name: "Meta-Llama-3-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.68, + Output: 3.54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta-llama-3-8b-instruct": { + ID: "meta-llama-3-8b-instruct", + Name: "Meta-Llama-3-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.61, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta-llama-3.1-405b-instruct": { + ID: "meta-llama-3.1-405b-instruct", + Name: "Meta-Llama-3.1-405B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5.33, + Output: 16, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta-llama-3.1-70b-instruct": { + ID: "meta-llama-3.1-70b-instruct", + Name: "Meta-Llama-3.1-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.68, + Output: 3.54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta-llama-3.1-8b-instruct": { + ID: "meta-llama-3.1-8b-instruct", + Name: "Meta-Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.61, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "ministral-3b": { + ID: "ministral-3b", + Name: "Ministral 3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.04, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistral-large-2411": { + ID: "mistral-large-2411", + Name: "Mistral Large 24.11", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "mistral-medium-2505": { + ID: "mistral-medium-2505", + Name: "Mistral Medium 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral-nemo": { + ID: "mistral-nemo", + Name: "Mistral Nemo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral-small-2503": { + ID: "mistral-small-2503", + Name: "Mistral Small 3.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "model-router": { + ID: "model-router", + Name: "Model Router", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.14, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "o1": { + ID: "o1", + Name: "o1", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o1-mini": { + ID: "o1-mini", + Name: "o1-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "o1-preview": { + ID: "o1-preview", + Name: "o1-preview", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 16.5, + Output: 66, + CacheRead: &[]float64{8.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "o3": { + ID: "o3", + Name: "o3", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-mini": { + ID: "o3-mini", + Name: "o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o4-mini": { + ID: "o4-mini", + Name: "o4-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "phi-3-medium-128k-instruct": { + ID: "phi-3-medium-128k-instruct", + Name: "Phi-3-medium-instruct (128k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3-medium-4k-instruct": { + ID: "phi-3-medium-4k-instruct", + Name: "Phi-3-medium-instruct (4k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 1024, + }, + }, + "phi-3-mini-128k-instruct": { + ID: "phi-3-mini-128k-instruct", + Name: "Phi-3-mini-instruct (128k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3-mini-4k-instruct": { + ID: "phi-3-mini-4k-instruct", + Name: "Phi-3-mini-instruct (4k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 1024, + }, + }, + "phi-3-small-128k-instruct": { + ID: "phi-3-small-128k-instruct", + Name: "Phi-3-small-instruct (128k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3-small-8k-instruct": { + ID: "phi-3-small-8k-instruct", + Name: "Phi-3-small-instruct (8k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "phi-3.5-mini-instruct": { + ID: "phi-3.5-mini-instruct", + Name: "Phi-3.5-mini-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3.5-moe-instruct": { + ID: "phi-3.5-moe-instruct", + Name: "Phi-3.5-MoE-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.16, + Output: 0.64, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4": { + ID: "phi-4", + Name: "Phi-4", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.125, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-mini": { + ID: "phi-4-mini", + Name: "Phi-4-mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-mini-reasoning": { + ID: "phi-4-mini-reasoning", + Name: "Phi-4-mini-reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-multimodal": { + ID: "phi-4-multimodal", + Name: "Phi-4-multimodal", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.32, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-reasoning": { + ID: "phi-4-reasoning", + Name: "Phi-4-reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.125, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "phi-4-reasoning-plus": { + ID: "phi-4-reasoning-plus", + Name: "Phi-4-reasoning-plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.125, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "text-embedding-3-large": { + ID: "text-embedding-3-large", + Name: "text-embedding-3-large", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.13, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 3072, + }, + }, + "text-embedding-3-small": { + ID: "text-embedding-3-small", + Name: "text-embedding-3-small", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.02, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 1536, + }, + }, + "text-embedding-ada-002": { + ID: "text-embedding-ada-002", + Name: "text-embedding-ada-002", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 1536, + }, + }, + }, + }, + "azure-cognitive-services": { + ID: "azure-cognitive-services", + Env: []string{"AZURE_COGNITIVE_SERVICES_RESOURCE_NAME", "AZURE_COGNITIVE_SERVICES_API_KEY" }, + NPM: "@ai-sdk/azure", + Name: "Azure Cognitive Services", + Models: map[string]ModelInfo{ + "claude-haiku-4-5": { + ID: "claude-haiku-4-5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4-1": { + ID: "claude-opus-4-1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-5": { + ID: "claude-opus-4-5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-5": { + ID: "claude-sonnet-4-5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "codestral-2501": { + ID: "codestral-2501", + Name: "Codestral 25.01", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + "codex-mini": { + ID: "codex-mini", + Name: "Codex Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.5, + Output: 6, + CacheRead: &[]float64{0.375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "cohere-command-a": { + ID: "cohere-command-a", + Name: "Command A", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 8000, + }, + }, + "cohere-command-r-08-2024": { + ID: "cohere-command-r-08-2024", + Name: "Command R", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4000, + }, + }, + "cohere-command-r-plus-08-2024": { + ID: "cohere-command-r-plus-08-2024", + Name: "Command R+", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4000, + }, + }, + "cohere-embed-v-4-0": { + ID: "cohere-embed-v-4-0", + Name: "Embed v4", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.12, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 1536, + }, + }, + "cohere-embed-v3-english": { + ID: "cohere-embed-v3-english", + Name: "Embed v3 English", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512, + Output: 1024, + }, + }, + "cohere-embed-v3-multilingual": { + ID: "cohere-embed-v3-multilingual", + Name: "Embed v3 Multilingual", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512, + Output: 1024, + }, + }, + "deepseek-r1": { + ID: "deepseek-r1", + Name: "DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek-r1-0528": { + ID: "deepseek-r1-0528", + Name: "DeepSeek-R1-0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek-v3-0324": { + ID: "deepseek-v3-0324", + Name: "DeepSeek-V3-0324", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.14, + Output: 4.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "deepseek-v3.1": { + ID: "deepseek-v3.1", + Name: "DeepSeek-V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 1.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "deepseek-v3.2": { + ID: "deepseek-v3.2", + Name: "DeepSeek-V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: &[]float64{0.028}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "deepseek-v3.2-speciale": { + ID: "deepseek-v3.2-speciale", + Name: "DeepSeek-V3.2-Speciale", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-3.5-turbo-0125": { + ID: "gpt-3.5-turbo-0125", + Name: "GPT-3.5 Turbo 0125", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "gpt-3.5-turbo-0301": { + ID: "gpt-3.5-turbo-0301", + Name: "GPT-3.5 Turbo 0301", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "gpt-3.5-turbo-0613": { + ID: "gpt-3.5-turbo-0613", + Name: "GPT-3.5 Turbo 0613", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "gpt-3.5-turbo-1106": { + ID: "gpt-3.5-turbo-1106", + Name: "GPT-3.5 Turbo 1106", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "gpt-3.5-turbo-instruct": { + ID: "gpt-3.5-turbo-instruct", + Name: "GPT-3.5 Turbo Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "gpt-4": { + ID: "gpt-4", + Name: "GPT-4", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 60, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "gpt-4-32k": { + ID: "gpt-4-32k", + Name: "GPT-4 32K", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 60, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "gpt-4-turbo": { + ID: "gpt-4-turbo", + Name: "GPT-4 Turbo", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 30, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "gpt-4-turbo-vision": { + ID: "gpt-4-turbo-vision", + Name: "GPT-4 Turbo Vision", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 30, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-mini": { + ID: "gpt-4.1-mini", + Name: "GPT-4.1 mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-nano": { + ID: "gpt-4.1-nano", + Name: "GPT-4.1 nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4o": { + ID: "gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o-mini": { + ID: "gpt-4o-mini", + Name: "GPT-4o mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5": { + ID: "gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5-chat": { + ID: "gpt-5-chat", + Name: "GPT-5 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5-codex": { + ID: "gpt-5-codex", + Name: "GPT-5-Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5-pro": { + ID: "gpt-5-pro", + Name: "GPT-5 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 272000, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 272000, + Output: 128000, + }, + }, + "gpt-5.1-chat": { + ID: "gpt-5.1-chat", + Name: "GPT-5.1 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "GPT-5.1 Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "GPT-5.1 Codex Mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2-chat": { + ID: "gpt-5.2-chat", + Name: "GPT-5.2 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "grok-3": { + ID: "grok-3", + Name: "Grok 3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-mini": { + ID: "grok-3-mini", + Name: "Grok 3 Mini", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-4": { + ID: "grok-4", + Name: "Grok 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "grok-4-fast-non-reasoning": { + ID: "grok-4-fast-non-reasoning", + Name: "Grok 4 Fast (Non-Reasoning)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "grok-4-fast-reasoning": { + ID: "grok-4-fast-reasoning", + Name: "Grok 4 Fast (Reasoning)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "grok-code-fast-1": { + ID: "grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 10000, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "llama-3.2-11b-vision-instruct": { + ID: "llama-3.2-11b-vision-instruct", + Name: "Llama-3.2-11B-Vision-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.37, + Output: 0.37, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-3.2-90b-vision-instruct": { + ID: "llama-3.2-90b-vision-instruct", + Name: "Llama-3.2-90B-Vision-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.04, + Output: 2.04, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-3.3-70b-instruct": { + ID: "llama-3.3-70b-instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.71, + Output: 0.71, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "llama-4-maverick-17b-128e-instruct-fp8": { + ID: "llama-4-maverick-17b-128e-instruct-fp8", + Name: "Llama 4 Maverick 17B 128E Instruct FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-4-scout-17b-16e-instruct": { + ID: "llama-4-scout-17b-16e-instruct", + Name: "Llama 4 Scout 17B 16E Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.78, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mai-ds-r1": { + ID: "mai-ds-r1", + Name: "MAI-DS-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta-llama-3-70b-instruct": { + ID: "meta-llama-3-70b-instruct", + Name: "Meta-Llama-3-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.68, + Output: 3.54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta-llama-3-8b-instruct": { + ID: "meta-llama-3-8b-instruct", + Name: "Meta-Llama-3-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.61, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta-llama-3.1-405b-instruct": { + ID: "meta-llama-3.1-405b-instruct", + Name: "Meta-Llama-3.1-405B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5.33, + Output: 16, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta-llama-3.1-70b-instruct": { + ID: "meta-llama-3.1-70b-instruct", + Name: "Meta-Llama-3.1-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.68, + Output: 3.54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta-llama-3.1-8b-instruct": { + ID: "meta-llama-3.1-8b-instruct", + Name: "Meta-Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.61, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "ministral-3b": { + ID: "ministral-3b", + Name: "Ministral 3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.04, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistral-large-2411": { + ID: "mistral-large-2411", + Name: "Mistral Large 24.11", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "mistral-medium-2505": { + ID: "mistral-medium-2505", + Name: "Mistral Medium 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral-nemo": { + ID: "mistral-nemo", + Name: "Mistral Nemo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral-small-2503": { + ID: "mistral-small-2503", + Name: "Mistral Small 3.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "model-router": { + ID: "model-router", + Name: "Model Router", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.14, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "o1": { + ID: "o1", + Name: "o1", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o1-mini": { + ID: "o1-mini", + Name: "o1-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "o1-preview": { + ID: "o1-preview", + Name: "o1-preview", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 16.5, + Output: 66, + CacheRead: &[]float64{8.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "o3": { + ID: "o3", + Name: "o3", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-mini": { + ID: "o3-mini", + Name: "o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o4-mini": { + ID: "o4-mini", + Name: "o4-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "phi-3-medium-128k-instruct": { + ID: "phi-3-medium-128k-instruct", + Name: "Phi-3-medium-instruct (128k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3-medium-4k-instruct": { + ID: "phi-3-medium-4k-instruct", + Name: "Phi-3-medium-instruct (4k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 1024, + }, + }, + "phi-3-mini-128k-instruct": { + ID: "phi-3-mini-128k-instruct", + Name: "Phi-3-mini-instruct (128k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3-mini-4k-instruct": { + ID: "phi-3-mini-4k-instruct", + Name: "Phi-3-mini-instruct (4k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 1024, + }, + }, + "phi-3-small-128k-instruct": { + ID: "phi-3-small-128k-instruct", + Name: "Phi-3-small-instruct (128k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3-small-8k-instruct": { + ID: "phi-3-small-8k-instruct", + Name: "Phi-3-small-instruct (8k)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "phi-3.5-mini-instruct": { + ID: "phi-3.5-mini-instruct", + Name: "Phi-3.5-mini-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-3.5-moe-instruct": { + ID: "phi-3.5-moe-instruct", + Name: "Phi-3.5-MoE-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.16, + Output: 0.64, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4": { + ID: "phi-4", + Name: "Phi-4", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.125, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-mini": { + ID: "phi-4-mini", + Name: "Phi-4-mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-mini-reasoning": { + ID: "phi-4-mini-reasoning", + Name: "Phi-4-mini-reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-multimodal": { + ID: "phi-4-multimodal", + Name: "Phi-4-multimodal", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.32, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "phi-4-reasoning": { + ID: "phi-4-reasoning", + Name: "Phi-4-reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.125, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "phi-4-reasoning-plus": { + ID: "phi-4-reasoning-plus", + Name: "Phi-4-reasoning-plus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.125, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "text-embedding-3-large": { + ID: "text-embedding-3-large", + Name: "text-embedding-3-large", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.13, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 3072, + }, + }, + "text-embedding-3-small": { + ID: "text-embedding-3-small", + Name: "text-embedding-3-small", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.02, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 1536, + }, + }, + "text-embedding-ada-002": { + ID: "text-embedding-ada-002", + Name: "text-embedding-ada-002", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 1536, + }, + }, + }, + }, + "bailing": { + ID: "bailing", + Env: []string{"BAILING_API_TOKEN" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Bailing", + Models: map[string]ModelInfo{ + "Ling-1T": { + ID: "Ling-1T", + Name: "Ling-1T", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.57, + Output: 2.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "Ring-1T": { + ID: "Ring-1T", + Name: "Ring-1T", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.57, + Output: 2.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + }, + }, + "baseten": { + ID: "baseten", + Env: []string{"BASETEN_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Baseten", + Models: map[string]ModelInfo{ + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.38, + Output: 1.53, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "deepseek-ai/DeepSeek-V3.2": { + ID: "deepseek-ai/DeepSeek-V3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163800, + Output: 131100, + }, + }, + "moonshotai/Kimi-K2-Instruct-0905": { + ID: "moonshotai/Kimi-K2-Instruct-0905", + Name: "Kimi K2 Instruct 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "zai-org/GLM-4.6": { + ID: "zai-org/GLM-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 200000, + }, + }, + "zai-org/GLM-4.7": { + ID: "zai-org/GLM-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + }, + }, + "cerebras": { + ID: "cerebras", + Env: []string{"CEREBRAS_API_KEY" }, + NPM: "@ai-sdk/cerebras", + Name: "Cerebras", + Models: map[string]ModelInfo{ + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.69, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen-3-235b-a22b-instruct-2507": { + ID: "qwen-3-235b-a22b-instruct-2507", + Name: "Qwen 3 235B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 32000, + }, + }, + "zai-glm-4.6": { + ID: "zai-glm-4.6", + Name: "Z.AI GLM-4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 40960, + }, + }, + "zai-glm-4.7": { + ID: "zai-glm-4.7", + Name: "Z.AI GLM-4.7", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 40000, + }, + }, + }, + }, + "chutes": { + ID: "chutes", + Env: []string{"CHUTES_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Chutes", + Models: map[string]ModelInfo{ + "MiniMaxAI/MiniMax-M2.1-TEE": { + ID: "MiniMaxAI/MiniMax-M2.1-TEE", + Name: "MiniMax M2.1 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 65536, + }, + }, + "NousResearch/DeepHermes-3-Mistral-24B-Preview": { + ID: "NousResearch/DeepHermes-3-Mistral-24B-Preview", + Name: "DeepHermes 3 Mistral 24B Preview", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.1, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "NousResearch/Hermes-4-14B": { + ID: "NousResearch/Hermes-4-14B", + Name: "Hermes 4 14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.05, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "NousResearch/Hermes-4-405B-FP8-TEE": { + ID: "NousResearch/Hermes-4-405B-FP8-TEE", + Name: "Hermes 4 405B FP8 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "NousResearch/Hermes-4-70B": { + ID: "NousResearch/Hermes-4-70B", + Name: "Hermes 4 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.38, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "NousResearch/Hermes-4.3-36B": { + ID: "NousResearch/Hermes-4.3-36B", + Name: "Hermes 4.3 36B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.39, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 524288, + Output: 524288, + }, + }, + "OpenGVLab/InternVL3-78B-TEE": { + ID: "OpenGVLab/InternVL3-78B-TEE", + Name: "InternVL3 78B TEE", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.39, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "Qwen/Qwen2.5-72B-Instruct": { + ID: "Qwen/Qwen2.5-72B-Instruct", + Name: "Qwen2.5 72B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.52, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "Qwen/Qwen2.5-Coder-32B-Instruct": { + ID: "Qwen/Qwen2.5-Coder-32B-Instruct", + Name: "Qwen2.5 Coder 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.11, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "Qwen/Qwen2.5-VL-32B-Instruct": { + ID: "Qwen/Qwen2.5-VL-32B-Instruct", + Name: "Qwen2.5 VL 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.22, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "Qwen/Qwen2.5-VL-72B-Instruct-TEE": { + ID: "Qwen/Qwen2.5-VL-72B-Instruct-TEE", + Name: "Qwen2.5 VL 72B Instruct TEE", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "Qwen/Qwen3-14B": { + ID: "Qwen/Qwen3-14B", + Name: "Qwen3 14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.22, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "Qwen/Qwen3-235B-A22B": { + ID: "Qwen/Qwen3-235B-A22B", + Name: "Qwen3 235B A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "Qwen/Qwen3-235B-A22B-Instruct-2507-TEE": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507-TEE", + Name: "Qwen3 235B A22B Instruct 2507 TEE", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.55, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.6, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "Qwen/Qwen3-30B-A3B": { + ID: "Qwen/Qwen3-30B-A3B", + Name: "Qwen3 30B A3B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.22, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + ID: "Qwen/Qwen3-30B-A3B-Instruct-2507", + Name: "Qwen3 30B A3B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.33, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "Qwen/Qwen3-32B": { + ID: "Qwen/Qwen3-32B", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.24, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8-TEE": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8-TEE", + Name: "Qwen3 Coder 480B A35B Instruct FP8 TEE", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.95, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Name: "Qwen3 Next 80B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.8, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "Qwen/Qwen3-VL-235B-A22B-Instruct": { + ID: "Qwen/Qwen3-VL-235B-A22B-Instruct", + Name: "Qwen3 VL 235B A22B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "Qwen/Qwen3Guard-Gen-0.6B": { + ID: "Qwen/Qwen3Guard-Gen-0.6B", + Name: "Qwen3Guard Gen 0.6B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.01, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "XiaomiMiMo/MiMo-V2-Flash": { + ID: "XiaomiMiMo/MiMo-V2-Flash", + Name: "MiMo V2 Flash", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.65, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "chutesai/Mistral-Small-3.1-24B-Instruct-2503": { + ID: "chutesai/Mistral-Small-3.1-24B-Instruct-2503", + Name: "Mistral Small 3.1 24B Instruct 2503", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.11, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "chutesai/Mistral-Small-3.2-24B-Instruct-2506": { + ID: "chutesai/Mistral-Small-3.2-24B-Instruct-2506", + Name: "Mistral Small 3.2 24B Instruct 2506", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.18, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "deepseek-ai/DeepSeek-R1-0528-TEE": { + ID: "deepseek-ai/DeepSeek-R1-0528-TEE", + Name: "DeepSeek R1 0528 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.75, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.11, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "deepseek-ai/DeepSeek-R1-TEE": { + ID: "deepseek-ai/DeepSeek-R1-TEE", + Name: "DeepSeek R1 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek-ai/DeepSeek-V3": { + ID: "deepseek-ai/DeepSeek-V3", + Name: "DeepSeek V3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek-ai/DeepSeek-V3-0324-TEE": { + ID: "deepseek-ai/DeepSeek-V3-0324-TEE", + Name: "DeepSeek V3 0324 TEE", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.19, + Output: 0.87, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "deepseek-ai/DeepSeek-V3.1-TEE": { + ID: "deepseek-ai/DeepSeek-V3.1-TEE", + Name: "DeepSeek V3.1 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "deepseek-ai/DeepSeek-V3.1-Terminus-TEE": { + ID: "deepseek-ai/DeepSeek-V3.1-Terminus-TEE", + Name: "DeepSeek V3.1 Terminus TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.23, + Output: 0.9, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "deepseek-ai/DeepSeek-V3.2-Speciale-TEE": { + ID: "deepseek-ai/DeepSeek-V3.2-Speciale-TEE", + Name: "DeepSeek V3.2 Speciale TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.41, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "deepseek-ai/DeepSeek-V3.2-TEE": { + ID: "deepseek-ai/DeepSeek-V3.2-TEE", + Name: "DeepSeek V3.2 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.38, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "mistralai/Devstral-2-123B-Instruct-2512": { + ID: "mistralai/Devstral-2-123B-Instruct-2512", + Name: "Devstral 2 123B Instruct 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.22, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "moonshotai/Kimi-K2-Instruct-0905": { + ID: "moonshotai/Kimi-K2-Instruct-0905", + Name: "Kimi K2 Instruct 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.39, + Output: 1.9, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "moonshotai/Kimi-K2-Thinking-TEE": { + ID: "moonshotai/Kimi-K2-Thinking-TEE", + Name: "Kimi K2 Thinking TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.75, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 65535, + }, + }, + "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16": { + ID: "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16", + Name: "NVIDIA Nemotron 3 Nano 30B A3B BF16", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.24, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "openai/gpt-oss-120b-TEE": { + ID: "openai/gpt-oss-120b-TEE", + Name: "gpt oss 120b TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.18, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "gpt oss 20b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.1, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "rednote-hilab/dots.ocr": { + ID: "rednote-hilab/dots.ocr", + Name: "dots.ocr", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.01, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "tngtech/DeepSeek-R1T-Chimera": { + ID: "tngtech/DeepSeek-R1T-Chimera", + Name: "DeepSeek R1T Chimera", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "tngtech/DeepSeek-TNG-R1T2-Chimera": { + ID: "tngtech/DeepSeek-TNG-R1T2-Chimera", + Name: "DeepSeek TNG R1T2 Chimera", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.85, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "tngtech/DeepSeek-TNG-R1T2-Chimera-TEE": { + ID: "tngtech/DeepSeek-TNG-R1T2-Chimera-TEE", + Name: "DeepSeek TNG R1T2 Chimera TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.85, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "tngtech/TNG-R1T-Chimera-TEE": { + ID: "tngtech/TNG-R1T-Chimera-TEE", + Name: "TNG R1T Chimera TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.85, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "unsloth/Mistral-Nemo-Instruct-2407": { + ID: "unsloth/Mistral-Nemo-Instruct-2407", + Name: "Mistral Nemo Instruct 2407", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.04, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "unsloth/Mistral-Small-24B-Instruct-2501": { + ID: "unsloth/Mistral-Small-24B-Instruct-2501", + Name: "Mistral Small 24B Instruct 2501", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.11, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "unsloth/gemma-3-12b-it": { + ID: "unsloth/gemma-3-12b-it", + Name: "gemma 3 12b it", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.1, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "unsloth/gemma-3-27b-it": { + ID: "unsloth/gemma-3-27b-it", + Name: "gemma 3 27b it", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.15, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 96000, + Output: 96000, + }, + }, + "unsloth/gemma-3-4b-it": { + ID: "unsloth/gemma-3-4b-it", + Name: "gemma 3 4b it", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.03, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 96000, + Output: 96000, + }, + }, + "zai-org/GLM-4.5-Air": { + ID: "zai-org/GLM-4.5-Air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.22, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "zai-org/GLM-4.5-TEE": { + ID: "zai-org/GLM-4.5-TEE", + Name: "GLM 4.5 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.55, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "zai-org/GLM-4.6-TEE": { + ID: "zai-org/GLM-4.6-TEE", + Name: "GLM 4.6 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.5, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 202752, + Output: 65536, + }, + }, + "zai-org/GLM-4.6V": { + ID: "zai-org/GLM-4.6V", + Name: "GLM 4.6V", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "zai-org/GLM-4.7-TEE": { + ID: "zai-org/GLM-4.7-TEE", + Name: "GLM 4.7 TEE", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.5, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 202752, + Output: 65535, + }, + }, + }, + }, + "cloudflare-ai-gateway": { + ID: "cloudflare-ai-gateway", + Env: []string{"CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_GATEWAY_ID" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Cloudflare AI Gateway", + Models: map[string]ModelInfo{ + "anthropic/claude-3-5-haiku": { + ID: "anthropic/claude-3-5-haiku", + Name: "Claude Haiku 3.5 (latest)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic/claude-3-haiku": { + ID: "anthropic/claude-3-haiku", + Name: "Claude Haiku 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1.25, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic/claude-3-opus": { + ID: "anthropic/claude-3-opus", + Name: "Claude Opus 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic/claude-3-sonnet": { + ID: "anthropic/claude-3-sonnet", + Name: "Claude Sonnet 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic/claude-3.5-haiku": { + ID: "anthropic/claude-3.5-haiku", + Name: "Claude Haiku 3.5 (latest)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic/claude-3.5-sonnet": { + ID: "anthropic/claude-3.5-sonnet", + Name: "Claude Sonnet 3.5 v2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic/claude-haiku-4-5": { + ID: "anthropic/claude-haiku-4-5", + Name: "Claude Haiku 4.5 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-opus-4": { + ID: "anthropic/claude-opus-4", + Name: "Claude Opus 4 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4-1": { + ID: "anthropic/claude-opus-4-1", + Name: "Claude Opus 4.1 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4-5": { + ID: "anthropic/claude-opus-4-5", + Name: "Claude Opus 4.5 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4": { + ID: "anthropic/claude-sonnet-4", + Name: "Claude Sonnet 4 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4-5": { + ID: "anthropic/claude-sonnet-4-5", + Name: "Claude Sonnet 4.5 (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "openai/gpt-3.5-turbo": { + ID: "openai/gpt-3.5-turbo", + Name: "GPT-3.5-turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16385, + Output: 4096, + }, + }, + "openai/gpt-4": { + ID: "openai/gpt-4", + Name: "GPT-4", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 30, + Output: 60, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "openai/gpt-4-turbo": { + ID: "openai/gpt-4-turbo", + Name: "GPT-4 Turbo", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 30, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "openai/gpt-4o": { + ID: "openai/gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-4o-mini": { + ID: "openai/gpt-4o-mini", + Name: "GPT-4o mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5.1": { + ID: "openai/gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-codex": { + ID: "openai/gpt-5.1-codex", + Name: "GPT-5.1 Codex", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.2": { + ID: "openai/gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/o1": { + ID: "openai/o1", + Name: "o1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3": { + ID: "openai/o3", + Name: "o3", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-mini": { + ID: "openai/o3-mini", + Name: "o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-pro": { + ID: "openai/o3-pro", + Name: "o3-pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 20, + Output: 80, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o4-mini": { + ID: "openai/o4-mini", + Name: "o4-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B": { + ID: "workers-ai/@cf/ai4bharat/indictrans2-en-indic-1B", + Name: "IndicTrans2 EN-Indic 1B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.34, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it": { + ID: "workers-ai/@cf/aisingapore/gemma-sea-lion-v4-27b-it", + Name: "Gemma SEA-LION v4 27B IT", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/baai/bge-base-en-v1.5": { + ID: "workers-ai/@cf/baai/bge-base-en-v1.5", + Name: "BGE Base EN v1.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.067, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/baai/bge-large-en-v1.5": { + ID: "workers-ai/@cf/baai/bge-large-en-v1.5", + Name: "BGE Large EN v1.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/baai/bge-m3": { + ID: "workers-ai/@cf/baai/bge-m3", + Name: "BGE M3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.012, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/baai/bge-reranker-base": { + ID: "workers-ai/@cf/baai/bge-reranker-base", + Name: "BGE Reranker Base", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.0031, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/baai/bge-small-en-v1.5": { + ID: "workers-ai/@cf/baai/bge-small-en-v1.5", + Name: "BGE Small EN v1.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/deepgram/aura-2-en": { + ID: "workers-ai/@cf/deepgram/aura-2-en", + Name: "Deepgram Aura 2 (EN)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/deepgram/aura-2-es": { + ID: "workers-ai/@cf/deepgram/aura-2-es", + Name: "Deepgram Aura 2 (ES)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/deepgram/nova-3": { + ID: "workers-ai/@cf/deepgram/nova-3", + Name: "Deepgram Nova 3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b": { + ID: "workers-ai/@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", + Name: "DeepSeek R1 Distill Qwen 32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 4.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/facebook/bart-large-cnn": { + ID: "workers-ai/@cf/facebook/bart-large-cnn", + Name: "BART Large CNN", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/google/gemma-3-12b-it": { + ID: "workers-ai/@cf/google/gemma-3-12b-it", + Name: "Gemma 3 12B IT", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/huggingface/distilbert-sst-2-int8": { + ID: "workers-ai/@cf/huggingface/distilbert-sst-2-int8", + Name: "DistilBERT SST-2 INT8", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.026, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/ibm-granite/granite-4.0-h-micro": { + ID: "workers-ai/@cf/ibm-granite/granite-4.0-h-micro", + Name: "IBM Granite 4.0 H Micro", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.017, + Output: 0.11, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-2-7b-chat-fp16": { + ID: "workers-ai/@cf/meta/llama-2-7b-chat-fp16", + Name: "Llama 2 7B Chat FP16", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 6.67, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3-8b-instruct": { + ID: "workers-ai/@cf/meta/llama-3-8b-instruct", + Name: "Llama 3 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.83, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3-8b-instruct-awq": { + ID: "workers-ai/@cf/meta/llama-3-8b-instruct-awq", + Name: "Llama 3 8B Instruct AWQ", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.12, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.1-8b-instruct": { + ID: "workers-ai/@cf/meta/llama-3.1-8b-instruct", + Name: "Llama 3.1 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.8299999999999998, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq": { + ID: "workers-ai/@cf/meta/llama-3.1-8b-instruct-awq", + Name: "Llama 3.1 8B Instruct AWQ", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.12, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8": { + ID: "workers-ai/@cf/meta/llama-3.1-8b-instruct-fp8", + Name: "Llama 3.1 8B Instruct FP8", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct": { + ID: "workers-ai/@cf/meta/llama-3.2-11b-vision-instruct", + Name: "Llama 3.2 11B Vision Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.049, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.2-1b-instruct": { + ID: "workers-ai/@cf/meta/llama-3.2-1b-instruct", + Name: "Llama 3.2 1B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.027, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.2-3b-instruct": { + ID: "workers-ai/@cf/meta/llama-3.2-3b-instruct", + Name: "Llama 3.2 3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.051, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast": { + ID: "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast", + Name: "Llama 3.3 70B Instruct FP8 Fast", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 2.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct": { + ID: "workers-ai/@cf/meta/llama-4-scout-17b-16e-instruct", + Name: "Llama 4 Scout 17B 16E Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.85, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/llama-guard-3-8b": { + ID: "workers-ai/@cf/meta/llama-guard-3-8b", + Name: "Llama Guard 3 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.48, + Output: 0.03, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/meta/m2m100-1.2b": { + ID: "workers-ai/@cf/meta/m2m100-1.2b", + Name: "M2M100 1.2B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.34, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1": { + ID: "workers-ai/@cf/mistral/mistral-7b-instruct-v0.1", + Name: "Mistral 7B Instruct v0.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct": { + ID: "workers-ai/@cf/mistralai/mistral-small-3.1-24b-instruct", + Name: "Mistral Small 3.1 24B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/myshell-ai/melotts": { + ID: "workers-ai/@cf/myshell-ai/melotts", + Name: "MyShell MeloTTS", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/openai/gpt-oss-120b": { + ID: "workers-ai/@cf/openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/openai/gpt-oss-20b": { + ID: "workers-ai/@cf/openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/pfnet/plamo-embedding-1b": { + ID: "workers-ai/@cf/pfnet/plamo-embedding-1b", + Name: "PLaMo Embedding 1B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.019, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/pipecat-ai/smart-turn-v2": { + ID: "workers-ai/@cf/pipecat-ai/smart-turn-v2", + Name: "Pipecat Smart Turn v2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct": { + ID: "workers-ai/@cf/qwen/qwen2.5-coder-32b-instruct", + Name: "Qwen 2.5 Coder 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.66, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8": { + ID: "workers-ai/@cf/qwen/qwen3-30b-a3b-fp8", + Name: "Qwen3 30B A3B FP8", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.051, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/qwen/qwen3-embedding-0.6b": { + ID: "workers-ai/@cf/qwen/qwen3-embedding-0.6b", + Name: "Qwen3 Embedding 0.6B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.012, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "workers-ai/@cf/qwen/qwq-32b": { + ID: "workers-ai/@cf/qwen/qwq-32b", + Name: "QwQ 32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.66, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + }, + }, + "cloudflare-workers-ai": { + ID: "cloudflare-workers-ai", + Env: []string{"CLOUDFLARE_ACCOUNT_ID", "CLOUDFLARE_API_KEY" }, + NPM: "workers-ai-provider", + Name: "Cloudflare Workers AI", + Models: map[string]ModelInfo{ + "aura-1": { + ID: "aura-1", + Name: "@cf/deepgram/aura-1", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.015, + Output: 0.015, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "bart-large-cnn": { + ID: "bart-large-cnn", + Name: "@cf/facebook/bart-large-cnn", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "deepseek-coder-6.7b-base-awq": { + ID: "deepseek-coder-6.7b-base-awq", + Name: "@hf/thebloke/deepseek-coder-6.7b-base-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "deepseek-coder-6.7b-instruct-awq": { + ID: "deepseek-coder-6.7b-instruct-awq", + Name: "@hf/thebloke/deepseek-coder-6.7b-instruct-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "deepseek-math-7b-instruct": { + ID: "deepseek-math-7b-instruct", + Name: "@cf/deepseek-ai/deepseek-math-7b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "deepseek-r1-distill-qwen-32b": { + ID: "deepseek-r1-distill-qwen-32b", + Name: "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 4.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 80000, + Output: 80000, + }, + }, + "discolm-german-7b-v1-awq": { + ID: "discolm-german-7b-v1-awq", + Name: "@cf/thebloke/discolm-german-7b-v1-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "dreamshaper-8-lcm": { + ID: "dreamshaper-8-lcm", + Name: "@cf/lykon/dreamshaper-8-lcm", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "falcon-7b-instruct": { + ID: "falcon-7b-instruct", + Name: "@cf/tiiuae/falcon-7b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "flux-1-schnell": { + ID: "flux-1-schnell", + Name: "@cf/black-forest-labs/flux-1-schnell", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 5.3e-05, + Output: 0.00011, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2048, + Output: 0, + }, + }, + "gemma-2b-it-lora": { + ID: "gemma-2b-it-lora", + Name: "@cf/google/gemma-2b-it-lora", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "gemma-3-12b-it": { + ID: "gemma-3-12b-it", + Name: "@cf/google/gemma-3-12b-it", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 80000, + Output: 80000, + }, + }, + "gemma-7b-it": { + ID: "gemma-7b-it", + Name: "@hf/google/gemma-7b-it", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "gemma-7b-it-lora": { + ID: "gemma-7b-it-lora", + Name: "@cf/google/gemma-7b-it-lora", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 3500, + Output: 3500, + }, + }, + "gemma-sea-lion-v4-27b-it": { + ID: "gemma-sea-lion-v4-27b-it", + Name: "@cf/aisingapore/gemma-sea-lion-v4-27b-it", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 0, + }, + }, + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "@cf/openai/gpt-oss-120b", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.35, + Output: 0.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-oss-20b": { + ID: "gpt-oss-20b", + Name: "@cf/openai/gpt-oss-20b", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.2, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "granite-4.0-h-micro": { + ID: "granite-4.0-h-micro", + Name: "@cf/ibm-granite/granite-4.0-h-micro", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.017, + Output: 0.11, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 0, + }, + }, + "hermes-2-pro-mistral-7b": { + ID: "hermes-2-pro-mistral-7b", + Name: "@hf/nousresearch/hermes-2-pro-mistral-7b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 24000, + Output: 24000, + }, + }, + "llama-2-13b-chat-awq": { + ID: "llama-2-13b-chat-awq", + Name: "@hf/thebloke/llama-2-13b-chat-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "llama-2-7b-chat-fp16": { + ID: "llama-2-7b-chat-fp16", + Name: "@cf/meta/llama-2-7b-chat-fp16", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 6.67, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "llama-2-7b-chat-hf-lora": { + ID: "llama-2-7b-chat-hf-lora", + Name: "@cf/meta-llama/llama-2-7b-chat-hf-lora", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama-2-7b-chat-int8": { + ID: "llama-2-7b-chat-int8", + Name: "@cf/meta/llama-2-7b-chat-int8", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.556, + Output: 6.667, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama-3-8b-instruct": { + ID: "llama-3-8b-instruct", + Name: "@cf/meta/llama-3-8b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.83, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 7968, + Output: 7968, + }, + }, + "llama-3-8b-instruct-awq": { + ID: "llama-3-8b-instruct-awq", + Name: "@cf/meta/llama-3-8b-instruct-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.12, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama-3.1-70b-instruct": { + ID: "llama-3.1-70b-instruct", + Name: "@cf/meta/llama-3.1-70b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.293, + Output: 2.253, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 24000, + Output: 24000, + }, + }, + "llama-3.1-8b-instruct": { + ID: "llama-3.1-8b-instruct", + Name: "@cf/meta/llama-3.1-8b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.83, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 7968, + Output: 7968, + }, + }, + "llama-3.1-8b-instruct-awq": { + ID: "llama-3.1-8b-instruct-awq", + Name: "@cf/meta/llama-3.1-8b-instruct-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.12, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama-3.1-8b-instruct-fast": { + ID: "llama-3.1-8b-instruct-fast", + Name: "@cf/meta/llama-3.1-8b-instruct-fast", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.045, + Output: 0.384, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "llama-3.1-8b-instruct-fp8": { + ID: "llama-3.1-8b-instruct-fp8", + Name: "@cf/meta/llama-3.1-8b-instruct-fp8", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "llama-3.2-11b-vision-instruct": { + ID: "llama-3.2-11b-vision-instruct", + Name: "@cf/meta/llama-3.2-11b-vision-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.049, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "llama-3.2-1b-instruct": { + ID: "llama-3.2-1b-instruct", + Name: "@cf/meta/llama-3.2-1b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.027, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 60000, + Output: 60000, + }, + }, + "llama-3.2-3b-instruct": { + ID: "llama-3.2-3b-instruct", + Name: "@cf/meta/llama-3.2-3b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.051, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "llama-3.3-70b-instruct-fp8-fast": { + ID: "llama-3.3-70b-instruct-fp8-fast", + Name: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 2.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 24000, + Output: 24000, + }, + }, + "llama-4-scout-17b-16e-instruct": { + ID: "llama-4-scout-17b-16e-instruct", + Name: "@cf/meta/llama-4-scout-17b-16e-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.85, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "llama-guard-3-8b": { + ID: "llama-guard-3-8b", + Name: "@cf/meta/llama-guard-3-8b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.48, + Output: 0.03, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 0, + }, + }, + "llamaguard-7b-awq": { + ID: "llamaguard-7b-awq", + Name: "@hf/thebloke/llamaguard-7b-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "llava-1.5-7b-hf": { + ID: "llava-1.5-7b-hf", + Name: "@cf/llava-hf/llava-1.5-7b-hf", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "lucid-origin": { + ID: "lucid-origin", + Name: "@cf/leonardo/lucid-origin", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.007, + Output: 0.007, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "m2m100-1.2b": { + ID: "m2m100-1.2b", + Name: "@cf/meta/m2m100-1.2b", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.34, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "melotts": { + ID: "melotts", + Name: "@cf/myshell-ai/melotts", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.0002, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "mistral-7b-instruct-v0.1": { + ID: "mistral-7b-instruct-v0.1", + Name: "@cf/mistral/mistral-7b-instruct-v0.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2824, + Output: 2824, + }, + }, + "mistral-7b-instruct-v0.1-awq": { + ID: "mistral-7b-instruct-v0.1-awq", + Name: "@hf/thebloke/mistral-7b-instruct-v0.1-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "mistral-7b-instruct-v0.2": { + ID: "mistral-7b-instruct-v0.2", + Name: "@hf/mistral/mistral-7b-instruct-v0.2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 3072, + Output: 4096, + }, + }, + "mistral-7b-instruct-v0.2-lora": { + ID: "mistral-7b-instruct-v0.2-lora", + Name: "@cf/mistral/mistral-7b-instruct-v0.2-lora", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 15000, + Output: 15000, + }, + }, + "mistral-small-3.1-24b-instruct": { + ID: "mistral-small-3.1-24b-instruct", + Name: "@cf/mistralai/mistral-small-3.1-24b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.56, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "neural-chat-7b-v3-1-awq": { + ID: "neural-chat-7b-v3-1-awq", + Name: "@hf/thebloke/neural-chat-7b-v3-1-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "nova-3": { + ID: "nova-3", + Name: "@cf/deepgram/nova-3", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.0052, + Output: 0.0052, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "openchat-3.5-0106": { + ID: "openchat-3.5-0106", + Name: "@cf/openchat/openchat-3.5-0106", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "openhermes-2.5-mistral-7b-awq": { + ID: "openhermes-2.5-mistral-7b-awq", + Name: "@hf/thebloke/openhermes-2.5-mistral-7b-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "phi-2": { + ID: "phi-2", + Name: "@cf/microsoft/phi-2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2048, + Output: 2048, + }, + }, + "phoenix-1.0": { + ID: "phoenix-1.0", + Name: "@cf/leonardo/phoenix-1.0", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.0058, + Output: 0.0058, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "qwen1.5-0.5b-chat": { + ID: "qwen1.5-0.5b-chat", + Name: "@cf/qwen/qwen1.5-0.5b-chat", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "qwen1.5-1.8b-chat": { + ID: "qwen1.5-1.8b-chat", + Name: "@cf/qwen/qwen1.5-1.8b-chat", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "qwen1.5-14b-chat-awq": { + ID: "qwen1.5-14b-chat-awq", + Name: "@cf/qwen/qwen1.5-14b-chat-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 7500, + Output: 7500, + }, + }, + "qwen1.5-7b-chat-awq": { + ID: "qwen1.5-7b-chat-awq", + Name: "@cf/qwen/qwen1.5-7b-chat-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 20000, + Output: 20000, + }, + }, + "qwen2.5-coder-32b-instruct": { + ID: "qwen2.5-coder-32b-instruct", + Name: "@cf/qwen/qwen2.5-coder-32b-instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.66, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "qwen3-30b-a3b-fp8": { + ID: "qwen3-30b-a3b-fp8", + Name: "@cf/qwen/qwen3-30b-a3b-fp8", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.051, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 0, + }, + }, + "qwq-32b": { + ID: "qwq-32b", + Name: "@cf/qwen/qwq-32b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.66, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 24000, + Output: 24000, + }, + }, + "resnet-50": { + ID: "resnet-50", + Name: "@cf/microsoft/resnet-50", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 2.5e-06, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "sqlcoder-7b-2": { + ID: "sqlcoder-7b-2", + Name: "@cf/defog/sqlcoder-7b-2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 10000, + Output: 10000, + }, + }, + "stable-diffusion-v1-5-img2img": { + ID: "stable-diffusion-v1-5-img2img", + Name: "@cf/runwayml/stable-diffusion-v1-5-img2img", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "stable-diffusion-v1-5-inpainting": { + ID: "stable-diffusion-v1-5-inpainting", + Name: "@cf/runwayml/stable-diffusion-v1-5-inpainting", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "stable-diffusion-xl-base-1.0": { + ID: "stable-diffusion-xl-base-1.0", + Name: "@cf/stabilityai/stable-diffusion-xl-base-1.0", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "stable-diffusion-xl-lightning": { + ID: "stable-diffusion-xl-lightning", + Name: "@cf/bytedance/stable-diffusion-xl-lightning", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "starling-lm-7b-beta": { + ID: "starling-lm-7b-beta", + Name: "@hf/nexusflow/starling-lm-7b-beta", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + "tinyllama-1.1b-chat-v1.0": { + ID: "tinyllama-1.1b-chat-v1.0", + Name: "@cf/tinyllama/tinyllama-1.1b-chat-v1.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2048, + Output: 2048, + }, + }, + "uform-gen2-qwen-500m": { + ID: "uform-gen2-qwen-500m", + Name: "@cf/unum/uform-gen2-qwen-500m", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "una-cybertron-7b-v2-bf16": { + ID: "una-cybertron-7b-v2-bf16", + Name: "@cf/fblgit/una-cybertron-7b-v2-bf16", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 15000, + Output: 15000, + }, + }, + "whisper": { + ID: "whisper", + Name: "@cf/openai/whisper", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.00045, + Output: 0.00045, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "whisper-large-v3-turbo": { + ID: "whisper-large-v3-turbo", + Name: "@cf/openai/whisper-large-v3-turbo", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.00051, + Output: 0.00051, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "whisper-tiny-en": { + ID: "whisper-tiny-en", + Name: "@cf/openai/whisper-tiny-en", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "zephyr-7b-beta-awq": { + ID: "zephyr-7b-beta-awq", + Name: "@hf/thebloke/zephyr-7b-beta-awq", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 4096, + }, + }, + }, + }, + "cohere": { + ID: "cohere", + Env: []string{"COHERE_API_KEY" }, + NPM: "@ai-sdk/cohere", + Name: "Cohere", + Models: map[string]ModelInfo{ + "command-a-03-2025": { + ID: "command-a-03-2025", + Name: "Command A", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 8000, + }, + }, + "command-a-reasoning-08-2025": { + ID: "command-a-reasoning-08-2025", + Name: "Command A Reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "command-a-translate-08-2025": { + ID: "command-a-translate-08-2025", + Name: "Command A Translate", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8000, + Output: 8000, + }, + }, + "command-a-vision-07-2025": { + ID: "command-a-vision-07-2025", + Name: "Command A Vision", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8000, + }, + }, + "command-r-08-2024": { + ID: "command-r-08-2024", + Name: "Command R", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4000, + }, + }, + "command-r-plus-08-2024": { + ID: "command-r-plus-08-2024", + Name: "Command R+", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4000, + }, + }, + "command-r7b-12-2024": { + ID: "command-r7b-12-2024", + Name: "Command R7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.0375, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4000, + }, + }, + }, + }, + "cortecs": { + ID: "cortecs", + Env: []string{"CORTECS_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Cortecs", + Models: map[string]ModelInfo{ + "claude-4-5-sonnet": { + ID: "claude-4-5-sonnet", + Name: "Claude 4.5 Sonnet", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3.259, + Output: 16.296, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 200000, + }, + }, + "claude-sonnet-4": { + ID: "claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3.307, + Output: 16.536, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "deepseek-v3-0324": { + ID: "deepseek-v3-0324", + Name: "DeepSeek V3 0324", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.551, + Output: 1.654, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "devstral-2512": { + ID: "devstral-2512", + Name: "Devstral 2 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "devstral-small-2512": { + ID: "devstral-small-2512", + Name: "Devstral Small 2 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.654, + Output: 11.024, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65535, + }, + }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "GPT 4.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.354, + Output: 9.417, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "GPT Oss 120b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "intellect-3": { + ID: "intellect-3", + Name: "INTELLECT 3", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.219, + Output: 1.202, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "kimi-k2-instruct": { + ID: "kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.551, + Output: 2.646, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.656, + Output: 2.731, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "llama-3.1-405b-instruct": { + ID: "llama-3.1-405b-instruct", + Name: "Llama 3.1 405B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "nova-pro-v1": { + ID: "nova-pro-v1", + Name: "Nova Pro 1.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.016, + Output: 4.061, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 300000, + Output: 5000, + }, + }, + "qwen3-32b": { + ID: "qwen3-32b", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.099, + Output: 0.33, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "qwen3-coder-480b-a35b-instruct": { + ID: "qwen3-coder-480b-a35b-instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.441, + Output: 1.984, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "qwen3-next-80b-a3b-thinking": { + ID: "qwen3-next-80b-a3b-thinking", + Name: "Qwen3 Next 80B A3B Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.164, + Output: 1.311, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + }, + }, + "deepinfra": { + ID: "deepinfra", + Env: []string{"DEEPINFRA_API_KEY" }, + NPM: "@ai-sdk/deepinfra", + Name: "Deep Infra", + Models: map[string]ModelInfo{ + "MiniMaxAI/MiniMax-M2": { + ID: "MiniMaxAI/MiniMax-M2", + Name: "MiniMax M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.254, + Output: 1.02, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-Turbo", + Name: "Qwen3 Coder 480B A35B Instruct Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "moonshotai/Kimi-K2-Instruct": { + ID: "moonshotai/Kimi-K2-Instruct", + Name: "Kimi K2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.47, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.24, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "zai-org/GLM-4.5": { + ID: "zai-org/GLM-4.5", + Name: "GLM-4.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 98304, + }, + }, + "zai-org/GLM-4.7": { + ID: "zai-org/GLM-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.43, + Output: 1.75, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 16384, + }, + }, + }, + }, + "deepseek": { + ID: "deepseek", + Env: []string{"DEEPSEEK_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "DeepSeek", + Models: map[string]ModelInfo{ + "deepseek-chat": { + ID: "deepseek-chat", + Name: "DeepSeek Chat", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: &[]float64{0.028}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "deepseek-reasoner": { + ID: "deepseek-reasoner", + Name: "DeepSeek Reasoner", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: &[]float64{0.028}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + }, + }, + "fastrouter": { + ID: "fastrouter", + Env: []string{"FASTROUTER_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "FastRouter", + Models: map[string]ModelInfo{ + "anthropic/claude-opus-4.1": { + ID: "anthropic/claude-opus-4.1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-sonnet-4": { + ID: "anthropic/claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "deepseek-ai/deepseek-r1-distill-llama-70b": { + ID: "deepseek-ai/deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "google/gemini-2.5-flash": { + ID: "google/gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.0375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-pro": { + ID: "google/gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "moonshotai/kimi-k2": { + ID: "moonshotai/kimi-k2", + Name: "Kimi K2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-4.1": { + ID: "openai/gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-5": { + ID: "openai/gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-mini": { + ID: "openai/gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-nano": { + ID: "openai/gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.005}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "qwen/qwen3-coder": { + ID: "qwen/qwen3-coder", + Name: "Qwen3 Coder", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "x-ai/grok-4": { + ID: "x-ai/grok-4", + Name: "Grok 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: &[]float64{15}[0], + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + }, + }, + "fireworks-ai": { + ID: "fireworks-ai", + Env: []string{"FIREWORKS_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Fireworks AI", + Models: map[string]ModelInfo{ + "accounts/fireworks/models/deepseek-r1-0528": { + ID: "accounts/fireworks/models/deepseek-r1-0528", + Name: "Deepseek R1 05/28", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 160000, + Output: 16384, + }, + }, + "accounts/fireworks/models/deepseek-v3-0324": { + ID: "accounts/fireworks/models/deepseek-v3-0324", + Name: "Deepseek V3 03-24", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.9, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 160000, + Output: 16384, + }, + }, + "accounts/fireworks/models/deepseek-v3p1": { + ID: "accounts/fireworks/models/deepseek-v3p1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 1.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "accounts/fireworks/models/deepseek-v3p2": { + ID: "accounts/fireworks/models/deepseek-v3p2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 1.68, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 160000, + Output: 160000, + }, + }, + "accounts/fireworks/models/glm-4p5": { + ID: "accounts/fireworks/models/glm-4p5", + Name: "GLM 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "accounts/fireworks/models/glm-4p5-air": { + ID: "accounts/fireworks/models/glm-4p5-air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "accounts/fireworks/models/glm-4p6": { + ID: "accounts/fireworks/models/glm-4p6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 198000, + Output: 198000, + }, + }, + "accounts/fireworks/models/glm-4p7": { + ID: "accounts/fireworks/models/glm-4p7", + Name: "GLM 4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.3}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 198000, + Output: 198000, + }, + }, + "accounts/fireworks/models/gpt-oss-120b": { + ID: "accounts/fireworks/models/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "accounts/fireworks/models/gpt-oss-20b": { + ID: "accounts/fireworks/models/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "accounts/fireworks/models/kimi-k2-instruct": { + ID: "accounts/fireworks/models/kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "accounts/fireworks/models/kimi-k2-thinking": { + ID: "accounts/fireworks/models/kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + "accounts/fireworks/models/minimax-m2": { + ID: "accounts/fireworks/models/minimax-m2", + Name: "MiniMax-M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 192000, + Output: 192000, + }, + }, + "accounts/fireworks/models/minimax-m2p1": { + ID: "accounts/fireworks/models/minimax-m2p1", + Name: "MiniMax-M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 200000, + }, + }, + "accounts/fireworks/models/qwen3-235b-a22b": { + ID: "accounts/fireworks/models/qwen3-235b-a22b", + Name: "Qwen3 235B-A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct": { + ID: "accounts/fireworks/models/qwen3-coder-480b-a35b-instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.45, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32768, + }, + }, + }, + }, + "friendli": { + ID: "friendli", + Env: []string{"FRIENDLI_TOKEN" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Friendli", + Models: map[string]ModelInfo{ + "LGAI-EXAONE/EXAONE-4.0.1-32B": { + ID: "LGAI-EXAONE/EXAONE-4.0.1-32B", + Name: "EXAONE 4.0.1 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "Qwen/Qwen3-30B-A3B": { + ID: "Qwen/Qwen3-30B-A3B", + Name: "Qwen3 30B A3B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8000, + }, + }, + "Qwen/Qwen3-32B": { + ID: "Qwen/Qwen3-32B", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8000, + }, + }, + "deepseek-ai/DeepSeek-R1-0528": { + ID: "deepseek-ai/DeepSeek-R1-0528", + Name: "DeepSeek R1 0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "meta-llama-3.1-8b-instruct": { + ID: "meta-llama-3.1-8b-instruct", + Name: "Llama 3.1 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8000, + }, + }, + "meta-llama-3.3-70b-instruct": { + ID: "meta-llama-3.3-70b-instruct", + Name: "Llama 3.3 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "meta-llama/Llama-4-Maverick-17B-128E-Instruct": { + ID: "meta-llama/Llama-4-Maverick-17B-128E-Instruct", + Name: "Llama 4 Maverick 17B 128E Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8000, + }, + }, + "meta-llama/Llama-4-Scout-17B-16E-Instruct": { + ID: "meta-llama/Llama-4-Scout-17B-16E-Instruct", + Name: "Llama 4 Scout 17B 16E Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8000, + }, + }, + "zai-org/GLM-4.6": { + ID: "zai-org/GLM-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + }, + }, + "github-copilot": { + ID: "github-copilot", + Env: []string{"GITHUB_TOKEN" }, + NPM: "@ai-sdk/openai-compatible", + Name: "GitHub Copilot", + Models: map[string]ModelInfo{ + "claude-3.5-sonnet": { + ID: "claude-3.5-sonnet", + Name: "Claude Sonnet 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 90000, + Output: 8192, + }, + }, + "claude-3.7-sonnet": { + ID: "claude-3.7-sonnet", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 16384, + }, + }, + "claude-3.7-sonnet-thought": { + ID: "claude-3.7-sonnet-thought", + Name: "Claude Sonnet 3.7 Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 16384, + }, + }, + "claude-haiku-4.5": { + ID: "claude-haiku-4.5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16000, + }, + }, + "claude-opus-4": { + ID: "claude-opus-4", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 80000, + Output: 16000, + }, + }, + "claude-opus-4.5": { + ID: "claude-opus-4.5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16000, + }, + }, + "claude-opus-41": { + ID: "claude-opus-41", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 80000, + Output: 16000, + }, + }, + "claude-sonnet-4": { + ID: "claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16000, + }, + }, + "claude-sonnet-4.5": { + ID: "claude-sonnet-4.5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16000, + }, + }, + "gemini-2.0-flash-001": { + ID: "gemini-2.0-flash-001", + Name: "Gemini 2.0 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 8192, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "gemini-3-flash-preview": { + ID: "gemini-3-flash-preview", + Name: "Gemini 3 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o": { + ID: "gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 16384, + }, + }, + "gpt-5": { + ID: "gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-5-codex": { + ID: "gpt-5-codex", + Name: "GPT-5-Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "GPT-5-mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "GPT-5.1-Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-5.1-codex-max": { + ID: "gpt-5.1-codex-max", + Name: "GPT-5.1-Codex-max", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "GPT-5.1-Codex-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 100000, + }, + }, + "gpt-5.2": { + ID: "gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "grok-code-fast-1": { + ID: "grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "o3": { + ID: "o3", + Name: "o3 (Preview)", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "o3-mini": { + ID: "o3-mini", + Name: "o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "o4-mini": { + ID: "o4-mini", + Name: "o4-mini (Preview)", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "oswe-vscode-prime": { + ID: "oswe-vscode-prime", + Name: "Raptor Mini (Preview)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + }, + }, + "github-models": { + ID: "github-models", + Env: []string{"GITHUB_TOKEN" }, + NPM: "@ai-sdk/openai-compatible", + Name: "GitHub Models", + Models: map[string]ModelInfo{ + "ai21-labs/ai21-jamba-1.5-large": { + ID: "ai21-labs/ai21-jamba-1.5-large", + Name: "AI21 Jamba 1.5 Large", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 4096, + }, + }, + "ai21-labs/ai21-jamba-1.5-mini": { + ID: "ai21-labs/ai21-jamba-1.5-mini", + Name: "AI21 Jamba 1.5 Mini", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 4096, + }, + }, + "cohere/cohere-command-a": { + ID: "cohere/cohere-command-a", + Name: "Cohere Command A", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cohere/cohere-command-r": { + ID: "cohere/cohere-command-r", + Name: "Cohere Command R", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cohere/cohere-command-r-08-2024": { + ID: "cohere/cohere-command-r-08-2024", + Name: "Cohere Command R 08-2024", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cohere/cohere-command-r-plus": { + ID: "cohere/cohere-command-r-plus", + Name: "Cohere Command R+", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cohere/cohere-command-r-plus-08-2024": { + ID: "cohere/cohere-command-r-plus-08-2024", + Name: "Cohere Command R+ 08-2024", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "core42/jais-30b-chat": { + ID: "core42/jais-30b-chat", + Name: "JAIS 30b Chat", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "deepseek/deepseek-r1": { + ID: "deepseek/deepseek-r1", + Name: "DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 8192, + }, + }, + "deepseek/deepseek-r1-0528": { + ID: "deepseek/deepseek-r1-0528", + Name: "DeepSeek-R1-0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 8192, + }, + }, + "deepseek/deepseek-v3-0324": { + ID: "deepseek/deepseek-v3-0324", + Name: "DeepSeek-V3-0324", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta/llama-3.2-11b-vision-instruct": { + ID: "meta/llama-3.2-11b-vision-instruct", + Name: "Llama-3.2-11B-Vision-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta/llama-3.2-90b-vision-instruct": { + ID: "meta/llama-3.2-90b-vision-instruct", + Name: "Llama-3.2-90B-Vision-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta/llama-3.3-70b-instruct": { + ID: "meta/llama-3.3-70b-instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta/llama-4-maverick-17b-128e-instruct-fp8": { + ID: "meta/llama-4-maverick-17b-128e-instruct-fp8", + Name: "Llama 4 Maverick 17B 128E Instruct FP8", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta/llama-4-scout-17b-16e-instruct": { + ID: "meta/llama-4-scout-17b-16e-instruct", + Name: "Llama 4 Scout 17B 16E Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta/meta-llama-3-70b-instruct": { + ID: "meta/meta-llama-3-70b-instruct", + Name: "Meta-Llama-3-70B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta/meta-llama-3-8b-instruct": { + ID: "meta/meta-llama-3-8b-instruct", + Name: "Meta-Llama-3-8B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "meta/meta-llama-3.1-405b-instruct": { + ID: "meta/meta-llama-3.1-405b-instruct", + Name: "Meta-Llama-3.1-405B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta/meta-llama-3.1-70b-instruct": { + ID: "meta/meta-llama-3.1-70b-instruct", + Name: "Meta-Llama-3.1-70B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta/meta-llama-3.1-8b-instruct": { + ID: "meta/meta-llama-3.1-8b-instruct", + Name: "Meta-Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "microsoft/mai-ds-r1": { + ID: "microsoft/mai-ds-r1", + Name: "MAI-DS-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 8192, + }, + }, + "microsoft/phi-3-medium-128k-instruct": { + ID: "microsoft/phi-3-medium-128k-instruct", + Name: "Phi-3-medium instruct (128k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3-medium-4k-instruct": { + ID: "microsoft/phi-3-medium-4k-instruct", + Name: "Phi-3-medium instruct (4k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 1024, + }, + }, + "microsoft/phi-3-mini-128k-instruct": { + ID: "microsoft/phi-3-mini-128k-instruct", + Name: "Phi-3-mini instruct (128k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3-mini-4k-instruct": { + ID: "microsoft/phi-3-mini-4k-instruct", + Name: "Phi-3-mini instruct (4k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 1024, + }, + }, + "microsoft/phi-3-small-128k-instruct": { + ID: "microsoft/phi-3-small-128k-instruct", + Name: "Phi-3-small instruct (128k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3-small-8k-instruct": { + ID: "microsoft/phi-3-small-8k-instruct", + Name: "Phi-3-small instruct (8k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 2048, + }, + }, + "microsoft/phi-3.5-mini-instruct": { + ID: "microsoft/phi-3.5-mini-instruct", + Name: "Phi-3.5-mini instruct (128k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3.5-moe-instruct": { + ID: "microsoft/phi-3.5-moe-instruct", + Name: "Phi-3.5-MoE instruct (128k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3.5-vision-instruct": { + ID: "microsoft/phi-3.5-vision-instruct", + Name: "Phi-3.5-vision instruct (128k)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-4": { + ID: "microsoft/phi-4", + Name: "Phi-4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "microsoft/phi-4-mini-instruct": { + ID: "microsoft/phi-4-mini-instruct", + Name: "Phi-4-mini-instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-4-mini-reasoning": { + ID: "microsoft/phi-4-mini-reasoning", + Name: "Phi-4-mini-reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-4-multimodal-instruct": { + ID: "microsoft/phi-4-multimodal-instruct", + Name: "Phi-4-multimodal-instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-4-reasoning": { + ID: "microsoft/phi-4-reasoning", + Name: "Phi-4-Reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistral-ai/codestral-2501": { + ID: "mistral-ai/codestral-2501", + Name: "Codestral 25.01", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 8192, + }, + }, + "mistral-ai/ministral-3b": { + ID: "mistral-ai/ministral-3b", + Name: "Ministral 3B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistral-ai/mistral-large-2411": { + ID: "mistral-ai/mistral-large-2411", + Name: "Mistral Large 24.11", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "mistral-ai/mistral-medium-2505": { + ID: "mistral-ai/mistral-medium-2505", + Name: "Mistral Medium 3 (25.05)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "mistral-ai/mistral-nemo": { + ID: "mistral-ai/mistral-nemo", + Name: "Mistral Nemo", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistral-ai/mistral-small-2503": { + ID: "mistral-ai/mistral-small-2503", + Name: "Mistral Small 3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "openai/gpt-4.1": { + ID: "openai/gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-4.1-mini": { + ID: "openai/gpt-4.1-mini", + Name: "GPT-4.1-mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-4.1-nano": { + ID: "openai/gpt-4.1-nano", + Name: "GPT-4.1-nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-4o": { + ID: "openai/gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-4o-mini": { + ID: "openai/gpt-4o-mini", + Name: "GPT-4o mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/o1": { + ID: "openai/o1", + Name: "OpenAI o1", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o1-mini": { + ID: "openai/o1-mini", + Name: "OpenAI o1-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "openai/o1-preview": { + ID: "openai/o1-preview", + Name: "OpenAI o1-preview", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "openai/o3": { + ID: "openai/o3", + Name: "OpenAI o3", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-mini": { + ID: "openai/o3-mini", + Name: "OpenAI o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o4-mini": { + ID: "openai/o4-mini", + Name: "OpenAI o4-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "xai/grok-3": { + ID: "xai/grok-3", + Name: "Grok 3", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "xai/grok-3-mini": { + ID: "xai/grok-3-mini", + Name: "Grok 3 Mini", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + }, + }, + "google": { + ID: "google", + Env: []string{"GOOGLE_API_KEY", "GEMINI_API_KEY", "GOOGLE_GENERATIVE_AI_API_KEY" }, + NPM: "@ai-sdk/google", + Name: "Google", + Models: map[string]ModelInfo{ + "gemini-1.5-flash": { + ID: "gemini-1.5-flash", + Name: "Gemini 1.5 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: &[]float64{0.01875}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 8192, + }, + }, + "gemini-1.5-flash-8b": { + ID: "gemini-1.5-flash-8b", + Name: "Gemini 1.5 Flash-8B", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.0375, + Output: 0.15, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 8192, + }, + }, + "gemini-1.5-pro": { + ID: "gemini-1.5-pro", + Name: "Gemini 1.5 Pro", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 5, + CacheRead: &[]float64{0.3125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 8192, + }, + }, + "gemini-2.0-flash": { + ID: "gemini-2.0-flash", + Name: "Gemini 2.0 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "gemini-2.0-flash-lite": { + ID: "gemini-2.0-flash-lite", + Name: "Gemini 2.0 Flash Lite", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "gemini-2.5-flash": { + ID: "gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-image": { + ID: "gemini-2.5-flash-image", + Name: "Gemini 2.5 Flash Image", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 30, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "gemini-2.5-flash-image-preview": { + ID: "gemini-2.5-flash-image-preview", + Name: "Gemini 2.5 Flash Image (Preview)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 30, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "gemini-2.5-flash-lite": { + ID: "gemini-2.5-flash-lite", + Name: "Gemini 2.5 Flash Lite", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-lite-preview-06-17": { + ID: "gemini-2.5-flash-lite-preview-06-17", + Name: "Gemini 2.5 Flash Lite Preview 06-17", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-lite-preview-09-2025": { + ID: "gemini-2.5-flash-lite-preview-09-2025", + Name: "Gemini 2.5 Flash Lite Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-04-17": { + ID: "gemini-2.5-flash-preview-04-17", + Name: "Gemini 2.5 Flash Preview 04-17", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.0375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-05-20": { + ID: "gemini-2.5-flash-preview-05-20", + Name: "Gemini 2.5 Flash Preview 05-20", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.0375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-09-2025": { + ID: "gemini-2.5-flash-preview-09-2025", + Name: "Gemini 2.5 Flash Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-tts": { + ID: "gemini-2.5-flash-preview-tts", + Name: "Gemini 2.5 Flash Preview TTS", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.5, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8000, + Output: 16000, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro-preview-05-06": { + ID: "gemini-2.5-pro-preview-05-06", + Name: "Gemini 2.5 Pro Preview 05-06", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro-preview-06-05": { + ID: "gemini-2.5-pro-preview-06-05", + Name: "Gemini 2.5 Pro Preview 06-05", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro-preview-tts": { + ID: "gemini-2.5-pro-preview-tts", + Name: "Gemini 2.5 Pro Preview TTS", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1, + Output: 20, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8000, + Output: 16000, + }, + }, + "gemini-3-flash-preview": { + ID: "gemini-3-flash-preview", + Name: "Gemini 3 Flash Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "gemini-embedding-001": { + ID: "gemini-embedding-001", + Name: "Gemini Embedding 001", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.15, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2048, + Output: 3072, + }, + }, + "gemini-flash-latest": { + ID: "gemini-flash-latest", + Name: "Gemini Flash Latest", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-flash-lite-latest": { + ID: "gemini-flash-lite-latest", + Name: "Gemini Flash-Lite Latest", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-live-2.5-flash": { + ID: "gemini-live-2.5-flash", + Name: "Gemini Live 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8000, + }, + }, + "gemini-live-2.5-flash-preview-native-audio": { + ID: "gemini-live-2.5-flash-preview-native-audio", + Name: "Gemini Live 2.5 Flash Preview Native Audio", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + }, + }, + "google-vertex": { + ID: "google-vertex", + Env: []string{"GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS" }, + NPM: "@ai-sdk/google-vertex", + Name: "Vertex", + Models: map[string]ModelInfo{ + "gemini-2.0-flash": { + ID: "gemini-2.0-flash", + Name: "Gemini 2.0 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "gemini-2.0-flash-lite": { + ID: "gemini-2.0-flash-lite", + Name: "Gemini 2.0 Flash Lite", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "gemini-2.5-flash": { + ID: "gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.383}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-lite": { + ID: "gemini-2.5-flash-lite", + Name: "Gemini 2.5 Flash Lite", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-lite-preview-06-17": { + ID: "gemini-2.5-flash-lite-preview-06-17", + Name: "Gemini 2.5 Flash Lite Preview 06-17", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 65536, + }, + }, + "gemini-2.5-flash-lite-preview-09-2025": { + ID: "gemini-2.5-flash-lite-preview-09-2025", + Name: "Gemini 2.5 Flash Lite Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-04-17": { + ID: "gemini-2.5-flash-preview-04-17", + Name: "Gemini 2.5 Flash Preview 04-17", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.0375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-05-20": { + ID: "gemini-2.5-flash-preview-05-20", + Name: "Gemini 2.5 Flash Preview 05-20", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.0375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-flash-preview-09-2025": { + ID: "gemini-2.5-flash-preview-09-2025", + Name: "Gemini 2.5 Flash Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.383}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro-preview-05-06": { + ID: "gemini-2.5-pro-preview-05-06", + Name: "Gemini 2.5 Pro Preview 05-06", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro-preview-06-05": { + ID: "gemini-2.5-pro-preview-06-05", + Name: "Gemini 2.5 Pro Preview 06-05", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-flash-preview": { + ID: "gemini-3-flash-preview", + Name: "Gemini 3 Flash Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-embedding-001": { + ID: "gemini-embedding-001", + Name: "Gemini Embedding 001", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.15, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2048, + Output: 3072, + }, + }, + "gemini-flash-latest": { + ID: "gemini-flash-latest", + Name: "Gemini Flash Latest", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.383}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-flash-lite-latest": { + ID: "gemini-flash-lite-latest", + Name: "Gemini Flash-Lite Latest", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "openai/gpt-oss-120b-maas": { + ID: "openai/gpt-oss-120b-maas", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.36, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-20b-maas": { + ID: "openai/gpt-oss-20b-maas", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + }, + }, + "google-vertex-anthropic": { + ID: "google-vertex-anthropic", + Env: []string{"GOOGLE_VERTEX_PROJECT", "GOOGLE_VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS" }, + NPM: "@ai-sdk/google-vertex", + Name: "Vertex (Anthropic)", + Models: map[string]ModelInfo{ + "claude-3-5-haiku@20241022": { + ID: "claude-3-5-haiku@20241022", + Name: "Claude Haiku 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3-5-sonnet@20241022": { + ID: "claude-3-5-sonnet@20241022", + Name: "Claude Sonnet 3.5 v2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3-7-sonnet@20250219": { + ID: "claude-3-7-sonnet@20250219", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-haiku-4-5@20251001": { + ID: "claude-haiku-4-5@20251001", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4-1@20250805": { + ID: "claude-opus-4-1@20250805", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-5@20251101": { + ID: "claude-opus-4-5@20251101", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4@20250514": { + ID: "claude-opus-4@20250514", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-sonnet-4-5@20250929": { + ID: "claude-sonnet-4-5@20250929", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4@20250514": { + ID: "claude-sonnet-4@20250514", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + }, + }, + "groq": { + ID: "groq", + Env: []string{"GROQ_API_KEY" }, + NPM: "@ai-sdk/groq", + Name: "Groq", + Models: map[string]ModelInfo{ + "deepseek-r1-distill-llama-70b": { + ID: "deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.75, + Output: 0.99, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "gemma2-9b-it": { + ID: "gemma2-9b-it", + Name: "Gemma 2 9B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama-3.1-8b-instant": { + ID: "llama-3.1-8b-instant", + Name: "Llama 3.1 8B Instant", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.08, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "llama-3.3-70b-versatile": { + ID: "llama-3.3-70b-versatile", + Name: "Llama 3.3 70B Versatile", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.79, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "llama-guard-3-8b": { + ID: "llama-guard-3-8b", + Name: "Llama Guard 3 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama3-70b-8192": { + ID: "llama3-70b-8192", + Name: "Llama 3 70B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.79, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "llama3-8b-8192": { + ID: "llama3-8b-8192", + Name: "Llama 3 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.08, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "meta-llama/llama-4-maverick-17b-128e-instruct": { + ID: "meta-llama/llama-4-maverick-17b-128e-instruct", + Name: "Llama 4 Maverick 17B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "meta-llama/llama-4-scout-17b-16e-instruct": { + ID: "meta-llama/llama-4-scout-17b-16e-instruct", + Name: "Llama 4 Scout 17B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.34, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "meta-llama/llama-guard-4-12b": { + ID: "meta-llama/llama-guard-4-12b", + Name: "Llama Guard 4 12B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 1024, + }, + }, + "mistral-saba-24b": { + ID: "mistral-saba-24b", + Name: "Mistral Saba 24B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.79, + Output: 0.79, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "moonshotai/kimi-k2-instruct": { + ID: "moonshotai/kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "moonshotai/kimi-k2-instruct-0905": { + ID: "moonshotai/kimi-k2-instruct-0905", + Name: "Kimi K2 Instruct 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "qwen-qwq-32b": { + ID: "qwen-qwq-32b", + Name: "Qwen QwQ 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 0.39, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "qwen/qwen3-32b": { + ID: "qwen/qwen3-32b", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + }, + }, + "helicone": { + ID: "helicone", + Env: []string{"HELICONE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Helicone", + Models: map[string]ModelInfo{ + "chatgpt-4o-latest": { + ID: "chatgpt-4o-latest", + Name: "OpenAI ChatGPT-4o", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 20, + CacheRead: &[]float64{2.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "claude-3-haiku-20240307": { + ID: "claude-3-haiku-20240307", + Name: "Anthropic: Claude 3 Haiku", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1.25, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "claude-3.5-haiku": { + ID: "claude-3.5-haiku", + Name: "Anthropic: Claude 3.5 Haiku", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7999999999999999, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3.5-sonnet-v2": { + ID: "claude-3.5-sonnet-v2", + Name: "Anthropic: Claude 3.5 Sonnet v2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.30000000000000004}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-3.7-sonnet": { + ID: "claude-3.7-sonnet", + Name: "Anthropic: Claude 3.7 Sonnet", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.30000000000000004}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-4.5-haiku": { + ID: "claude-4.5-haiku", + Name: "Anthropic: Claude 4.5 Haiku", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.09999999999999999}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-4.5-opus": { + ID: "claude-4.5-opus", + Name: "Anthropic: Claude Opus 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5000000000000001}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-4.5-sonnet": { + ID: "claude-4.5-sonnet", + Name: "Anthropic: Claude Sonnet 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.30000000000000004}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-haiku-4-5-20251001": { + ID: "claude-haiku-4-5-20251001", + Name: "Anthropic: Claude 4.5 Haiku (20251001)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.09999999999999999}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-opus-4": { + ID: "claude-opus-4", + Name: "Anthropic: Claude Opus 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-1": { + ID: "claude-opus-4-1", + Name: "Anthropic: Claude Opus 4.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-1-20250805": { + ID: "claude-opus-4-1-20250805", + Name: "Anthropic: Claude Opus 4.1 (20250805)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-sonnet-4": { + ID: "claude-sonnet-4", + Name: "Anthropic: Claude Sonnet 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.30000000000000004}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4-5-20250929": { + ID: "claude-sonnet-4-5-20250929", + Name: "Anthropic: Claude Sonnet 4.5 (20250929)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.30000000000000004}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "codex-mini-latest": { + ID: "codex-mini-latest", + Name: "OpenAI Codex Mini Latest", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.5, + Output: 6, + CacheRead: &[]float64{0.375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "deepseek-r1-distill-llama-70b": { + ID: "deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.13, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "deepseek-reasoner": { + ID: "deepseek-reasoner", + Name: "DeepSeek Reasoner", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 1.68, + CacheRead: &[]float64{0.07}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek-tng-r1t2-chimera": { + ID: "deepseek-tng-r1t2-chimera", + Name: "DeepSeek TNG R1T2 Chimera", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 130000, + Output: 163840, + }, + }, + "deepseek-v3": { + ID: "deepseek-v3", + Name: "DeepSeek V3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 1.68, + CacheRead: &[]float64{0.07}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "deepseek-v3.1-terminus": { + ID: "deepseek-v3.1-terminus", + Name: "DeepSeek V3.1 Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: &[]float64{0.21600000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "deepseek-v3.2": { + ID: "deepseek-v3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.41, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "ernie-4.5-21b-a3b-thinking": { + ID: "ernie-4.5-21b-a3b-thinking", + Name: "Baidu Ernie 4.5 21B A3B Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8000, + }, + }, + "gemini-2.5-flash": { + ID: "gemini-2.5-flash", + Name: "Google Gemini 2.5 Flash", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65535, + }, + }, + "gemini-2.5-flash-lite": { + ID: "gemini-2.5-flash-lite", + Name: "Google Gemini 2.5 Flash Lite", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.09999999999999999, + Output: 0.39999999999999997, + CacheRead: &[]float64{0.024999999999999998}[0], + CacheWrite: &[]float64{0.09999999999999999}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65535, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "Google Gemini 2.5 Pro", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.3125}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Google Gemini 3 Pro Preview", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.19999999999999998}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemma-3-12b-it": { + ID: "gemma-3-12b-it", + Name: "Google Gemma 3 12B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.049999999999999996, + Output: 0.09999999999999999, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "gemma2-9b-it": { + ID: "gemma2-9b-it", + Name: "Google Gemma 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.03, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "glm-4.6": { + ID: "glm-4.6", + Name: "Zai GLM-4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.44999999999999996, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "OpenAI GPT-4.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-mini": { + ID: "gpt-4.1-mini", + Name: "OpenAI GPT-4.1 Mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.39999999999999997, + Output: 1.5999999999999999, + CacheRead: &[]float64{0.09999999999999999}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-mini-2025-04-14": { + ID: "gpt-4.1-mini-2025-04-14", + Name: "OpenAI GPT-4.1 Mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.39999999999999997, + Output: 1.5999999999999999, + CacheRead: &[]float64{0.09999999999999999}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-nano": { + ID: "gpt-4.1-nano", + Name: "OpenAI GPT-4.1 Nano", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09999999999999999, + Output: 0.39999999999999997, + CacheRead: &[]float64{0.024999999999999998}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4o": { + ID: "gpt-4o", + Name: "OpenAI GPT-4o", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o-mini": { + ID: "gpt-4o-mini", + Name: "OpenAI GPT-4o-mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5": { + ID: "gpt-5", + Name: "OpenAI GPT-5", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.12500000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-chat-latest": { + ID: "gpt-5-chat-latest", + Name: "OpenAI GPT-5 Chat Latest", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.12500000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5-codex": { + ID: "gpt-5-codex", + Name: "OpenAI: GPT-5 Codex", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.12500000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "OpenAI GPT-5 Mini", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.024999999999999998}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "OpenAI GPT-5 Nano", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.049999999999999996, + Output: 0.39999999999999997, + CacheRead: &[]float64{0.005}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-pro": { + ID: "gpt-5-pro", + Name: "OpenAI: GPT-5 Pro", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "OpenAI GPT-5.1", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.12500000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-chat-latest": { + ID: "gpt-5.1-chat-latest", + Name: "OpenAI GPT-5.1 Chat", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.12500000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "OpenAI: GPT-5.1 Codex", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.12500000000000003}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "OpenAI: GPT-5.1 Codex Mini", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.024999999999999998}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "OpenAI GPT-OSS 120b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.16, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "gpt-oss-20b": { + ID: "gpt-oss-20b", + Name: "OpenAI GPT-OSS 20b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.049999999999999996, + Output: 0.19999999999999998, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "grok-3": { + ID: "grok-3", + Name: "xAI Grok 3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "grok-3-mini": { + ID: "grok-3-mini", + Name: "xAI Grok 3 Mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "grok-4": { + ID: "grok-4", + Name: "xAI Grok 4", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + "grok-4-1-fast-non-reasoning": { + ID: "grok-4-1-fast-non-reasoning", + Name: "xAI Grok 4.1 Fast Non-Reasoning", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.19999999999999998, + Output: 0.5, + CacheRead: &[]float64{0.049999999999999996}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "grok-4-1-fast-reasoning": { + ID: "grok-4-1-fast-reasoning", + Name: "xAI Grok 4.1 Fast Reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.19999999999999998, + Output: 0.5, + CacheRead: &[]float64{0.049999999999999996}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 2000000, + }, + }, + "grok-4-fast-non-reasoning": { + ID: "grok-4-fast-non-reasoning", + Name: "xAI Grok 4 Fast Non-Reasoning", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.19999999999999998, + Output: 0.5, + CacheRead: &[]float64{0.049999999999999996}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 2000000, + }, + }, + "grok-4-fast-reasoning": { + ID: "grok-4-fast-reasoning", + Name: "xAI: Grok 4 Fast Reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.19999999999999998, + Output: 0.5, + CacheRead: &[]float64{0.049999999999999996}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 2000000, + }, + }, + "grok-code-fast-1": { + ID: "grok-code-fast-1", + Name: "xAI Grok Code Fast 1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.19999999999999998, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 10000, + }, + }, + "hermes-2-pro-llama-3-8b": { + ID: "hermes-2-pro-llama-3-8b", + Name: "Hermes 2 Pro Llama 3 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "kimi-k2-0711": { + ID: "kimi-k2-0711", + Name: "Kimi K2 (07/11)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5700000000000001, + Output: 2.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "kimi-k2-0905": { + ID: "kimi-k2-0905", + Name: "Kimi K2 (09/05)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: &[]float64{0.39999999999999997}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.48, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 262144, + }, + }, + "llama-3.1-8b-instant": { + ID: "llama-3.1-8b-instant", + Name: "Meta Llama 3.1 8B Instant", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.049999999999999996, + Output: 0.08, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32678, + }, + }, + "llama-3.1-8b-instruct": { + ID: "llama-3.1-8b-instruct", + Name: "Meta Llama 3.1 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.049999999999999996, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 16384, + }, + }, + "llama-3.1-8b-instruct-turbo": { + ID: "llama-3.1-8b-instruct-turbo", + Name: "Meta Llama 3.1 8B Instruct Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.03, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "llama-3.3-70b-instruct": { + ID: "llama-3.3-70b-instruct", + Name: "Meta Llama 3.3 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.39, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16400, + }, + }, + "llama-3.3-70b-versatile": { + ID: "llama-3.3-70b-versatile", + Name: "Meta Llama 3.3 70B Versatile", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.7899999999999999, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32678, + }, + }, + "llama-4-maverick": { + ID: "llama-4-maverick", + Name: "Meta Llama 4 Maverick 17B 128E", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "llama-4-scout": { + ID: "llama-4-scout", + Name: "Meta Llama 4 Scout 17B 16E", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "llama-guard-4": { + ID: "llama-guard-4", + Name: "Meta Llama Guard 4 12B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.21, + Output: 0.21, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 1024, + }, + }, + "llama-prompt-guard-2-22m": { + ID: "llama-prompt-guard-2-22m", + Name: "Meta Llama Prompt Guard 2 22M", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.01, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512, + Output: 2, + }, + }, + "llama-prompt-guard-2-86m": { + ID: "llama-prompt-guard-2-86m", + Name: "Meta Llama Prompt Guard 2 86M", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.01, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512, + Output: 2, + }, + }, + "mistral-large-2411": { + ID: "mistral-large-2411", + Name: "Mistral-Large", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "mistral-nemo": { + ID: "mistral-nemo", + Name: "Mistral Nemo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 20, + Output: 40, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16400, + }, + }, + "mistral-small": { + ID: "mistral-small", + Name: "Mistral Small", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 75, + Output: 200, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "o1": { + ID: "o1", + Name: "OpenAI: o1", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o1-mini": { + ID: "o1-mini", + Name: "OpenAI: o1-mini", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "o3": { + ID: "o3", + Name: "OpenAI o3", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-mini": { + ID: "o3-mini", + Name: "OpenAI o3 Mini", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-pro": { + ID: "o3-pro", + Name: "OpenAI o3 Pro", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 20, + Output: 80, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o4-mini": { + ID: "o4-mini", + Name: "OpenAI o4 Mini", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.275}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "qwen2.5-coder-7b-fast": { + ID: "qwen2.5-coder-7b-fast", + Name: "Qwen2.5 Coder 7B fast", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.09, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 8192, + }, + }, + "qwen3-235b-a22b-thinking": { + ID: "qwen3-235b-a22b-thinking", + Name: "Qwen3 235B A22B Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.9000000000000004, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 81920, + }, + }, + "qwen3-30b-a3b": { + ID: "qwen3-30b-a3b", + Name: "Qwen3 30B A3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 41000, + Output: 41000, + }, + }, + "qwen3-32b": { + ID: "qwen3-32b", + Name: "Qwen3 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 40960, + }, + }, + "qwen3-coder": { + ID: "qwen3-coder", + Name: "Qwen3 Coder 480B A35B Instruct Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.95, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "qwen3-coder-30b-a3b-instruct": { + ID: "qwen3-coder-30b-a3b-instruct", + Name: "Qwen3 Coder 30B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09999999999999999, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "qwen3-next-80b-a3b-instruct": { + ID: "qwen3-next-80b-a3b-instruct", + Name: "Qwen3 Next 80B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 16384, + }, + }, + "qwen3-vl-235b-a22b-instruct": { + ID: "qwen3-vl-235b-a22b-instruct", + Name: "Qwen3 VL 235B A22B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 16384, + }, + }, + "sonar": { + ID: "sonar", + Name: "Perplexity Sonar", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 4096, + }, + }, + "sonar-deep-research": { + ID: "sonar-deep-research", + Name: "Perplexity Sonar Deep Research", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 4096, + }, + }, + "sonar-pro": { + ID: "sonar-pro", + Name: "Perplexity Sonar Pro", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "sonar-reasoning": { + ID: "sonar-reasoning", + Name: "Perplexity Sonar Reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 4096, + }, + }, + "sonar-reasoning-pro": { + ID: "sonar-reasoning-pro", + Name: "Perplexity Sonar Reasoning Pro", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 4096, + }, + }, + }, + }, + "huggingface": { + ID: "huggingface", + Env: []string{"HF_TOKEN" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Hugging Face", + Models: map[string]ModelInfo{ + "MiniMaxAI/MiniMax-M2.1": { + ID: "MiniMaxAI/MiniMax-M2.1", + Name: "MiniMax-M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3-235B-A22B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen3-Coder-480B-A35B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "Qwen/Qwen3-Embedding-4B": { + ID: "Qwen/Qwen3-Embedding-4B", + Name: "Qwen 3 Embedding 4B", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.01, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 2048, + }, + }, + "Qwen/Qwen3-Embedding-8B": { + ID: "Qwen/Qwen3-Embedding-8B", + Name: "Qwen 3 Embedding 8B", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.01, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Name: "Qwen3-Next-80B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + ID: "Qwen/Qwen3-Next-80B-A3B-Thinking", + Name: "Qwen3-Next-80B-A3B-Thinking", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "XiaomiMiMo/MiMo-V2-Flash": { + ID: "XiaomiMiMo/MiMo-V2-Flash", + Name: "MiMo-V2-Flash", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 4096, + }, + }, + "deepseek-ai/DeepSeek-R1-0528": { + ID: "deepseek-ai/DeepSeek-R1-0528", + Name: "DeepSeek-R1-0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek-ai/DeepSeek-V3.2": { + ID: "deepseek-ai/DeepSeek-V3.2", + Name: "DeepSeek-V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "moonshotai/Kimi-K2-Instruct": { + ID: "moonshotai/Kimi-K2-Instruct", + Name: "Kimi-K2-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "moonshotai/Kimi-K2-Instruct-0905": { + ID: "moonshotai/Kimi-K2-Instruct-0905", + Name: "Kimi-K2-Instruct-0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "Kimi-K2-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "zai-org/GLM-4.7": { + ID: "zai-org/GLM-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + }, + }, + "iflowcn": { + ID: "iflowcn", + Env: []string{"IFLOW_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "iFlow", + Models: map[string]ModelInfo{ + "deepseek-r1": { + ID: "deepseek-r1", + Name: "DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "deepseek-v3": { + ID: "deepseek-v3", + Name: "DeepSeek-V3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "deepseek-v3.1": { + ID: "deepseek-v3.1", + Name: "DeepSeek-V3.1-Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek-v3.2": { + ID: "deepseek-v3.2", + Name: "DeepSeek-V3.2-Exp", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek-v3.2-chat": { + ID: "deepseek-v3.2-chat", + Name: "DeepSeek-V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "glm-4.6": { + ID: "glm-4.6", + Name: "GLM-4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 128000, + }, + }, + "kimi-k2": { + ID: "kimi-k2", + Name: "Kimi-K2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "kimi-k2-0905": { + ID: "kimi-k2-0905", + Name: "Kimi-K2-0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi-K2-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "minimax-m2": { + ID: "minimax-m2", + Name: "MiniMax-M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 204800, + Output: 131100, + }, + }, + "qwen3-235b": { + ID: "qwen3-235b", + Name: "Qwen3-235B-A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "qwen3-235b-a22b-instruct": { + ID: "qwen3-235b-a22b-instruct", + Name: "Qwen3-235B-A22B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "qwen3-235b-a22b-thinking-2507": { + ID: "qwen3-235b-a22b-thinking-2507", + Name: "Qwen3-235B-A22B-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "qwen3-32b": { + ID: "qwen3-32b", + Name: "Qwen3-32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "qwen3-coder": { + ID: "qwen3-coder", + Name: "Qwen3-Coder-480B-A35B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "qwen3-coder-plus": { + ID: "qwen3-coder-plus", + Name: "Qwen3-Coder-Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "qwen3-max": { + ID: "qwen3-max", + Name: "Qwen3-Max", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "qwen3-max-preview": { + ID: "qwen3-max-preview", + Name: "Qwen3-Max-Preview", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "qwen3-vl-plus": { + ID: "qwen3-vl-plus", + Name: "Qwen3-VL-Plus", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "tstars2.0": { + ID: "tstars2.0", + Name: "TStars-2.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + }, + }, + "inception": { + ID: "inception", + Env: []string{"INCEPTION_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Inception", + Models: map[string]ModelInfo{ + "mercury": { + ID: "mercury", + Name: "Mercury", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: &[]float64{0.25}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "mercury-coder": { + ID: "mercury-coder", + Name: "Mercury Coder", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: &[]float64{0.25}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + }, + }, + "inference": { + ID: "inference", + Env: []string{"INFERENCE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Inference", + Models: map[string]ModelInfo{ + "google/gemma-3": { + ID: "google/gemma-3", + Name: "Google Gemma 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 125000, + Output: 4096, + }, + }, + "meta/llama-3.1-8b-instruct": { + ID: "meta/llama-3.1-8b-instruct", + Name: "Llama 3.1 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.025, + Output: 0.025, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "meta/llama-3.2-11b-vision-instruct": { + ID: "meta/llama-3.2-11b-vision-instruct", + Name: "Llama 3.2 11B Vision Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.055, + Output: 0.055, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "meta/llama-3.2-1b-instruct": { + ID: "meta/llama-3.2-1b-instruct", + Name: "Llama 3.2 1B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.01, + Output: 0.01, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "meta/llama-3.2-3b-instruct": { + ID: "meta/llama-3.2-3b-instruct", + Name: "Llama 3.2 3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.02, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "mistral/mistral-nemo-12b-instruct": { + ID: "mistral/mistral-nemo-12b-instruct", + Name: "Mistral Nemo 12B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.038, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "osmosis/osmosis-structure-0.6b": { + ID: "osmosis/osmosis-structure-0.6b", + Name: "Osmosis Structure 0.6B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4000, + Output: 2048, + }, + }, + "qwen/qwen-2.5-7b-vision-instruct": { + ID: "qwen/qwen-2.5-7b-vision-instruct", + Name: "Qwen 2.5 7B Vision Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 125000, + Output: 4096, + }, + }, + "qwen/qwen3-embedding-4b": { + ID: "qwen/qwen3-embedding-4b", + Name: "Qwen 3 Embedding 4B", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.01, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 2048, + }, + }, + }, + }, + "io-net": { + ID: "io-net", + Env: []string{"IOINTELLIGENCE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "IO.NET", + Models: map[string]ModelInfo{ + "Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar": { + ID: "Intel/Qwen3-Coder-480B-A35B-Instruct-int4-mixed-ar", + Name: "Qwen 3 Coder 480B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.95, + CacheRead: &[]float64{0.11}[0], + CacheWrite: &[]float64{0.44}[0], + }, + Limit: Limit{ + Context: 106000, + Output: 4096, + }, + }, + "Qwen/Qwen2.5-VL-32B-Instruct": { + ID: "Qwen/Qwen2.5-VL-32B-Instruct", + Name: "Qwen 2.5 VL 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.22, + CacheRead: &[]float64{0.025}[0], + CacheWrite: &[]float64{0.1}[0], + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen 3 235B Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.6, + CacheRead: &[]float64{0.055}[0], + CacheWrite: &[]float64{0.22}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 4096, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Name: "Qwen 3 Next 80B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.8, + CacheRead: &[]float64{0.05}[0], + CacheWrite: &[]float64{0.2}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 4096, + }, + }, + "deepseek-ai/DeepSeek-R1-0528": { + ID: "deepseek-ai/DeepSeek-R1-0528", + Name: "DeepSeek R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8.75, + CacheRead: &[]float64{1}[0], + CacheWrite: &[]float64{4}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta-llama/Llama-3.2-90B-Vision-Instruct": { + ID: "meta-llama/Llama-3.2-90B-Vision-Instruct", + Name: "Llama 3.2 90B Vision Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 0.4, + CacheRead: &[]float64{0.175}[0], + CacheWrite: &[]float64{0.7}[0], + }, + Limit: Limit{ + Context: 16000, + Output: 4096, + }, + }, + "meta-llama/Llama-3.3-70B-Instruct": { + ID: "meta-llama/Llama-3.3-70B-Instruct", + Name: "Llama 3.3 70B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.38, + CacheRead: &[]float64{0.065}[0], + CacheWrite: &[]float64{0.26}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + ID: "meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", + Name: "Llama 4 Maverick 17B 128E Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 430000, + Output: 4096, + }, + }, + "mistralai/Devstral-Small-2505": { + ID: "mistralai/Devstral-Small-2505", + Name: "Devstral Small 2505", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.22, + CacheRead: &[]float64{0.025}[0], + CacheWrite: &[]float64{0.1}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistralai/Magistral-Small-2506": { + ID: "mistralai/Magistral-Small-2506", + Name: "Magistral Small 2506", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: &[]float64{0.25}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistralai/Mistral-Large-Instruct-2411": { + ID: "mistralai/Mistral-Large-Instruct-2411", + Name: "Mistral Large Instruct 2411", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: &[]float64{1}[0], + CacheWrite: &[]float64{4}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistralai/Mistral-Nemo-Instruct-2407": { + ID: "mistralai/Mistral-Nemo-Instruct-2407", + Name: "Mistral Nemo Instruct 2407", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.02, + Output: 0.04, + CacheRead: &[]float64{0.01}[0], + CacheWrite: &[]float64{0.04}[0], + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "moonshotai/Kimi-K2-Instruct-0905": { + ID: "moonshotai/Kimi-K2-Instruct-0905", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.39, + Output: 1.9, + CacheRead: &[]float64{0.195}[0], + CacheWrite: &[]float64{0.78}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 4096, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.25, + CacheRead: &[]float64{0.275}[0], + CacheWrite: &[]float64{1.1}[0], + }, + Limit: Limit{ + Context: 32768, + Output: 4096, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT-OSS 120B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.4, + CacheRead: &[]float64{0.02}[0], + CacheWrite: &[]float64{0.08}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 4096, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT-OSS 20B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.03, + Output: 0.14, + CacheRead: &[]float64{0.015}[0], + CacheWrite: &[]float64{0.06}[0], + }, + Limit: Limit{ + Context: 64000, + Output: 4096, + }, + }, + "zai-org/GLM-4.6": { + ID: "zai-org/GLM-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.75, + CacheRead: &[]float64{0.2}[0], + CacheWrite: &[]float64{0.8}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + }, + }, + "kimi-for-coding": { + ID: "kimi-for-coding", + Env: []string{"KIMI_API_KEY" }, + NPM: "@ai-sdk/anthropic", + Name: "Kimi For Coding", + Models: map[string]ModelInfo{ + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + }, + }, + "llama": { + ID: "llama", + Env: []string{"LLAMA_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Llama", + Models: map[string]ModelInfo{ + "cerebras-llama-4-maverick-17b-128e-instruct": { + ID: "cerebras-llama-4-maverick-17b-128e-instruct", + Name: "Cerebras-Llama-4-Maverick-17B-128E-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "cerebras-llama-4-scout-17b-16e-instruct": { + ID: "cerebras-llama-4-scout-17b-16e-instruct", + Name: "Cerebras-Llama-4-Scout-17B-16E-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "groq-llama-4-maverick-17b-128e-instruct": { + ID: "groq-llama-4-maverick-17b-128e-instruct", + Name: "Groq-Llama-4-Maverick-17B-128E-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "llama-3.3-70b-instruct": { + ID: "llama-3.3-70b-instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "llama-3.3-8b-instruct": { + ID: "llama-3.3-8b-instruct", + Name: "Llama-3.3-8B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "llama-4-maverick-17b-128e-instruct-fp8": { + ID: "llama-4-maverick-17b-128e-instruct-fp8", + Name: "Llama-4-Maverick-17B-128E-Instruct-FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "llama-4-scout-17b-16e-instruct-fp8": { + ID: "llama-4-scout-17b-16e-instruct-fp8", + Name: "Llama-4-Scout-17B-16E-Instruct-FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + }, + }, + "lmstudio": { + ID: "lmstudio", + Env: []string{"LMSTUDIO_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "LMStudio", + Models: map[string]ModelInfo{ + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen/qwen3-30b-a3b-2507": { + ID: "qwen/qwen3-30b-a3b-2507", + Name: "Qwen3 30B A3B 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "qwen/qwen3-coder-30b": { + ID: "qwen/qwen3-coder-30b", + Name: "Qwen3 Coder 30B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + }, + }, + "lucidquery": { + ID: "lucidquery", + Env: []string{"LUCIDQUERY_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "LucidQuery AI", + Models: map[string]ModelInfo{ + "lucidnova-rf1-100b": { + ID: "lucidnova-rf1-100b", + Name: "LucidNova RF1 100B", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 120000, + Output: 8000, + }, + }, + "lucidquery-nexus-coder": { + ID: "lucidquery-nexus-coder", + Name: "LucidQuery Nexus Coder", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 250000, + Output: 60000, + }, + }, + }, + }, + "minimax": { + ID: "minimax", + Env: []string{"MINIMAX_API_KEY" }, + NPM: "@ai-sdk/anthropic", + Name: "MiniMax", + Models: map[string]ModelInfo{ + "MiniMax-M2": { + ID: "MiniMax-M2", + Name: "MiniMax-M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 196608, + Output: 128000, + }, + }, + "MiniMax-M2.1": { + ID: "MiniMax-M2.1", + Name: "MiniMax-M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + }, + }, + "minimax-cn": { + ID: "minimax-cn", + Env: []string{"MINIMAX_API_KEY" }, + NPM: "@ai-sdk/anthropic", + Name: "MiniMax (China)", + Models: map[string]ModelInfo{ + "MiniMax-M2": { + ID: "MiniMax-M2", + Name: "MiniMax-M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 196608, + Output: 128000, + }, + }, + "MiniMax-M2.1": { + ID: "MiniMax-M2.1", + Name: "MiniMax-M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + }, + }, + "mistral": { + ID: "mistral", + Env: []string{"MISTRAL_API_KEY" }, + NPM: "@ai-sdk/mistral", + Name: "Mistral", + Models: map[string]ModelInfo{ + "codestral-latest": { + ID: "codestral-latest", + Name: "Codestral", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 4096, + }, + }, + "devstral-2512": { + ID: "devstral-2512", + Name: "Devstral 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "devstral-medium-2507": { + ID: "devstral-medium-2507", + Name: "Devstral Medium", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "devstral-medium-latest": { + ID: "devstral-medium-latest", + Name: "Devstral 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "devstral-small-2505": { + ID: "devstral-small-2505", + Name: "Devstral Small 2505", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "devstral-small-2507": { + ID: "devstral-small-2507", + Name: "Devstral Small", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "labs-devstral-small-2512": { + ID: "labs-devstral-small-2512", + Name: "Devstral Small 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + "magistral-medium-latest": { + ID: "magistral-medium-latest", + Name: "Magistral Medium", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "magistral-small": { + ID: "magistral-small", + Name: "Magistral Small", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "ministral-3b-latest": { + ID: "ministral-3b-latest", + Name: "Ministral 3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.04, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "ministral-8b-latest": { + ID: "ministral-8b-latest", + Name: "Ministral 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral-embed": { + ID: "mistral-embed", + Name: "Mistral Embed", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8000, + Output: 3072, + }, + }, + "mistral-large-2411": { + ID: "mistral-large-2411", + Name: "Mistral Large 2.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "mistral-large-2512": { + ID: "mistral-large-2512", + Name: "Mistral Large 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistral-large-latest": { + ID: "mistral-large-latest", + Name: "Mistral Large", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistral-medium-2505": { + ID: "mistral-medium-2505", + Name: "Mistral Medium 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "mistral-medium-2508": { + ID: "mistral-medium-2508", + Name: "Mistral Medium 3.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistral-medium-latest": { + ID: "mistral-medium-latest", + Name: "Mistral Medium", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "mistral-nemo": { + ID: "mistral-nemo", + Name: "Mistral Nemo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral-small-2506": { + ID: "mistral-small-2506", + Name: "Mistral Small 3.2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "mistral-small-latest": { + ID: "mistral-small-latest", + Name: "Mistral Small", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "open-mistral-7b": { + ID: "open-mistral-7b", + Name: "Mistral 7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8000, + Output: 8000, + }, + }, + "open-mixtral-8x22b": { + ID: "open-mixtral-8x22b", + Name: "Mixtral 8x22B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 64000, + }, + }, + "open-mixtral-8x7b": { + ID: "open-mixtral-8x7b", + Name: "Mixtral 8x7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 0.7, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "pixtral-12b": { + ID: "pixtral-12b", + Name: "Pixtral 12B", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "pixtral-large-latest": { + ID: "pixtral-large-latest", + Name: "Pixtral Large", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + }, + }, + "modelscope": { + ID: "modelscope", + Env: []string{"MODELSCOPE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "ModelScope", + Models: map[string]ModelInfo{ + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3-235B-A22B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + ID: "Qwen/Qwen3-30B-A3B-Instruct-2507", + Name: "Qwen3 30B A3B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "Qwen/Qwen3-30B-A3B-Thinking-2507": { + ID: "Qwen/Qwen3-30B-A3B-Thinking-2507", + Name: "Qwen3 30B A3B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "Qwen/Qwen3-Coder-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-Coder-30B-A3B-Instruct", + Name: "Qwen3 Coder 30B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "ZhipuAI/GLM-4.5": { + ID: "ZhipuAI/GLM-4.5", + Name: "GLM-4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 98304, + }, + }, + "ZhipuAI/GLM-4.6": { + ID: "ZhipuAI/GLM-4.6", + Name: "GLM-4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 98304, + }, + }, + }, + }, + "moonshotai": { + ID: "moonshotai", + Env: []string{"MOONSHOT_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Moonshot AI", + Models: map[string]ModelInfo{ + "kimi-k2-0711-preview": { + ID: "kimi-k2-0711-preview", + Name: "Kimi K2 0711", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "kimi-k2-0905-preview": { + ID: "kimi-k2-0905-preview", + Name: "Kimi K2 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-thinking-turbo": { + ID: "kimi-k2-thinking-turbo", + Name: "Kimi K2 Thinking Turbo", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.15, + Output: 8, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-turbo-preview": { + ID: "kimi-k2-turbo-preview", + Name: "Kimi K2 Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.4, + Output: 10, + CacheRead: &[]float64{0.6}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + }, + }, + "moonshotai-cn": { + ID: "moonshotai-cn", + Env: []string{"MOONSHOT_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Moonshot AI (China)", + Models: map[string]ModelInfo{ + "kimi-k2-0711-preview": { + ID: "kimi-k2-0711-preview", + Name: "Kimi K2 0711", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "kimi-k2-0905-preview": { + ID: "kimi-k2-0905-preview", + Name: "Kimi K2 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-thinking-turbo": { + ID: "kimi-k2-thinking-turbo", + Name: "Kimi K2 Thinking Turbo", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.15, + Output: 8, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-turbo-preview": { + ID: "kimi-k2-turbo-preview", + Name: "Kimi K2 Turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.4, + Output: 10, + CacheRead: &[]float64{0.6}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + }, + }, + "morph": { + ID: "morph", + Env: []string{"MORPH_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Morph", + Models: map[string]ModelInfo{ + "auto": { + ID: "auto", + Name: "Auto", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.85, + Output: 1.55, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "morph-v3-fast": { + ID: "morph-v3-fast", + Name: "Morph v3 Fast", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.8, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 16000, + }, + }, + "morph-v3-large": { + ID: "morph-v3-large", + Name: "Morph v3 Large", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.9, + Output: 1.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + }, + }, + "nano-gpt": { + ID: "nano-gpt", + Env: []string{"NANO_GPT_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "NanoGPT", + Models: map[string]ModelInfo{ + "deepseek/deepseek-r1": { + ID: "deepseek/deepseek-r1", + Name: "Deepseek R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "deepseek/deepseek-v3.2:thinking": { + ID: "deepseek/deepseek-v3.2:thinking", + Name: "Deepseek V3.2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta-llama/llama-3.3-70b-instruct": { + ID: "meta-llama/llama-3.3-70b-instruct", + Name: "Llama 3.3 70b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "meta-llama/llama-4-maverick": { + ID: "meta-llama/llama-4-maverick", + Name: "Llama 4 Maverick", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "minimax/minimax-m2.1": { + ID: "minimax/minimax-m2.1", + Name: "Minimax M2.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistralai/devstral-2-123b-instruct-2512": { + ID: "mistralai/devstral-2-123b-instruct-2512", + Name: "Devstral 2 123b Instruct 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "mistralai/ministral-14b-instruct-2512": { + ID: "mistralai/ministral-14b-instruct-2512", + Name: "Ministral 14b Instruct 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "mistralai/mistral-large-3-675b-instruct-2512": { + ID: "mistralai/mistral-large-3-675b-instruct-2512", + Name: "Mistral Large 3 675b Instruct 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "moonshotai/kimi-k2-instruct": { + ID: "moonshotai/kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "moonshotai/kimi-k2-thinking": { + ID: "moonshotai/kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "nousresearch/hermes-4-405b:thinking": { + ID: "nousresearch/hermes-4-405b:thinking", + Name: "Hermes 4 405b Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "nvidia/llama-3_3-nemotron-super-49b-v1_5": { + ID: "nvidia/llama-3_3-nemotron-super-49b-v1_5", + Name: "Llama 3 3 Nemotron Super 49B V1 5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT Oss 120b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "qwen/qwen3-235b-a22b-thinking-2507": { + ID: "qwen/qwen3-235b-a22b-thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 8192, + }, + }, + "qwen/qwen3-coder": { + ID: "qwen/qwen3-coder", + Name: "Qwen3 Coder", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 106000, + Output: 8192, + }, + }, + "z-ai/glm-4.6": { + ID: "z-ai/glm-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "z-ai/glm-4.6:thinking": { + ID: "z-ai/glm-4.6:thinking", + Name: "GLM 4.6 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "zai-org/glm-4.5-air": { + ID: "zai-org/glm-4.5-air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "zai-org/glm-4.5-air:thinking": { + ID: "zai-org/glm-4.5-air:thinking", + Name: "GLM 4.5 Air Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "zai-org/glm-4.7": { + ID: "zai-org/glm-4.7", + Name: "GLM 4.7", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 8192, + }, + }, + "zai-org/glm-4.7:thinking": { + ID: "zai-org/glm-4.7:thinking", + Name: "GLM 4.7 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + }, + }, + "nebius": { + ID: "nebius", + Env: []string{"NEBIUS_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Nebius Token Factory", + Models: map[string]ModelInfo{ + "NousResearch/hermes-4-405b": { + ID: "NousResearch/hermes-4-405b", + Name: "Hermes-4 405B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "NousResearch/hermes-4-70b": { + ID: "NousResearch/hermes-4-70b", + Name: "Hermes 4 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "deepseek-ai/deepseek-v3": { + ID: "deepseek-ai/deepseek-v3", + Name: "DeepSeek V3", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "meta-llama/llama-3.3-70b-instruct-base": { + ID: "meta-llama/llama-3.3-70b-instruct-base", + Name: "Llama-3.3-70B-Instruct (Base)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "meta-llama/llama-3.3-70b-instruct-fast": { + ID: "meta-llama/llama-3.3-70b-instruct-fast", + Name: "Llama-3.3-70B-Instruct (Fast)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "meta-llama/llama-3_1-405b-instruct": { + ID: "meta-llama/llama-3_1-405b-instruct", + Name: "Llama 3.1 405B Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "moonshotai/kimi-k2-instruct": { + ID: "moonshotai/kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "nvidia/llama-3_1-nemotron-ultra-253b-v1": { + ID: "nvidia/llama-3_1-nemotron-ultra-253b-v1", + Name: "Llama 3.1 Nemotron Ultra 253B v1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen/qwen3-235b-a22b-instruct-2507": { + ID: "qwen/qwen3-235b-a22b-instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 8192, + }, + }, + "qwen/qwen3-235b-a22b-thinking-2507": { + ID: "qwen/qwen3-235b-a22b-thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 8192, + }, + }, + "qwen/qwen3-coder-480b-a35b-instruct": { + ID: "qwen/qwen3-coder-480b-a35b-instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "zai-org/glm-4.5": { + ID: "zai-org/glm-4.5", + Name: "GLM 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "zai-org/glm-4.5-air": { + ID: "zai-org/glm-4.5-air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + }, + }, + "nvidia": { + ID: "nvidia", + Env: []string{"NVIDIA_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Nvidia", + Models: map[string]ModelInfo{ + "black-forest-labs/flux.1-dev": { + ID: "black-forest-labs/flux.1-dev", + Name: "FLUX.1-dev", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4096, + Output: 0, + }, + }, + "deepseek-ai/deepseek-coder-6.7b-instruct": { + ID: "deepseek-ai/deepseek-coder-6.7b-instruct", + Name: "Deepseek Coder 6.7b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "deepseek-ai/deepseek-r1": { + ID: "deepseek-ai/deepseek-r1", + Name: "Deepseek R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "deepseek-ai/deepseek-r1-0528": { + ID: "deepseek-ai/deepseek-r1-0528", + Name: "Deepseek R1 0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "deepseek-ai/deepseek-v3.1": { + ID: "deepseek-ai/deepseek-v3.1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "deepseek-ai/deepseek-v3.1-terminus": { + ID: "deepseek-ai/deepseek-v3.1-terminus", + Name: "DeepSeek V3.1 Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "google/codegemma-1.1-7b": { + ID: "google/codegemma-1.1-7b", + Name: "Codegemma 1.1 7b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/codegemma-7b": { + ID: "google/codegemma-7b", + Name: "Codegemma 7b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/gemma-2-27b-it": { + ID: "google/gemma-2-27b-it", + Name: "Gemma 2 27b It", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/gemma-2-2b-it": { + ID: "google/gemma-2-2b-it", + Name: "Gemma 2 2b It", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/gemma-3-12b-it": { + ID: "google/gemma-3-12b-it", + Name: "Gemma 3 12b It", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/gemma-3-1b-it": { + ID: "google/gemma-3-1b-it", + Name: "Gemma 3 1b It", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/gemma-3-27b-it": { + ID: "google/gemma-3-27b-it", + Name: "Gemma-3-27B-IT", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "google/gemma-3n-e2b-it": { + ID: "google/gemma-3n-e2b-it", + Name: "Gemma 3n E2b It", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "google/gemma-3n-e4b-it": { + ID: "google/gemma-3n-e4b-it", + Name: "Gemma 3n E4b It", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/codellama-70b": { + ID: "meta/codellama-70b", + Name: "Codellama 70b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-3.1-405b-instruct": { + ID: "meta/llama-3.1-405b-instruct", + Name: "Llama 3.1 405b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-3.1-70b-instruct": { + ID: "meta/llama-3.1-70b-instruct", + Name: "Llama 3.1 70b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-3.2-11b-vision-instruct": { + ID: "meta/llama-3.2-11b-vision-instruct", + Name: "Llama 3.2 11b Vision Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-3.2-1b-instruct": { + ID: "meta/llama-3.2-1b-instruct", + Name: "Llama 3.2 1b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-3.3-70b-instruct": { + ID: "meta/llama-3.3-70b-instruct", + Name: "Llama 3.3 70b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-4-maverick-17b-128e-instruct": { + ID: "meta/llama-4-maverick-17b-128e-instruct", + Name: "Llama 4 Maverick 17b 128e Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-4-scout-17b-16e-instruct": { + ID: "meta/llama-4-scout-17b-16e-instruct", + Name: "Llama 4 Scout 17b 16e Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama3-70b-instruct": { + ID: "meta/llama3-70b-instruct", + Name: "Llama3 70b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama3-8b-instruct": { + ID: "meta/llama3-8b-instruct", + Name: "Llama3 8b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3-medium-128k-instruct": { + ID: "microsoft/phi-3-medium-128k-instruct", + Name: "Phi 3 Medium 128k Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3-medium-4k-instruct": { + ID: "microsoft/phi-3-medium-4k-instruct", + Name: "Phi 3 Medium 4k Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4000, + Output: 4096, + }, + }, + "microsoft/phi-3-small-128k-instruct": { + ID: "microsoft/phi-3-small-128k-instruct", + Name: "Phi 3 Small 128k Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3-small-8k-instruct": { + ID: "microsoft/phi-3-small-8k-instruct", + Name: "Phi 3 Small 8k Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8000, + Output: 4096, + }, + }, + "microsoft/phi-3-vision-128k-instruct": { + ID: "microsoft/phi-3-vision-128k-instruct", + Name: "Phi 3 Vision 128k Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3.5-moe-instruct": { + ID: "microsoft/phi-3.5-moe-instruct", + Name: "Phi 3.5 Moe Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-3.5-vision-instruct": { + ID: "microsoft/phi-3.5-vision-instruct", + Name: "Phi 3.5 Vision Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "microsoft/phi-4-mini-instruct": { + ID: "microsoft/phi-4-mini-instruct", + Name: "Phi-4-Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "minimaxai/minimax-m2": { + ID: "minimaxai/minimax-m2", + Name: "MiniMax-M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "mistralai/codestral-22b-instruct-v0.1": { + ID: "mistralai/codestral-22b-instruct-v0.1", + Name: "Codestral 22b Instruct V0.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistralai/devstral-2-123b-instruct-2512": { + ID: "mistralai/devstral-2-123b-instruct-2512", + Name: "Devstral-2-123B-Instruct-2512", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistralai/mamba-codestral-7b-v0.1": { + ID: "mistralai/mamba-codestral-7b-v0.1", + Name: "Mamba Codestral 7b V0.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistralai/ministral-14b-instruct-2512": { + ID: "mistralai/ministral-14b-instruct-2512", + Name: "Ministral 3 14B Instruct 2512", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistralai/mistral-large-2-instruct": { + ID: "mistralai/mistral-large-2-instruct", + Name: "Mistral Large 2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "mistralai/mistral-large-3-675b-instruct-2512": { + ID: "mistralai/mistral-large-3-675b-instruct-2512", + Name: "Mistral Large 3 675B Instruct 2512", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistralai/mistral-small-3.1-24b-instruct-2503": { + ID: "mistralai/mistral-small-3.1-24b-instruct-2503", + Name: "Mistral Small 3.1 24b Instruct 2503", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "moonshotai/kimi-k2-instruct": { + ID: "moonshotai/kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "moonshotai/kimi-k2-instruct-0905": { + ID: "moonshotai/kimi-k2-instruct-0905", + Name: "Kimi K2 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "moonshotai/kimi-k2-thinking": { + ID: "moonshotai/kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "nvidia/cosmos-nemotron-34b": { + ID: "nvidia/cosmos-nemotron-34b", + Name: "Cosmos Nemotron 34B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "nvidia/llama-3.1-nemotron-51b-instruct": { + ID: "nvidia/llama-3.1-nemotron-51b-instruct", + Name: "Llama 3.1 Nemotron 51b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "nvidia/llama-3.1-nemotron-70b-instruct": { + ID: "nvidia/llama-3.1-nemotron-70b-instruct", + Name: "Llama 3.1 Nemotron 70b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "nvidia/llama-3.1-nemotron-ultra-253b-v1": { + ID: "nvidia/llama-3.1-nemotron-ultra-253b-v1", + Name: "Llama-3.1-Nemotron-Ultra-253B-v1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "nvidia/llama-3.3-nemotron-super-49b-v1": { + ID: "nvidia/llama-3.3-nemotron-super-49b-v1", + Name: "Llama 3.3 Nemotron Super 49b V1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "nvidia/llama-3.3-nemotron-super-49b-v1.5": { + ID: "nvidia/llama-3.3-nemotron-super-49b-v1.5", + Name: "Llama 3.3 Nemotron Super 49b V1.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "nvidia/llama-embed-nemotron-8b": { + ID: "nvidia/llama-embed-nemotron-8b", + Name: "Llama Embed Nemotron 8B", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 2048, + }, + }, + "nvidia/llama3-chatqa-1.5-70b": { + ID: "nvidia/llama3-chatqa-1.5-70b", + Name: "Llama3 Chatqa 1.5 70b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "nvidia/nemoretriever-ocr-v1": { + ID: "nvidia/nemoretriever-ocr-v1", + Name: "NeMo Retriever OCR v1", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 4096, + }, + }, + "nvidia/nemotron-3-nano-30b-a3b": { + ID: "nvidia/nemotron-3-nano-30b-a3b", + Name: "nemotron-3-nano-30b-a3b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "nvidia/nemotron-4-340b-instruct": { + ID: "nvidia/nemotron-4-340b-instruct", + Name: "Nemotron 4 340b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "nvidia/nvidia-nemotron-nano-9b-v2": { + ID: "nvidia/nvidia-nemotron-nano-9b-v2", + Name: "nvidia-nemotron-nano-9b-v2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "nvidia/parakeet-tdt-0.6b-v2": { + ID: "nvidia/parakeet-tdt-0.6b-v2", + Name: "Parakeet TDT 0.6B v2", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 4096, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT-OSS-120B", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/whisper-large-v3": { + ID: "openai/whisper-large-v3", + Name: "Whisper Large v3", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 4096, + }, + }, + "qwen/qwen2.5-coder-32b-instruct": { + ID: "qwen/qwen2.5-coder-32b-instruct", + Name: "Qwen2.5 Coder 32b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "qwen/qwen2.5-coder-7b-instruct": { + ID: "qwen/qwen2.5-coder-7b-instruct", + Name: "Qwen2.5 Coder 7b Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "qwen/qwen3-235b-a22b": { + ID: "qwen/qwen3-235b-a22b", + Name: "Qwen3-235B-A22B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "qwen/qwen3-coder-480b-a35b-instruct": { + ID: "qwen/qwen3-coder-480b-a35b-instruct", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "qwen/qwen3-next-80b-a3b-instruct": { + ID: "qwen/qwen3-next-80b-a3b-instruct", + Name: "Qwen3-Next-80B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "qwen/qwen3-next-80b-a3b-thinking": { + ID: "qwen/qwen3-next-80b-a3b-thinking", + Name: "Qwen3-Next-80B-A3B-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "qwen/qwq-32b": { + ID: "qwen/qwq-32b", + Name: "Qwq 32b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + }, + }, + "ollama-cloud": { + ID: "ollama-cloud", + Env: []string{"OLLAMA_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Ollama Cloud", + Models: map[string]ModelInfo{ + "cogito-2.1:671b-cloud": { + ID: "cogito-2.1:671b-cloud", + Name: "Cogito 2.1 671B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 160000, + Output: 8192, + }, + }, + "deepseek-v3.1:671b-cloud": { + ID: "deepseek-v3.1:671b-cloud", + Name: "DeepSeek-V3.1 671B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 160000, + Output: 8192, + }, + }, + "gemini-3-pro-preview:latest": { + ID: "gemini-3-pro-preview:latest", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "glm-4.6:cloud": { + ID: "glm-4.6:cloud", + Name: "GLM-4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "gpt-oss:120b-cloud": { + ID: "gpt-oss:120b-cloud", + Name: "GPT-OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "gpt-oss:20b-cloud": { + ID: "gpt-oss:20b-cloud", + Name: "GPT-OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "kimi-k2-thinking:cloud": { + ID: "kimi-k2-thinking:cloud", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 8192, + }, + }, + "kimi-k2:1t-cloud": { + ID: "kimi-k2:1t-cloud", + Name: "Kimi K2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 8192, + }, + }, + "minimax-m2:cloud": { + ID: "minimax-m2:cloud", + Name: "MiniMax M2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "qwen3-coder:480b-cloud": { + ID: "qwen3-coder:480b-cloud", + Name: "Qwen3 Coder 480B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "qwen3-vl-235b-cloud": { + ID: "qwen3-vl-235b-cloud", + Name: "Qwen3-VL 235B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "qwen3-vl-235b-instruct-cloud": { + ID: "qwen3-vl-235b-instruct-cloud", + Name: "Qwen3-VL 235B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + }, + }, + "openai": { + ID: "openai", + Env: []string{"OPENAI_API_KEY" }, + NPM: "@ai-sdk/openai", + Name: "OpenAI", + Models: map[string]ModelInfo{ + "codex-mini-latest": { + ID: "codex-mini-latest", + Name: "Codex Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.5, + Output: 6, + CacheRead: &[]float64{0.375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "gpt-3.5-turbo": { + ID: "gpt-3.5-turbo", + Name: "GPT-3.5-turbo", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16385, + Output: 4096, + }, + }, + "gpt-4": { + ID: "gpt-4", + Name: "GPT-4", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 30, + Output: 60, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "gpt-4-turbo": { + ID: "gpt-4-turbo", + Name: "GPT-4 Turbo", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 30, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "gpt-4.1": { + ID: "gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-mini": { + ID: "gpt-4.1-mini", + Name: "GPT-4.1 mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4.1-nano": { + ID: "gpt-4.1-nano", + Name: "GPT-4.1 nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "gpt-4o": { + ID: "gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o-2024-05-13": { + ID: "gpt-4o-2024-05-13", + Name: "GPT-4o (2024-05-13)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "gpt-4o-2024-08-06": { + ID: "gpt-4o-2024-08-06", + Name: "GPT-4o (2024-08-06)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o-2024-11-20": { + ID: "gpt-4o-2024-11-20", + Name: "GPT-4o (2024-11-20)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-4o-mini": { + ID: "gpt-4o-mini", + Name: "GPT-4o mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5": { + ID: "gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-chat-latest": { + ID: "gpt-5-chat-latest", + Name: "GPT-5 Chat (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-codex": { + ID: "gpt-5-codex", + Name: "GPT-5-Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-pro": { + ID: "gpt-5-pro", + Name: "GPT-5 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 272000, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-chat-latest": { + ID: "gpt-5.1-chat-latest", + Name: "GPT-5.1 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "GPT-5.1 Codex", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-max": { + ID: "gpt-5.1-codex-max", + Name: "GPT-5.1 Codex Max", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "GPT-5.1 Codex mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2": { + ID: "gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2-chat-latest": { + ID: "gpt-5.2-chat-latest", + Name: "GPT-5.2 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "gpt-5.2-pro": { + ID: "gpt-5.2-pro", + Name: "GPT-5.2 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 21, + Output: 168, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "o1": { + ID: "o1", + Name: "o1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o1-mini": { + ID: "o1-mini", + Name: "o1-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 65536, + }, + }, + "o1-preview": { + ID: "o1-preview", + Name: "o1-preview", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "o1-pro": { + ID: "o1-pro", + Name: "o1-pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 150, + Output: 600, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3": { + ID: "o3", + Name: "o3", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-deep-research": { + ID: "o3-deep-research", + Name: "o3-deep-research", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 10, + Output: 40, + CacheRead: &[]float64{2.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-mini": { + ID: "o3-mini", + Name: "o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o3-pro": { + ID: "o3-pro", + Name: "o3-pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 20, + Output: 80, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o4-mini": { + ID: "o4-mini", + Name: "o4-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "o4-mini-deep-research": { + ID: "o4-mini-deep-research", + Name: "o4-mini-deep-research", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "text-embedding-3-large": { + ID: "text-embedding-3-large", + Name: "text-embedding-3-large", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.13, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 3072, + }, + }, + "text-embedding-3-small": { + ID: "text-embedding-3-small", + Name: "text-embedding-3-small", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.02, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 1536, + }, + }, + "text-embedding-ada-002": { + ID: "text-embedding-ada-002", + Name: "text-embedding-ada-002", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 1536, + }, + }, + }, + }, + "opencode": { + ID: "opencode", + Env: []string{"OPENCODE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "OpenCode Zen", + Models: map[string]ModelInfo{ + "alpha-gd4": { + ID: "alpha-gd4", + Name: "Alpha GD4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "alpha-glm-4.7": { + ID: "alpha-glm-4.7", + Name: "Alpha GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.6}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "big-pickle": { + ID: "big-pickle", + Name: "Big Pickle", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 128000, + }, + }, + "claude-3-5-haiku": { + ID: "claude-3-5-haiku", + Name: "Claude Haiku 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "claude-haiku-4-5": { + ID: "claude-haiku-4-5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-opus-4-1": { + ID: "claude-opus-4-1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "claude-opus-4-5": { + ID: "claude-opus-4-5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "claude-sonnet-4": { + ID: "claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "claude-sonnet-4-5": { + ID: "claude-sonnet-4-5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "gemini-3-flash": { + ID: "gemini-3-flash", + Name: "Gemini 3 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-3-pro": { + ID: "gemini-3-pro", + Name: "Gemini 3 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "glm-4.6": { + ID: "glm-4.6", + Name: "GLM-4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "glm-4.7-free": { + ID: "glm-4.7-free", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "gpt-5": { + ID: "gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.07, + Output: 8.5, + CacheRead: &[]float64{0.107}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-codex": { + ID: "gpt-5-codex", + Name: "GPT-5 Codex", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.07, + Output: 8.5, + CacheRead: &[]float64{0.107}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1": { + ID: "gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.07, + Output: 8.5, + CacheRead: &[]float64{0.107}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex": { + ID: "gpt-5.1-codex", + Name: "GPT-5.1 Codex", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.07, + Output: 8.5, + CacheRead: &[]float64{0.107}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-max": { + ID: "gpt-5.1-codex-max", + Name: "GPT-5.1 Codex Max", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.1-codex-mini": { + ID: "gpt-5.1-codex-mini", + Name: "GPT-5.1 Codex Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5.2": { + ID: "gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "grok-code": { + ID: "grok-code", + Name: "Grok Code Fast 1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + "kimi-k2": { + ID: "kimi-k2", + Name: "Kimi K2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2.5, + CacheRead: &[]float64{0.4}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2.5, + CacheRead: &[]float64{0.4}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "minimax-m2.1-free": { + ID: "minimax-m2.1-free", + Name: "MiniMax M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "qwen3-coder": { + ID: "qwen3-coder", + Name: "Qwen3 Coder", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.45, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + }, + }, + "openrouter": { + ID: "openrouter", + Env: []string{"OPENROUTER_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "OpenRouter", + Models: map[string]ModelInfo{ + "anthropic/claude-3.5-haiku": { + ID: "anthropic/claude-3.5-haiku", + Name: "Claude Haiku 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic/claude-3.7-sonnet": { + ID: "anthropic/claude-3.7-sonnet", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 128000, + }, + }, + "anthropic/claude-haiku-4.5": { + ID: "anthropic/claude-haiku-4.5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-opus-4": { + ID: "anthropic/claude-opus-4", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4.1": { + ID: "anthropic/claude-opus-4.1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4.5": { + ID: "anthropic/claude-opus-4.5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-sonnet-4": { + ID: "anthropic/claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4.5": { + ID: "anthropic/claude-sonnet-4.5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "cognitivecomputations/dolphin3.0-mistral-24b": { + ID: "cognitivecomputations/dolphin3.0-mistral-24b", + Name: "Dolphin3.0 Mistral 24B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "cognitivecomputations/dolphin3.0-r1-mistral-24b": { + ID: "cognitivecomputations/dolphin3.0-r1-mistral-24b", + Name: "Dolphin3.0 R1 Mistral 24B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "deepseek/deepseek-chat-v3-0324": { + ID: "deepseek/deepseek-chat-v3-0324", + Name: "DeepSeek V3 0324", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 8192, + }, + }, + "deepseek/deepseek-chat-v3.1": { + ID: "deepseek/deepseek-chat-v3.1", + Name: "DeepSeek-V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek/deepseek-r1-0528-qwen3-8b:free": { + ID: "deepseek/deepseek-r1-0528-qwen3-8b:free", + Name: "Deepseek R1 0528 Qwen3 8B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "deepseek/deepseek-r1-0528:free": { + ID: "deepseek/deepseek-r1-0528:free", + Name: "R1 0528 (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek/deepseek-r1-distill-llama-70b": { + ID: "deepseek/deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "deepseek/deepseek-r1-distill-qwen-14b": { + ID: "deepseek/deepseek-r1-distill-qwen-14b", + Name: "DeepSeek R1 Distill Qwen 14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 8192, + }, + }, + "deepseek/deepseek-r1:free": { + ID: "deepseek/deepseek-r1:free", + Name: "R1 (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek/deepseek-v3-base:free": { + ID: "deepseek/deepseek-v3-base:free", + Name: "DeepSeek V3 Base (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "deepseek/deepseek-v3.1-terminus": { + ID: "deepseek/deepseek-v3.1-terminus", + Name: "DeepSeek V3.1 Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "deepseek/deepseek-v3.1-terminus:exacto": { + ID: "deepseek/deepseek-v3.1-terminus:exacto", + Name: "DeepSeek V3.1 Terminus (exacto)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "deepseek/deepseek-v3.2": { + ID: "deepseek/deepseek-v3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "deepseek/deepseek-v3.2-speciale": { + ID: "deepseek/deepseek-v3.2-speciale", + Name: "DeepSeek V3.2 Speciale", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.41, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 65536, + }, + }, + "featherless/qwerky-72b": { + ID: "featherless/qwerky-72b", + Name: "Qwerky 72B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "google/gemini-2.0-flash-001": { + ID: "google/gemini-2.0-flash-001", + Name: "Gemini 2.0 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "google/gemini-2.0-flash-exp:free": { + ID: "google/gemini-2.0-flash-exp:free", + Name: "Gemini 2.0 Flash Experimental (free)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 1048576, + }, + }, + "google/gemini-2.5-flash": { + ID: "google/gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.0375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-flash-lite": { + ID: "google/gemini-2.5-flash-lite", + Name: "Gemini 2.5 Flash Lite", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-flash-lite-preview-09-2025": { + ID: "google/gemini-2.5-flash-lite-preview-09-2025", + Name: "Gemini 2.5 Flash Lite Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-flash-preview-09-2025": { + ID: "google/gemini-2.5-flash-preview-09-2025", + Name: "Gemini 2.5 Flash Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.031}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-pro": { + ID: "google/gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-pro-preview-05-06": { + ID: "google/gemini-2.5-pro-preview-05-06", + Name: "Gemini 2.5 Pro Preview 05-06", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-pro-preview-06-05": { + ID: "google/gemini-2.5-pro-preview-06-05", + Name: "Gemini 2.5 Pro Preview 06-05", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-flash-preview": { + ID: "google/gemini-3-flash-preview", + Name: "Gemini 3 Flash Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-pro-preview": { + ID: "google/gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1050000, + Output: 66000, + }, + }, + "google/gemma-2-9b-it:free": { + ID: "google/gemma-2-9b-it:free", + Name: "Gemma 2 9B (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "google/gemma-3-12b-it": { + ID: "google/gemma-3-12b-it", + Name: "Gemma 3 12B IT", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 96000, + Output: 8192, + }, + }, + "google/gemma-3-27b-it": { + ID: "google/gemma-3-27b-it", + Name: "Gemma 3 27B IT", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 96000, + Output: 8192, + }, + }, + "google/gemma-3n-e4b-it": { + ID: "google/gemma-3n-e4b-it", + Name: "Gemma 3n E4B IT", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "google/gemma-3n-e4b-it:free": { + ID: "google/gemma-3n-e4b-it:free", + Name: "Gemma 3n 4B (free)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "kwaipilot/kat-coder-pro:free": { + ID: "kwaipilot/kat-coder-pro:free", + Name: "Kat Coder Pro (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 65536, + }, + }, + "meta-llama/llama-3.2-11b-vision-instruct": { + ID: "meta-llama/llama-3.2-11b-vision-instruct", + Name: "Llama 3.2 11B Vision Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "meta-llama/llama-3.3-70b-instruct:free": { + ID: "meta-llama/llama-3.3-70b-instruct:free", + Name: "Llama 3.3 70B Instruct (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 65536, + }, + }, + "meta-llama/llama-4-scout:free": { + ID: "meta-llama/llama-4-scout:free", + Name: "Llama 4 Scout (free)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 64000, + }, + }, + "microsoft/mai-ds-r1:free": { + ID: "microsoft/mai-ds-r1:free", + Name: "MAI DS R1 (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "minimax/minimax-01": { + ID: "minimax/minimax-01", + Name: "MiniMax-01", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 1000000, + }, + }, + "minimax/minimax-m1": { + ID: "minimax/minimax-m1", + Name: "MiniMax M1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 40000, + }, + }, + "minimax/minimax-m2": { + ID: "minimax/minimax-m2", + Name: "MiniMax M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 1.15, + CacheRead: &[]float64{0.28}[0], + CacheWrite: &[]float64{1.15}[0], + }, + Limit: Limit{ + Context: 196600, + Output: 118000, + }, + }, + "minimax/minimax-m2.1": { + ID: "minimax/minimax-m2.1", + Name: "MiniMax M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "mistralai/codestral-2508": { + ID: "mistralai/codestral-2508", + Name: "Codestral 2508", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + "mistralai/devstral-2512": { + ID: "mistralai/devstral-2512", + Name: "Devstral 2 2512", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistralai/devstral-2512:free": { + ID: "mistralai/devstral-2512:free", + Name: "Devstral 2 2512 (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistralai/devstral-medium-2507": { + ID: "mistralai/devstral-medium-2507", + Name: "Devstral Medium", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "mistralai/devstral-small-2505": { + ID: "mistralai/devstral-small-2505", + Name: "Devstral Small", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.12, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistralai/devstral-small-2505:free": { + ID: "mistralai/devstral-small-2505:free", + Name: "Devstral Small 2505 (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "mistralai/devstral-small-2507": { + ID: "mistralai/devstral-small-2507", + Name: "Devstral Small 1.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "mistralai/mistral-7b-instruct:free": { + ID: "mistralai/mistral-7b-instruct:free", + Name: "Mistral 7B Instruct (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "mistralai/mistral-medium-3": { + ID: "mistralai/mistral-medium-3", + Name: "Mistral Medium 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "mistralai/mistral-medium-3.1": { + ID: "mistralai/mistral-medium-3.1", + Name: "Mistral Medium 3.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistralai/mistral-nemo:free": { + ID: "mistralai/mistral-nemo:free", + Name: "Mistral Nemo (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "mistralai/mistral-small-3.1-24b-instruct": { + ID: "mistralai/mistral-small-3.1-24b-instruct", + Name: "Mistral Small 3.1 24B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistralai/mistral-small-3.2-24b-instruct": { + ID: "mistralai/mistral-small-3.2-24b-instruct", + Name: "Mistral Small 3.2 24B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 96000, + Output: 8192, + }, + }, + "mistralai/mistral-small-3.2-24b-instruct:free": { + ID: "mistralai/mistral-small-3.2-24b-instruct:free", + Name: "Mistral Small 3.2 24B (free)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 96000, + Output: 96000, + }, + }, + "moonshotai/kimi-dev-72b:free": { + ID: "moonshotai/kimi-dev-72b:free", + Name: "Kimi Dev 72b (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "moonshotai/kimi-k2": { + ID: "moonshotai/kimi-k2", + Name: "Kimi K2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "moonshotai/kimi-k2-0905": { + ID: "moonshotai/kimi-k2-0905", + Name: "Kimi K2 Instruct 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "moonshotai/kimi-k2-0905:exacto": { + ID: "moonshotai/kimi-k2-0905:exacto", + Name: "Kimi K2 Instruct 0905 (exacto)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 16384, + }, + }, + "moonshotai/kimi-k2-thinking": { + ID: "moonshotai/kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "moonshotai/kimi-k2:free": { + ID: "moonshotai/kimi-k2:free", + Name: "Kimi K2 (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32800, + Output: 32800, + }, + }, + "nousresearch/deephermes-3-llama-3-8b-preview": { + ID: "nousresearch/deephermes-3-llama-3-8b-preview", + Name: "DeepHermes 3 Llama 3 8B Preview", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "nousresearch/hermes-4-405b": { + ID: "nousresearch/hermes-4-405b", + Name: "Hermes 4 405B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "nousresearch/hermes-4-70b": { + ID: "nousresearch/hermes-4-70b", + Name: "Hermes 4 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "nvidia/nemotron-nano-9b-v2": { + ID: "nvidia/nemotron-nano-9b-v2", + Name: "nvidia-nemotron-nano-9b-v2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.16, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "openai/gpt-4.1": { + ID: "openai/gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4.1-mini": { + ID: "openai/gpt-4.1-mini", + Name: "GPT-4.1 Mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4o-mini": { + ID: "openai/gpt-4o-mini", + Name: "GPT-4o-mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5": { + ID: "openai/gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-chat": { + ID: "openai/gpt-5-chat", + Name: "GPT-5 Chat (latest)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-codex": { + ID: "openai/gpt-5-codex", + Name: "GPT-5 Codex", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-image": { + ID: "openai/gpt-5-image", + Name: "GPT-5 Image", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-mini": { + ID: "openai/gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-nano": { + ID: "openai/gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-pro": { + ID: "openai/gpt-5-pro", + Name: "GPT-5 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 120, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 272000, + }, + }, + "openai/gpt-5.1": { + ID: "openai/gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-chat": { + ID: "openai/gpt-5.1-chat", + Name: "GPT-5.1 Chat", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5.1-codex": { + ID: "openai/gpt-5.1-codex", + Name: "GPT-5.1-Codex", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-codex-mini": { + ID: "openai/gpt-5.1-codex-mini", + Name: "GPT-5.1-Codex-Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 100000, + }, + }, + "openai/gpt-5.2": { + ID: "openai/gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.2-chat-latest": { + ID: "openai/gpt-5.2-chat-latest", + Name: "GPT-5.2 Chat", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.175}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5.2-pro": { + ID: "openai/gpt-5.2-pro", + Name: "GPT-5.2 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 21, + Output: 168, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.072, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-120b:exacto": { + ID: "openai/gpt-oss-120b:exacto", + Name: "GPT OSS 120B (exacto)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.24, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-safeguard-20b": { + ID: "openai/gpt-oss-safeguard-20b", + Name: "GPT OSS Safeguard 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 65536, + }, + }, + "openai/o4-mini": { + ID: "openai/o4-mini", + Name: "o4 Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openrouter/sherlock-dash-alpha": { + ID: "openrouter/sherlock-dash-alpha", + Name: "Sherlock Dash Alpha", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1840000, + Output: 0, + }, + }, + "openrouter/sherlock-think-alpha": { + ID: "openrouter/sherlock-think-alpha", + Name: "Sherlock Think Alpha", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1840000, + Output: 0, + }, + }, + "qwen/qwen-2.5-coder-32b-instruct": { + ID: "qwen/qwen-2.5-coder-32b-instruct", + Name: "Qwen2.5 Coder 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "qwen/qwen2.5-vl-32b-instruct:free": { + ID: "qwen/qwen2.5-vl-32b-instruct:free", + Name: "Qwen2.5 VL 32B Instruct (free)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 8192, + }, + }, + "qwen/qwen2.5-vl-72b-instruct": { + ID: "qwen/qwen2.5-vl-72b-instruct", + Name: "Qwen2.5 VL 72B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "qwen/qwen2.5-vl-72b-instruct:free": { + ID: "qwen/qwen2.5-vl-72b-instruct:free", + Name: "Qwen2.5 VL 72B Instruct (free)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "qwen/qwen3-14b:free": { + ID: "qwen/qwen3-14b:free", + Name: "Qwen3 14B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "qwen/qwen3-235b-a22b-07-25": { + ID: "qwen/qwen3-235b-a22b-07-25", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.85, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "qwen/qwen3-235b-a22b-07-25:free": { + ID: "qwen/qwen3-235b-a22b-07-25:free", + Name: "Qwen3 235B A22B Instruct 2507 (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "qwen/qwen3-235b-a22b-thinking-2507": { + ID: "qwen/qwen3-235b-a22b-thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.078, + Output: 0.312, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 81920, + }, + }, + "qwen/qwen3-235b-a22b:free": { + ID: "qwen/qwen3-235b-a22b:free", + Name: "Qwen3 235B A22B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "qwen/qwen3-30b-a3b-instruct-2507": { + ID: "qwen/qwen3-30b-a3b-instruct-2507", + Name: "Qwen3 30B A3B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "qwen/qwen3-30b-a3b-thinking-2507": { + ID: "qwen/qwen3-30b-a3b-thinking-2507", + Name: "Qwen3 30B A3B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "qwen/qwen3-30b-a3b:free": { + ID: "qwen/qwen3-30b-a3b:free", + Name: "Qwen3 30B A3B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "qwen/qwen3-32b:free": { + ID: "qwen/qwen3-32b:free", + Name: "Qwen3 32B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "qwen/qwen3-8b:free": { + ID: "qwen/qwen3-8b:free", + Name: "Qwen3 8B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 40960, + Output: 40960, + }, + }, + "qwen/qwen3-coder": { + ID: "qwen/qwen3-coder", + Name: "Qwen3 Coder", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "qwen/qwen3-coder-flash": { + ID: "qwen/qwen3-coder-flash", + Name: "Qwen3 Coder Flash", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 66536, + }, + }, + "qwen/qwen3-coder:exacto": { + ID: "qwen/qwen3-coder:exacto", + Name: "Qwen3 Coder (exacto)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.38, + Output: 1.53, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen/qwen3-coder:free": { + ID: "qwen/qwen3-coder:free", + Name: "Qwen3 Coder 480B A35B Instruct (free)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "qwen/qwen3-max": { + ID: "qwen/qwen3-max", + Name: "Qwen3 Max", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "qwen/qwen3-next-80b-a3b-instruct": { + ID: "qwen/qwen3-next-80b-a3b-instruct", + Name: "Qwen3 Next 80B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "qwen/qwen3-next-80b-a3b-thinking": { + ID: "qwen/qwen3-next-80b-a3b-thinking", + Name: "Qwen3 Next 80B A3B Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "qwen/qwq-32b:free": { + ID: "qwen/qwq-32b:free", + Name: "QwQ 32B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "rekaai/reka-flash-3": { + ID: "rekaai/reka-flash-3", + Name: "Reka Flash 3", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "sarvamai/sarvam-m:free": { + ID: "sarvamai/sarvam-m:free", + Name: "Sarvam-M (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "thudm/glm-z1-32b:free": { + ID: "thudm/glm-z1-32b:free", + Name: "GLM Z1 32B (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "tngtech/deepseek-r1t2-chimera:free": { + ID: "tngtech/deepseek-r1t2-chimera:free", + Name: "DeepSeek R1T2 Chimera (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 163840, + }, + }, + "x-ai/grok-3": { + ID: "x-ai/grok-3", + Name: "Grok 3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: &[]float64{15}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "x-ai/grok-3-beta": { + ID: "x-ai/grok-3-beta", + Name: "Grok 3 Beta", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: &[]float64{15}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "x-ai/grok-3-mini": { + ID: "x-ai/grok-3-mini", + Name: "Grok 3 Mini", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.5}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "x-ai/grok-3-mini-beta": { + ID: "x-ai/grok-3-mini-beta", + Name: "Grok 3 Mini Beta", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.5}[0], + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "x-ai/grok-4": { + ID: "x-ai/grok-4", + Name: "Grok 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: &[]float64{15}[0], + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "x-ai/grok-4-fast": { + ID: "x-ai/grok-4-fast", + Name: "Grok 4 Fast", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: &[]float64{0.05}[0], + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "x-ai/grok-4.1-fast": { + ID: "x-ai/grok-4.1-fast", + Name: "Grok 4.1 Fast", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: &[]float64{0.05}[0], + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "x-ai/grok-code-fast-1": { + ID: "x-ai/grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 10000, + }, + }, + "z-ai/glm-4.5": { + ID: "z-ai/glm-4.5", + Name: "GLM 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 96000, + }, + }, + "z-ai/glm-4.5-air": { + ID: "z-ai/glm-4.5-air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 96000, + }, + }, + "z-ai/glm-4.5-air:free": { + ID: "z-ai/glm-4.5-air:free", + Name: "GLM 4.5 Air (free)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 96000, + }, + }, + "z-ai/glm-4.5v": { + ID: "z-ai/glm-4.5v", + Name: "GLM 4.5V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 16384, + }, + }, + "z-ai/glm-4.6": { + ID: "z-ai/glm-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 128000, + }, + }, + "z-ai/glm-4.6:exacto": { + ID: "z-ai/glm-4.6:exacto", + Name: "GLM 4.6 (exacto)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1.9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 128000, + }, + }, + "z-ai/glm-4.7": { + ID: "z-ai/glm-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + }, + }, + "ovhcloud": { + ID: "ovhcloud", + Env: []string{"OVHCLOUD_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "OVHcloud AI Endpoints", + Models: map[string]ModelInfo{ + "deepseek-r1-distill-llama-70b": { + ID: "deepseek-r1-distill-llama-70b", + Name: "DeepSeek-R1-Distill-Llama-70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.74, + Output: 0.74, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "gpt-oss-120b", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.09, + Output: 0.47, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "gpt-oss-20b": { + ID: "gpt-oss-20b", + Name: "gpt-oss-20b", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "llama-3.1-8b-instruct": { + ID: "llama-3.1-8b-instruct", + Name: "Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.11, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "llava-next-mistral-7b": { + ID: "llava-next-mistral-7b", + Name: "llava-next-mistral-7b", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.32, + Output: 0.32, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "meta-llama-3_1-70b-instruct": { + ID: "meta-llama-3_1-70b-instruct", + Name: "Meta-Llama-3_1-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.74, + Output: 0.74, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "meta-llama-3_3-70b-instruct": { + ID: "meta-llama-3_3-70b-instruct", + Name: "Meta-Llama-3_3-70B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.74, + Output: 0.74, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "mistral-7b-instruct-v0.3": { + ID: "mistral-7b-instruct-v0.3", + Name: "Mistral-7B-Instruct-v0.3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.11, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 127000, + }, + }, + "mistral-nemo-instruct-2407": { + ID: "mistral-nemo-instruct-2407", + Name: "Mistral-Nemo-Instruct-2407", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 118000, + Output: 118000, + }, + }, + "mistral-small-3.2-24b-instruct-2506": { + ID: "mistral-small-3.2-24b-instruct-2506", + Name: "Mistral-Small-3.2-24B-Instruct-2506", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.31, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mixtral-8x7b-instruct-v0.1": { + ID: "mixtral-8x7b-instruct-v0.1", + Name: "Mixtral-8x7B-Instruct-v0.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 0.7, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "qwen2.5-coder-32b-instruct": { + ID: "qwen2.5-coder-32b-instruct", + Name: "Qwen2.5-Coder-32B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.96, + Output: 0.96, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "qwen2.5-vl-72b-instruct": { + ID: "qwen2.5-vl-72b-instruct", + Name: "Qwen2.5-VL-72B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.01, + Output: 1.01, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "qwen3-32b": { + ID: "qwen3-32b", + Name: "Qwen3-32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "qwen3-coder-30b-a3b-instruct": { + ID: "qwen3-coder-30b-a3b-instruct", + Name: "Qwen3-Coder-30B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.26, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 256000, + }, + }, + }, + }, + "perplexity": { + ID: "perplexity", + Env: []string{"PERPLEXITY_API_KEY" }, + NPM: "@ai-sdk/perplexity", + Name: "Perplexity", + Models: map[string]ModelInfo{ + "sonar": { + ID: "sonar", + Name: "Sonar", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "sonar-pro": { + ID: "sonar-pro", + Name: "Sonar Pro", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "sonar-reasoning-pro": { + ID: "sonar-reasoning-pro", + Name: "Sonar Reasoning Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + }, + }, + "poe": { + ID: "poe", + Env: []string{"POE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Poe", + Models: map[string]ModelInfo{ + "anthropic/claude-haiku-3": { + ID: "anthropic/claude-haiku-3", + Name: "Claude-Haiku-3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.21, + Output: 1.1, + CacheRead: &[]float64{0.021}[0], + CacheWrite: &[]float64{0.26}[0], + }, + Limit: Limit{ + Context: 189096, + Output: 8192, + }, + }, + "anthropic/claude-haiku-3.5": { + ID: "anthropic/claude-haiku-3.5", + Name: "Claude-Haiku-3.5", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.68, + Output: 3.4, + CacheRead: &[]float64{0.068}[0], + CacheWrite: &[]float64{0.85}[0], + }, + Limit: Limit{ + Context: 189096, + Output: 8192, + }, + }, + "anthropic/claude-haiku-3.5-search": { + ID: "anthropic/claude-haiku-3.5-search", + Name: "Claude-Haiku-3.5-Search", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.68, + Output: 3.4, + CacheRead: &[]float64{0.068}[0], + CacheWrite: &[]float64{0.85}[0], + }, + Limit: Limit{ + Context: 189096, + Output: 8192, + }, + }, + "anthropic/claude-haiku-4.5": { + ID: "anthropic/claude-haiku-4.5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.85, + Output: 4.3, + CacheRead: &[]float64{0.085}[0], + CacheWrite: &[]float64{1.1}[0], + }, + Limit: Limit{ + Context: 192000, + Output: 64000, + }, + }, + "anthropic/claude-opus-3": { + ID: "anthropic/claude-opus-3", + Name: "Claude-Opus-3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 13, + Output: 64, + CacheRead: &[]float64{1.3}[0], + CacheWrite: &[]float64{16}[0], + }, + Limit: Limit{ + Context: 189096, + Output: 8192, + }, + }, + "anthropic/claude-opus-4": { + ID: "anthropic/claude-opus-4", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 13, + Output: 64, + CacheRead: &[]float64{1.3}[0], + CacheWrite: &[]float64{16}[0], + }, + Limit: Limit{ + Context: 192512, + Output: 32768, + }, + }, + "anthropic/claude-opus-4-reasoning": { + ID: "anthropic/claude-opus-4-reasoning", + Name: "Claude Opus 4 Reasoning", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 13, + Output: 64, + CacheRead: &[]float64{1.3}[0], + CacheWrite: &[]float64{16}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 32768, + }, + }, + "anthropic/claude-opus-4-search": { + ID: "anthropic/claude-opus-4-search", + Name: "Claude Opus 4 Search", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 13, + Output: 64, + CacheRead: &[]float64{1.3}[0], + CacheWrite: &[]float64{16}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 128000, + }, + }, + "anthropic/claude-opus-4.1": { + ID: "anthropic/claude-opus-4.1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 13, + Output: 64, + CacheRead: &[]float64{1.3}[0], + CacheWrite: &[]float64{16}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 32000, + }, + }, + "anthropic/claude-opus-4.5": { + ID: "anthropic/claude-opus-4.5", + Name: "claude-opus-4.5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 4.3, + Output: 21, + CacheRead: &[]float64{0.43}[0], + CacheWrite: &[]float64{5.3}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-3.5": { + ID: "anthropic/claude-sonnet-3.5", + Name: "Claude-Sonnet-3.5", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 189096, + Output: 8192, + }, + }, + "anthropic/claude-sonnet-3.5-june": { + ID: "anthropic/claude-sonnet-3.5-june", + Name: "Claude-Sonnet-3.5-June", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 189096, + Output: 8192, + }, + }, + "anthropic/claude-sonnet-3.7": { + ID: "anthropic/claude-sonnet-3.7", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 32768, + }, + }, + "anthropic/claude-sonnet-3.7-reasoning": { + ID: "anthropic/claude-sonnet-3.7-reasoning", + Name: "Claude Sonnet 3.7 Reasoning", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 128000, + }, + }, + "anthropic/claude-sonnet-3.7-search": { + ID: "anthropic/claude-sonnet-3.7-search", + Name: "Claude Sonnet 3.7 Search", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 196608, + Output: 128000, + }, + }, + "anthropic/claude-sonnet-4": { + ID: "anthropic/claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 983040, + Output: 32768, + }, + }, + "anthropic/claude-sonnet-4-reasoning": { + ID: "anthropic/claude-sonnet-4-reasoning", + Name: "Claude Sonnet 4 Reasoning", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 983040, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4-search": { + ID: "anthropic/claude-sonnet-4-search", + Name: "Claude Sonnet 4 Search", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 983040, + Output: 128000, + }, + }, + "anthropic/claude-sonnet-4.5": { + ID: "anthropic/claude-sonnet-4.5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2.6, + Output: 13, + CacheRead: &[]float64{0.26}[0], + CacheWrite: &[]float64{3.2}[0], + }, + Limit: Limit{ + Context: 983040, + Output: 32768, + }, + }, + "cerebras/gpt-oss-120b-cs": { + ID: "cerebras/gpt-oss-120b-cs", + Name: "gpt-oss-120b-cs", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "cerebras/zai-glm-4.6-cs": { + ID: "cerebras/zai-glm-4.6-cs", + Name: "zai-glm-4.6-cs", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 40000, + }, + }, + "elevenlabs/elevenlabs-music": { + ID: "elevenlabs/elevenlabs-music", + Name: "ElevenLabs-Music", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000, + Output: 0, + }, + }, + "elevenlabs/elevenlabs-v2.5-turbo": { + ID: "elevenlabs/elevenlabs-v2.5-turbo", + Name: "ElevenLabs-v2.5-Turbo", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 0, + }, + }, + "elevenlabs/elevenlabs-v3": { + ID: "elevenlabs/elevenlabs-v3", + Name: "ElevenLabs-v3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 0, + }, + }, + "google/gemini-2.0-flash": { + ID: "google/gemini-2.0-flash", + Name: "Gemini-2.0-Flash", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.1, + Output: 0.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 990000, + Output: 8192, + }, + }, + "google/gemini-2.0-flash-lite": { + ID: "google/gemini-2.0-flash-lite", + Name: "Gemini-2.0-Flash-Lite", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.052, + Output: 0.21, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 990000, + Output: 8192, + }, + }, + "google/gemini-2.5-flash": { + ID: "google/gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.21, + Output: 1.8, + CacheRead: &[]float64{0.021}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1065535, + Output: 65535, + }, + }, + "google/gemini-2.5-flash-lite": { + ID: "google/gemini-2.5-flash-lite", + Name: "Gemini 2.5 Flash Lite", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1024000, + Output: 64000, + }, + }, + "google/gemini-2.5-pro": { + ID: "google/gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.87, + Output: 7, + CacheRead: &[]float64{0.087}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1065535, + Output: 65535, + }, + }, + "google/gemini-3-flash": { + ID: "google/gemini-3-flash", + Name: "gemini-3-flash", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.4, + Output: 2.4, + CacheRead: &[]float64{0.04}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-pro": { + ID: "google/gemini-3-pro", + Name: "Gemini-3-Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.6, + Output: 9.6, + CacheRead: &[]float64{0.16}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 64000, + }, + }, + "google/gemini-deep-research": { + ID: "google/gemini-deep-research", + Name: "gemini-deep-research", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.6, + Output: 9.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 0, + }, + }, + "google/imagen-3": { + ID: "google/imagen-3", + Name: "Imagen-3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/imagen-3-fast": { + ID: "google/imagen-3-fast", + Name: "Imagen-3-Fast", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/imagen-4": { + ID: "google/imagen-4", + Name: "Imagen-4", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/imagen-4-fast": { + ID: "google/imagen-4-fast", + Name: "Imagen-4-Fast", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/imagen-4-ultra": { + ID: "google/imagen-4-ultra", + Name: "Imagen-4-Ultra", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/lyria": { + ID: "google/lyria", + Name: "Lyria", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "google/nano-banana": { + ID: "google/nano-banana", + Name: "Nano-Banana", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.21, + Output: 1.8, + CacheRead: &[]float64{0.021}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 0, + }, + }, + "google/nano-banana-pro": { + ID: "google/nano-banana-pro", + Name: "Nano-Banana-Pro", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.7, + Output: 10, + CacheRead: &[]float64{0.17}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 0, + }, + }, + "google/veo-2": { + ID: "google/veo-2", + Name: "Veo-2", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/veo-3": { + ID: "google/veo-3", + Name: "Veo-3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/veo-3-fast": { + ID: "google/veo-3-fast", + Name: "Veo-3-Fast", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/veo-3.1": { + ID: "google/veo-3.1", + Name: "Veo-3.1", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "google/veo-3.1-fast": { + ID: "google/veo-3.1-fast", + Name: "Veo-3.1-Fast", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 480, + Output: 0, + }, + }, + "ideogramai/ideogram": { + ID: "ideogramai/ideogram", + Name: "Ideogram", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 150, + Output: 0, + }, + }, + "ideogramai/ideogram-v2": { + ID: "ideogramai/ideogram-v2", + Name: "Ideogram-v2", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 150, + Output: 0, + }, + }, + "ideogramai/ideogram-v2a": { + ID: "ideogramai/ideogram-v2a", + Name: "Ideogram-v2a", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 150, + Output: 0, + }, + }, + "ideogramai/ideogram-v2a-turbo": { + ID: "ideogramai/ideogram-v2a-turbo", + Name: "Ideogram-v2a-Turbo", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 150, + Output: 0, + }, + }, + "lumalabs/dream-machine": { + ID: "lumalabs/dream-machine", + Name: "Dream-Machine", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 5000, + Output: 0, + }, + }, + "lumalabs/ray2": { + ID: "lumalabs/ray2", + Name: "Ray2", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 5000, + Output: 0, + }, + }, + "novita/glm-4.6": { + ID: "novita/glm-4.6", + Name: "GLM-4.6", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "novita/glm-4.6v": { + ID: "novita/glm-4.6v", + Name: "glm-4.6v", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 32768, + }, + }, + "novita/glm-4.7": { + ID: "novita/glm-4.7", + Name: "glm-4.7", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 205000, + Output: 131072, + }, + }, + "novita/kat-coder-pro": { + ID: "novita/kat-coder-pro", + Name: "kat-coder-pro", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 0, + }, + }, + "novita/kimi-k2-thinking": { + ID: "novita/kimi-k2-thinking", + Name: "kimi-k2-thinking", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 0, + }, + }, + "novita/minimax-m2.1": { + ID: "novita/minimax-m2.1", + Name: "minimax-m2.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 205000, + Output: 131072, + }, + }, + "openai/chatgpt-4o-latest": { + ID: "openai/chatgpt-4o-latest", + Name: "ChatGPT-4o-Latest", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 4.5, + Output: 14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/dall-e-3": { + ID: "openai/dall-e-3", + Name: "DALL-E-3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 800, + Output: 0, + }, + }, + "openai/gpt-3.5-turbo": { + ID: "openai/gpt-3.5-turbo", + Name: "GPT-3.5-Turbo", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.45, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16384, + Output: 2048, + }, + }, + "openai/gpt-3.5-turbo-instruct": { + ID: "openai/gpt-3.5-turbo-instruct", + Name: "GPT-3.5-Turbo-Instruct", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.4, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 3500, + Output: 1024, + }, + }, + "openai/gpt-3.5-turbo-raw": { + ID: "openai/gpt-3.5-turbo-raw", + Name: "GPT-3.5-Turbo-Raw", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.45, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4524, + Output: 2048, + }, + }, + "openai/gpt-4-classic": { + ID: "openai/gpt-4-classic", + Name: "GPT-4-Classic", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 27, + Output: 54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 4096, + }, + }, + "openai/gpt-4-classic-0314": { + ID: "openai/gpt-4-classic-0314", + Name: "GPT-4-Classic-0314", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 27, + Output: 54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 4096, + }, + }, + "openai/gpt-4-turbo": { + ID: "openai/gpt-4-turbo", + Name: "GPT-4-Turbo", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 9, + Output: 27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "openai/gpt-4.1": { + ID: "openai/gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.8, + Output: 7.2, + CacheRead: &[]float64{0.45}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4.1-mini": { + ID: "openai/gpt-4.1-mini", + Name: "GPT-4.1-mini", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.36, + Output: 1.4, + CacheRead: &[]float64{0.09}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4.1-nano": { + ID: "openai/gpt-4.1-nano", + Name: "GPT-4.1-nano", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.09, + Output: 0.36, + CacheRead: &[]float64{0.022}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4o": { + ID: "openai/gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/gpt-4o-aug": { + ID: "openai/gpt-4o-aug", + Name: "GPT-4o-Aug", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 2.2, + Output: 9, + CacheRead: &[]float64{1.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/gpt-4o-mini": { + ID: "openai/gpt-4o-mini", + Name: "GPT-4o-mini", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.14, + Output: 0.54, + CacheRead: &[]float64{0.068}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "openai/gpt-4o-mini-search": { + ID: "openai/gpt-4o-mini-search", + Name: "GPT-4o-mini-Search", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.14, + Output: 0.54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/gpt-4o-search": { + ID: "openai/gpt-4o-search", + Name: "GPT-4o-Search", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 2.2, + Output: 9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "openai/gpt-5": { + ID: "openai/gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-chat": { + ID: "openai/gpt-5-chat", + Name: "GPT-5-Chat", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5-codex": { + ID: "openai/gpt-5-codex", + Name: "GPT-5-Codex", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-mini": { + ID: "openai/gpt-5-mini", + Name: "GPT-5-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.22, + Output: 1.8, + CacheRead: &[]float64{0.022}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-nano": { + ID: "openai/gpt-5-nano", + Name: "GPT-5-nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.045, + Output: 0.36, + CacheRead: &[]float64{0.0045}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-pro": { + ID: "openai/gpt-5-pro", + Name: "GPT-5-Pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 14, + Output: 110, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1": { + ID: "openai/gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-codex": { + ID: "openai/gpt-5.1-codex", + Name: "GPT-5.1-Codex", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-codex-max": { + ID: "openai/gpt-5.1-codex-max", + Name: "gpt-5.1-codex-max", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-codex-mini": { + ID: "openai/gpt-5.1-codex-mini", + Name: "GPT-5.1-Codex-Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.22, + Output: 1.8, + CacheRead: &[]float64{0.022}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.1-instant": { + ID: "openai/gpt-5.1-instant", + Name: "GPT-5.1-Instant", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 9, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5.2": { + ID: "openai/gpt-5.2", + Name: "gpt-5.2", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.6, + Output: 13, + CacheRead: &[]float64{0.16}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5.2-instant": { + ID: "openai/gpt-5.2-instant", + Name: "gpt-5.2-instant", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 1.6, + Output: 13, + CacheRead: &[]float64{0.16}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5.2-pro": { + ID: "openai/gpt-5.2-pro", + Name: "gpt-5.2-pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 19, + Output: 150, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-image-1": { + ID: "openai/gpt-image-1", + Name: "GPT-Image-1", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 0, + }, + }, + "openai/gpt-image-1-mini": { + ID: "openai/gpt-image-1-mini", + Name: "GPT-Image-1-Mini", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "openai/gpt-image-1.5": { + ID: "openai/gpt-image-1.5", + Name: "gpt-image-1.5", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 0, + }, + }, + "openai/o1": { + ID: "openai/o1", + Name: "o1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 14, + Output: 54, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o1-pro": { + ID: "openai/o1-pro", + Name: "o1-pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 140, + Output: 540, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3": { + ID: "openai/o3", + Name: "o3", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.8, + Output: 7.2, + CacheRead: &[]float64{0.45}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-deep-research": { + ID: "openai/o3-deep-research", + Name: "o3-deep-research", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 9, + Output: 36, + CacheRead: &[]float64{2.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-mini": { + ID: "openai/o3-mini", + Name: "o3-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.99, + Output: 4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-mini-high": { + ID: "openai/o3-mini-high", + Name: "o3-mini-high", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.99, + Output: 4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-pro": { + ID: "openai/o3-pro", + Name: "o3-pro", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 18, + Output: 72, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o4-mini": { + ID: "openai/o4-mini", + Name: "o4-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.99, + Output: 4, + CacheRead: &[]float64{0.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o4-mini-deep-research": { + ID: "openai/o4-mini-deep-research", + Name: "o4-mini-deep-research", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.8, + Output: 7.2, + CacheRead: &[]float64{0.45}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/sora-2": { + ID: "openai/sora-2", + Name: "Sora-2", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "openai/sora-2-pro": { + ID: "openai/sora-2-pro", + Name: "Sora-2-Pro", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "poetools/claude-code": { + ID: "poetools/claude-code", + Name: "claude-code", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 0, + }, + }, + "runwayml/runway": { + ID: "runwayml/runway", + Name: "Runway", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256, + Output: 0, + }, + }, + "runwayml/runway-gen-4-turbo": { + ID: "runwayml/runway-gen-4-turbo", + Name: "Runway-Gen-4-Turbo", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256, + Output: 0, + }, + }, + "stabilityai/stablediffusionxl": { + ID: "stabilityai/stablediffusionxl", + Name: "StableDiffusionXL", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200, + Output: 0, + }, + }, + "topazlabs-co/topazlabs": { + ID: "topazlabs-co/topazlabs", + Name: "TopazLabs", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204, + Output: 0, + }, + }, + "trytako/tako": { + ID: "trytako/tako", + Name: "Tako", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2048, + Output: 0, + }, + }, + "xai/grok-3": { + ID: "xai/grok-3", + Name: "Grok 3", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-3-mini": { + ID: "xai/grok-3-mini", + Name: "Grok 3 Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-4": { + ID: "xai/grok-4", + Name: "Grok 4", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 128000, + }, + }, + "xai/grok-4-fast-non-reasoning": { + ID: "xai/grok-4-fast-non-reasoning", + Name: "Grok-4-Fast-Non-Reasoning", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 128000, + }, + }, + "xai/grok-4-fast-reasoning": { + ID: "xai/grok-4-fast-reasoning", + Name: "Grok 4 Fast Reasoning", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 128000, + }, + }, + "xai/grok-4.1-fast-non-reasoning": { + ID: "xai/grok-4.1-fast-non-reasoning", + Name: "Grok-4.1-Fast-Non-Reasoning", + Attachment: true, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "xai/grok-4.1-fast-reasoning": { + ID: "xai/grok-4.1-fast-reasoning", + Name: "Grok-4.1-Fast-Reasoning", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "xai/grok-code-fast-1": { + ID: "xai/grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 128000, + }, + }, + }, + }, + "requesty": { + ID: "requesty", + Env: []string{"REQUESTY_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Requesty", + Models: map[string]ModelInfo{ + "anthropic/claude-3-7-sonnet": { + ID: "anthropic/claude-3-7-sonnet", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-haiku-4-5": { + ID: "anthropic/claude-haiku-4-5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 62000, + }, + }, + "anthropic/claude-opus-4": { + ID: "anthropic/claude-opus-4", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4-1": { + ID: "anthropic/claude-opus-4-1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4-5": { + ID: "anthropic/claude-opus-4-5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4": { + ID: "anthropic/claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4-5": { + ID: "anthropic/claude-sonnet-4-5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "google/gemini-2.5-flash": { + ID: "google/gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.55}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-pro": { + ID: "google/gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: &[]float64{2.375}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-flash-preview": { + ID: "google/gemini-3-flash-preview", + Name: "Gemini 3 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: &[]float64{0.05}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-pro-preview": { + ID: "google/gemini-3-pro-preview", + Name: "Gemini 3 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.2}[0], + CacheWrite: &[]float64{4.5}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "openai/gpt-4.1": { + ID: "openai/gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4.1-mini": { + ID: "openai/gpt-4.1-mini", + Name: "GPT-4.1 Mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4o-mini": { + ID: "openai/gpt-4o-mini", + Name: "GPT-4o Mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5": { + ID: "openai/gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-mini": { + ID: "openai/gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "openai/gpt-5-nano": { + ID: "openai/gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 4000, + }, + }, + "openai/o4-mini": { + ID: "openai/o4-mini", + Name: "o4 Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "xai/grok-4": { + ID: "xai/grok-4", + Name: "Grok 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: &[]float64{3}[0], + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "xai/grok-4-fast": { + ID: "xai/grok-4-fast", + Name: "Grok 4 Fast", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: &[]float64{0.2}[0], + }, + Limit: Limit{ + Context: 2000000, + Output: 64000, + }, + }, + }, + }, + "sap-ai-core": { + ID: "sap-ai-core", + Env: []string{"AICORE_SERVICE_KEY" }, + NPM: "@mymediset/sap-ai-provider", + Name: "SAP AI Core", + Models: map[string]ModelInfo{ + "anthropic--claude-3-haiku": { + ID: "anthropic--claude-3-haiku", + Name: "anthropic--claude-3-haiku", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1.25, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic--claude-3-opus": { + ID: "anthropic--claude-3-opus", + Name: "anthropic--claude-3-opus", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic--claude-3-sonnet": { + ID: "anthropic--claude-3-sonnet", + Name: "anthropic--claude-3-sonnet", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic--claude-3.5-sonnet": { + ID: "anthropic--claude-3.5-sonnet", + Name: "anthropic--claude-3.5-sonnet", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic--claude-3.7-sonnet": { + ID: "anthropic--claude-3.7-sonnet", + Name: "anthropic--claude-3.7-sonnet", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic--claude-4-opus": { + ID: "anthropic--claude-4-opus", + Name: "anthropic--claude-4-opus", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic--claude-4-sonnet": { + ID: "anthropic--claude-4-sonnet", + Name: "anthropic--claude-4-sonnet", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic--claude-4.5-haiku": { + ID: "anthropic--claude-4.5-haiku", + Name: "anthropic--claude-4.5-haiku", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic--claude-4.5-sonnet": { + ID: "anthropic--claude-4.5-sonnet", + Name: "anthropic--claude-4.5-sonnet", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "gemini-2.5-flash": { + ID: "gemini-2.5-flash", + Name: "gemini-2.5-flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gemini-2.5-pro": { + ID: "gemini-2.5-pro", + Name: "gemini-2.5-pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "gpt-5": { + ID: "gpt-5", + Name: "gpt-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-mini": { + ID: "gpt-5-mini", + Name: "gpt-5-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "gpt-5-nano": { + ID: "gpt-5-nano", + Name: "gpt-5-nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + }, + }, + "scaleway": { + ID: "scaleway", + Env: []string{"SCALEWAY_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Scaleway", + Models: map[string]ModelInfo{ + "bge-multilingual-gemma2": { + ID: "bge-multilingual-gemma2", + Name: "BGE Multilingual Gemma2", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.13, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8191, + Output: 3072, + }, + }, + "deepseek-r1-distill-llama-70b": { + ID: "deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.9, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 4096, + }, + }, + "devstral-2-123b-instruct-2512": { + ID: "devstral-2-123b-instruct-2512", + Name: "Devstral 2 123B Instruct (2512)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 8192, + }, + }, + "gemma-3-27b-it": { + ID: "gemma-3-27b-it", + Name: "Gemma-3-27B-IT", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 40000, + Output: 8192, + }, + }, + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "GPT-OSS 120B", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "llama-3.1-8b-instruct": { + ID: "llama-3.1-8b-instruct", + Name: "Llama 3.1 8B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "llama-3.3-70b-instruct": { + ID: "llama-3.3-70b-instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.9, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 100000, + Output: 4096, + }, + }, + "mistral-nemo-instruct-2407": { + ID: "mistral-nemo-instruct-2407", + Name: "Mistral Nemo Instruct 2407", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "mistral-small-3.2-24b-instruct-2506": { + ID: "mistral-small-3.2-24b-instruct-2506", + Name: "Mistral Small 3.2 24B Instruct (2506)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.35, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "pixtral-12b-2409": { + ID: "pixtral-12b-2409", + Name: "Pixtral 12B 2409", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "qwen3-235b-a22b-instruct-2507": { + ID: "qwen3-235b-a22b-instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.75, + Output: 2.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 260000, + Output: 8192, + }, + }, + "qwen3-coder-30b-a3b-instruct": { + ID: "qwen3-coder-30b-a3b-instruct", + Name: "Qwen3-Coder 30B-A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "voxtral-small-24b-2507": { + ID: "voxtral-small-24b-2507", + Name: "Voxtral Small 24B 2507", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.35, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 8192, + }, + }, + "whisper-large-v3": { + ID: "whisper-large-v3", + Name: "Whisper Large v3", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.003, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 0, + Output: 4096, + }, + }, + }, + }, + "siliconflow": { + ID: "siliconflow", + Env: []string{"SILICONFLOW_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "SiliconFlow", + Models: map[string]ModelInfo{ + "ByteDance-Seed/Seed-OSS-36B-Instruct": { + ID: "ByteDance-Seed/Seed-OSS-36B-Instruct", + Name: "ByteDance-Seed/Seed-OSS-36B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.21, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "MiniMaxAI/MiniMax-M1-80k": { + ID: "MiniMaxAI/MiniMax-M1-80k", + Name: "MiniMaxAI/MiniMax-M1-80k", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "MiniMaxAI/MiniMax-M2": { + ID: "MiniMaxAI/MiniMax-M2", + Name: "MiniMaxAI/MiniMax-M2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 197000, + Output: 131000, + }, + }, + "Qwen/QwQ-32B": { + ID: "Qwen/QwQ-32B", + Name: "Qwen/QwQ-32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.58, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen2.5-14B-Instruct": { + ID: "Qwen/Qwen2.5-14B-Instruct", + Name: "Qwen/Qwen2.5-14B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-32B-Instruct": { + ID: "Qwen/Qwen2.5-32B-Instruct", + Name: "Qwen/Qwen2.5-32B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-72B-Instruct": { + ID: "Qwen/Qwen2.5-72B-Instruct", + Name: "Qwen/Qwen2.5-72B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-72B-Instruct-128K": { + ID: "Qwen/Qwen2.5-72B-Instruct-128K", + Name: "Qwen/Qwen2.5-72B-Instruct-128K", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-7B-Instruct": { + ID: "Qwen/Qwen2.5-7B-Instruct", + Name: "Qwen/Qwen2.5-7B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-Coder-32B-Instruct": { + ID: "Qwen/Qwen2.5-Coder-32B-Instruct", + Name: "Qwen/Qwen2.5-Coder-32B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-VL-32B-Instruct": { + ID: "Qwen/Qwen2.5-VL-32B-Instruct", + Name: "Qwen/Qwen2.5-VL-32B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen2.5-VL-72B-Instruct": { + ID: "Qwen/Qwen2.5-VL-72B-Instruct", + Name: "Qwen/Qwen2.5-VL-72B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-VL-7B-Instruct": { + ID: "Qwen/Qwen2.5-VL-7B-Instruct", + Name: "Qwen/Qwen2.5-VL-7B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen3-14B": { + ID: "Qwen/Qwen3-14B", + Name: "Qwen/Qwen3-14B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-235B-A22B": { + ID: "Qwen/Qwen3-235B-A22B", + Name: "Qwen/Qwen3-235B-A22B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-30B-A3B": { + ID: "Qwen/Qwen3-30B-A3B", + Name: "Qwen/Qwen3-30B-A3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + ID: "Qwen/Qwen3-30B-A3B-Instruct-2507", + Name: "Qwen/Qwen3-30B-A3B-Instruct-2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-30B-A3B-Thinking-2507": { + ID: "Qwen/Qwen3-30B-A3B-Thinking-2507", + Name: "Qwen/Qwen3-30B-A3B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 131000, + }, + }, + "Qwen/Qwen3-32B": { + ID: "Qwen/Qwen3-32B", + Name: "Qwen/Qwen3-32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-8B": { + ID: "Qwen/Qwen3-8B", + Name: "Qwen/Qwen3-8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.06, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-Coder-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-Coder-30B-A3B-Instruct", + Name: "Qwen/Qwen3-Coder-30B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Name: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + ID: "Qwen/Qwen3-Next-80B-A3B-Thinking", + Name: "Qwen/Qwen3-Next-80B-A3B-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Omni-30B-A3B-Captioner": { + ID: "Qwen/Qwen3-Omni-30B-A3B-Captioner", + Name: "Qwen/Qwen3-Omni-30B-A3B-Captioner", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "Qwen/Qwen3-Omni-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-Omni-30B-A3B-Instruct", + Name: "Qwen/Qwen3-Omni-30B-A3B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "Qwen/Qwen3-Omni-30B-A3B-Thinking": { + ID: "Qwen/Qwen3-Omni-30B-A3B-Thinking", + Name: "Qwen/Qwen3-Omni-30B-A3B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "Qwen/Qwen3-VL-235B-A22B-Instruct": { + ID: "Qwen/Qwen3-VL-235B-A22B-Instruct", + Name: "Qwen/Qwen3-VL-235B-A22B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-235B-A22B-Thinking": { + ID: "Qwen/Qwen3-VL-235B-A22B-Thinking", + Name: "Qwen/Qwen3-VL-235B-A22B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.45, + Output: 3.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-VL-30B-A3B-Instruct", + Name: "Qwen/Qwen3-VL-30B-A3B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-30B-A3B-Thinking": { + ID: "Qwen/Qwen3-VL-30B-A3B-Thinking", + Name: "Qwen/Qwen3-VL-30B-A3B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-32B-Instruct": { + ID: "Qwen/Qwen3-VL-32B-Instruct", + Name: "Qwen/Qwen3-VL-32B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-32B-Thinking": { + ID: "Qwen/Qwen3-VL-32B-Thinking", + Name: "Qwen/Qwen3-VL-32B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-8B-Instruct": { + ID: "Qwen/Qwen3-VL-8B-Instruct", + Name: "Qwen/Qwen3-VL-8B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-8B-Thinking": { + ID: "Qwen/Qwen3-VL-8B-Thinking", + Name: "Qwen/Qwen3-VL-8B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "THUDM/GLM-4-32B-0414": { + ID: "THUDM/GLM-4-32B-0414", + Name: "THUDM/GLM-4-32B-0414", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 33000, + }, + }, + "THUDM/GLM-4-9B-0414": { + ID: "THUDM/GLM-4-9B-0414", + Name: "THUDM/GLM-4-9B-0414", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.086, + Output: 0.086, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 33000, + }, + }, + "THUDM/GLM-4.1V-9B-Thinking": { + ID: "THUDM/GLM-4.1V-9B-Thinking", + Name: "THUDM/GLM-4.1V-9B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.035, + Output: 0.14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "THUDM/GLM-Z1-32B-0414": { + ID: "THUDM/GLM-Z1-32B-0414", + Name: "THUDM/GLM-Z1-32B-0414", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "THUDM/GLM-Z1-9B-0414": { + ID: "THUDM/GLM-Z1-9B-0414", + Name: "THUDM/GLM-Z1-9B-0414", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.086, + Output: 0.086, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "baidu/ERNIE-4.5-300B-A47B": { + ID: "baidu/ERNIE-4.5-300B-A47B", + Name: "baidu/ERNIE-4.5-300B-A47B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 1.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "deepseek-ai/DeepSeek-R1": { + ID: "deepseek-ai/DeepSeek-R1", + Name: "deepseek-ai/DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + Name: "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + Name: "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", + Name: "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 16000, + }, + }, + "deepseek-ai/DeepSeek-V3": { + ID: "deepseek-ai/DeepSeek-V3", + Name: "deepseek-ai/DeepSeek-V3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-V3.1": { + ID: "deepseek-ai/DeepSeek-V3.1", + Name: "deepseek-ai/DeepSeek-V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-V3.1-Terminus": { + ID: "deepseek-ai/DeepSeek-V3.1-Terminus", + Name: "deepseek-ai/DeepSeek-V3.1-Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-V3.2-Exp": { + ID: "deepseek-ai/DeepSeek-V3.2-Exp", + Name: "deepseek-ai/DeepSeek-V3.2-Exp", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.41, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/deepseek-vl2": { + ID: "deepseek-ai/deepseek-vl2", + Name: "deepseek-ai/deepseek-vl2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4000, + Output: 4000, + }, + }, + "inclusionAI/Ling-flash-2.0": { + ID: "inclusionAI/Ling-flash-2.0", + Name: "inclusionAI/Ling-flash-2.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "inclusionAI/Ling-mini-2.0": { + ID: "inclusionAI/Ling-mini-2.0", + Name: "inclusionAI/Ling-mini-2.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "inclusionAI/Ring-flash-2.0": { + ID: "inclusionAI/Ring-flash-2.0", + Name: "inclusionAI/Ring-flash-2.0", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "meta-llama/Meta-Llama-3.1-8B-Instruct": { + ID: "meta-llama/Meta-Llama-3.1-8B-Instruct", + Name: "meta-llama/Meta-Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.06, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "moonshotai/Kimi-Dev-72B": { + ID: "moonshotai/Kimi-Dev-72B", + Name: "moonshotai/Kimi-Dev-72B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "moonshotai/Kimi-K2-Instruct": { + ID: "moonshotai/Kimi-K2-Instruct", + Name: "moonshotai/Kimi-K2-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.58, + Output: 2.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "moonshotai/Kimi-K2-Instruct-0905": { + ID: "moonshotai/Kimi-K2-Instruct-0905", + Name: "moonshotai/Kimi-K2-Instruct-0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "moonshotai/Kimi-K2-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "nex-agi/DeepSeek-V3.1-Nex-N1": { + ID: "nex-agi/DeepSeek-V3.1-Nex-N1", + Name: "nex-agi/DeepSeek-V3.1-Nex-N1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "openai/gpt-oss-120b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 8000, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "openai/gpt-oss-20b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 8000, + }, + }, + "stepfun-ai/step3": { + ID: "stepfun-ai/step3", + Name: "stepfun-ai/step3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.57, + Output: 1.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "tencent/Hunyuan-A13B-Instruct": { + ID: "tencent/Hunyuan-A13B-Instruct", + Name: "tencent/Hunyuan-A13B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "tencent/Hunyuan-MT-7B": { + ID: "tencent/Hunyuan-MT-7B", + Name: "tencent/Hunyuan-MT-7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 33000, + }, + }, + "z-ai/GLM-4.5": { + ID: "z-ai/GLM-4.5", + Name: "z-ai/GLM-4.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "z-ai/GLM-4.5-Air": { + ID: "z-ai/GLM-4.5-Air", + Name: "z-ai/GLM-4.5-Air", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.86, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "zai-org/GLM-4.5": { + ID: "zai-org/GLM-4.5", + Name: "zai-org/GLM-4.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "zai-org/GLM-4.5-Air": { + ID: "zai-org/GLM-4.5-Air", + Name: "zai-org/GLM-4.5-Air", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.86, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "zai-org/GLM-4.5V": { + ID: "zai-org/GLM-4.5V", + Name: "zai-org/GLM-4.5V", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.86, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "zai-org/GLM-4.6": { + ID: "zai-org/GLM-4.6", + Name: "zai-org/GLM-4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 205000, + Output: 205000, + }, + }, + }, + }, + "siliconflow-cn": { + ID: "siliconflow-cn", + Env: []string{"SILICONFLOW_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "SiliconFlow (China)", + Models: map[string]ModelInfo{ + "ByteDance-Seed/Seed-OSS-36B-Instruct": { + ID: "ByteDance-Seed/Seed-OSS-36B-Instruct", + Name: "ByteDance-Seed/Seed-OSS-36B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.21, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "MiniMaxAI/MiniMax-M1-80k": { + ID: "MiniMaxAI/MiniMax-M1-80k", + Name: "MiniMaxAI/MiniMax-M1-80k", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "MiniMaxAI/MiniMax-M2": { + ID: "MiniMaxAI/MiniMax-M2", + Name: "MiniMaxAI/MiniMax-M2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 197000, + Output: 131000, + }, + }, + "Qwen/QwQ-32B": { + ID: "Qwen/QwQ-32B", + Name: "Qwen/QwQ-32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.58, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen2.5-14B-Instruct": { + ID: "Qwen/Qwen2.5-14B-Instruct", + Name: "Qwen/Qwen2.5-14B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-32B-Instruct": { + ID: "Qwen/Qwen2.5-32B-Instruct", + Name: "Qwen/Qwen2.5-32B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-72B-Instruct": { + ID: "Qwen/Qwen2.5-72B-Instruct", + Name: "Qwen/Qwen2.5-72B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-72B-Instruct-128K": { + ID: "Qwen/Qwen2.5-72B-Instruct-128K", + Name: "Qwen/Qwen2.5-72B-Instruct-128K", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-7B-Instruct": { + ID: "Qwen/Qwen2.5-7B-Instruct", + Name: "Qwen/Qwen2.5-7B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-Coder-32B-Instruct": { + ID: "Qwen/Qwen2.5-Coder-32B-Instruct", + Name: "Qwen/Qwen2.5-Coder-32B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-VL-32B-Instruct": { + ID: "Qwen/Qwen2.5-VL-32B-Instruct", + Name: "Qwen/Qwen2.5-VL-32B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen2.5-VL-72B-Instruct": { + ID: "Qwen/Qwen2.5-VL-72B-Instruct", + Name: "Qwen/Qwen2.5-VL-72B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.59, + Output: 0.59, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 4000, + }, + }, + "Qwen/Qwen2.5-VL-7B-Instruct": { + ID: "Qwen/Qwen2.5-VL-7B-Instruct", + Name: "Qwen/Qwen2.5-VL-7B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "Qwen/Qwen3-14B": { + ID: "Qwen/Qwen3-14B", + Name: "Qwen/Qwen3-14B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-235B-A22B": { + ID: "Qwen/Qwen3-235B-A22B", + Name: "Qwen/Qwen3-235B-A22B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.13, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-30B-A3B": { + ID: "Qwen/Qwen3-30B-A3B", + Name: "Qwen/Qwen3-30B-A3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-30B-A3B-Instruct-2507": { + ID: "Qwen/Qwen3-30B-A3B-Instruct-2507", + Name: "Qwen/Qwen3-30B-A3B-Instruct-2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-30B-A3B-Thinking-2507": { + ID: "Qwen/Qwen3-30B-A3B-Thinking-2507", + Name: "Qwen/Qwen3-30B-A3B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.09, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 131000, + }, + }, + "Qwen/Qwen3-32B": { + ID: "Qwen/Qwen3-32B", + Name: "Qwen/Qwen3-32B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-8B": { + ID: "Qwen/Qwen3-8B", + Name: "Qwen/Qwen3-8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.06, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "Qwen/Qwen3-Coder-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-Coder-30B-A3B-Instruct", + Name: "Qwen/Qwen3-Coder-30B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Instruct": { + ID: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Name: "Qwen/Qwen3-Next-80B-A3B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 1.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Next-80B-A3B-Thinking": { + ID: "Qwen/Qwen3-Next-80B-A3B-Thinking", + Name: "Qwen/Qwen3-Next-80B-A3B-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-Omni-30B-A3B-Captioner": { + ID: "Qwen/Qwen3-Omni-30B-A3B-Captioner", + Name: "Qwen/Qwen3-Omni-30B-A3B-Captioner", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "Qwen/Qwen3-Omni-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-Omni-30B-A3B-Instruct", + Name: "Qwen/Qwen3-Omni-30B-A3B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "Qwen/Qwen3-Omni-30B-A3B-Thinking": { + ID: "Qwen/Qwen3-Omni-30B-A3B-Thinking", + Name: "Qwen/Qwen3-Omni-30B-A3B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "Qwen/Qwen3-VL-235B-A22B-Instruct": { + ID: "Qwen/Qwen3-VL-235B-A22B-Instruct", + Name: "Qwen/Qwen3-VL-235B-A22B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-235B-A22B-Thinking": { + ID: "Qwen/Qwen3-VL-235B-A22B-Thinking", + Name: "Qwen/Qwen3-VL-235B-A22B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.45, + Output: 3.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-30B-A3B-Instruct": { + ID: "Qwen/Qwen3-VL-30B-A3B-Instruct", + Name: "Qwen/Qwen3-VL-30B-A3B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-30B-A3B-Thinking": { + ID: "Qwen/Qwen3-VL-30B-A3B-Thinking", + Name: "Qwen/Qwen3-VL-30B-A3B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-32B-Instruct": { + ID: "Qwen/Qwen3-VL-32B-Instruct", + Name: "Qwen/Qwen3-VL-32B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-32B-Thinking": { + ID: "Qwen/Qwen3-VL-32B-Thinking", + Name: "Qwen/Qwen3-VL-32B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-8B-Instruct": { + ID: "Qwen/Qwen3-VL-8B-Instruct", + Name: "Qwen/Qwen3-VL-8B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "Qwen/Qwen3-VL-8B-Thinking": { + ID: "Qwen/Qwen3-VL-8B-Thinking", + Name: "Qwen/Qwen3-VL-8B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "THUDM/GLM-4-32B-0414": { + ID: "THUDM/GLM-4-32B-0414", + Name: "THUDM/GLM-4-32B-0414", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.27, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 33000, + }, + }, + "THUDM/GLM-4-9B-0414": { + ID: "THUDM/GLM-4-9B-0414", + Name: "THUDM/GLM-4-9B-0414", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.086, + Output: 0.086, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 33000, + }, + }, + "THUDM/GLM-4.1V-9B-Thinking": { + ID: "THUDM/GLM-4.1V-9B-Thinking", + Name: "THUDM/GLM-4.1V-9B-Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.035, + Output: 0.14, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "THUDM/GLM-Z1-32B-0414": { + ID: "THUDM/GLM-Z1-32B-0414", + Name: "THUDM/GLM-Z1-32B-0414", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "THUDM/GLM-Z1-9B-0414": { + ID: "THUDM/GLM-Z1-9B-0414", + Name: "THUDM/GLM-Z1-9B-0414", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.086, + Output: 0.086, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "baidu/ERNIE-4.5-300B-A47B": { + ID: "baidu/ERNIE-4.5-300B-A47B", + Name: "baidu/ERNIE-4.5-300B-A47B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 1.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "deepseek-ai/DeepSeek-R1": { + ID: "deepseek-ai/DeepSeek-R1", + Name: "deepseek-ai/DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + Name: "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + Name: "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.18, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B": { + ID: "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", + Name: "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.05, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 16000, + }, + }, + "deepseek-ai/DeepSeek-V3": { + ID: "deepseek-ai/DeepSeek-V3", + Name: "deepseek-ai/DeepSeek-V3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-V3.1": { + ID: "deepseek-ai/DeepSeek-V3.1", + Name: "deepseek-ai/DeepSeek-V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-V3.1-Terminus": { + ID: "deepseek-ai/DeepSeek-V3.1-Terminus", + Name: "deepseek-ai/DeepSeek-V3.1-Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/DeepSeek-V3.2-Exp": { + ID: "deepseek-ai/DeepSeek-V3.2-Exp", + Name: "deepseek-ai/DeepSeek-V3.2-Exp", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.41, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 164000, + Output: 164000, + }, + }, + "deepseek-ai/deepseek-vl2": { + ID: "deepseek-ai/deepseek-vl2", + Name: "deepseek-ai/deepseek-vl2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 4000, + Output: 4000, + }, + }, + "inclusionAI/Ling-flash-2.0": { + ID: "inclusionAI/Ling-flash-2.0", + Name: "inclusionAI/Ling-flash-2.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "inclusionAI/Ling-mini-2.0": { + ID: "inclusionAI/Ling-mini-2.0", + Name: "inclusionAI/Ling-mini-2.0", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.28, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "inclusionAI/Ring-flash-2.0": { + ID: "inclusionAI/Ring-flash-2.0", + Name: "inclusionAI/Ring-flash-2.0", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "meta-llama/Meta-Llama-3.1-8B-Instruct": { + ID: "meta-llama/Meta-Llama-3.1-8B-Instruct", + Name: "meta-llama/Meta-Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.06, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 4000, + }, + }, + "moonshotai/Kimi-Dev-72B": { + ID: "moonshotai/Kimi-Dev-72B", + Name: "moonshotai/Kimi-Dev-72B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.29, + Output: 1.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "moonshotai/Kimi-K2-Instruct": { + ID: "moonshotai/Kimi-K2-Instruct", + Name: "moonshotai/Kimi-K2-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.58, + Output: 2.29, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "moonshotai/Kimi-K2-Instruct-0905": { + ID: "moonshotai/Kimi-K2-Instruct-0905", + Name: "moonshotai/Kimi-K2-Instruct-0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "moonshotai/Kimi-K2-Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262000, + Output: 262000, + }, + }, + "nex-agi/DeepSeek-V3.1-Nex-N1": { + ID: "nex-agi/DeepSeek-V3.1-Nex-N1", + Name: "nex-agi/DeepSeek-V3.1-Nex-N1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "openai/gpt-oss-120b", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.45, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 8000, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "openai/gpt-oss-20b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.18, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 8000, + }, + }, + "stepfun-ai/step3": { + ID: "stepfun-ai/step3", + Name: "stepfun-ai/step3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.57, + Output: 1.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "tencent/Hunyuan-A13B-Instruct": { + ID: "tencent/Hunyuan-A13B-Instruct", + Name: "tencent/Hunyuan-A13B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "tencent/Hunyuan-MT-7B": { + ID: "tencent/Hunyuan-MT-7B", + Name: "tencent/Hunyuan-MT-7B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 33000, + Output: 33000, + }, + }, + "z-ai/GLM-4.5": { + ID: "z-ai/GLM-4.5", + Name: "z-ai/GLM-4.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "z-ai/GLM-4.5-Air": { + ID: "z-ai/GLM-4.5-Air", + Name: "z-ai/GLM-4.5-Air", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.86, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "zai-org/GLM-4.5": { + ID: "zai-org/GLM-4.5", + Name: "zai-org/GLM-4.5", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "zai-org/GLM-4.5-Air": { + ID: "zai-org/GLM-4.5-Air", + Name: "zai-org/GLM-4.5-Air", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.86, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131000, + Output: 131000, + }, + }, + "zai-org/GLM-4.5V": { + ID: "zai-org/GLM-4.5V", + Name: "zai-org/GLM-4.5V", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.86, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 66000, + }, + }, + "zai-org/GLM-4.6": { + ID: "zai-org/GLM-4.6", + Name: "zai-org/GLM-4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 205000, + Output: 205000, + }, + }, + }, + }, + "submodel": { + ID: "submodel", + Env: []string{"SUBMODEL_INSTAGEN_ACCESS_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "submodel", + Models: map[string]ModelInfo{ + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "deepseek-ai/DeepSeek-R1-0528": { + ID: "deepseek-ai/DeepSeek-R1-0528", + Name: "DeepSeek R1 0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 75000, + Output: 163840, + }, + }, + "deepseek-ai/DeepSeek-V3-0324": { + ID: "deepseek-ai/DeepSeek-V3-0324", + Name: "DeepSeek V3 0324", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 75000, + Output: 163840, + }, + }, + "deepseek-ai/DeepSeek-V3.1": { + ID: "deepseek-ai/DeepSeek-V3.1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 75000, + Output: 163840, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "zai-org/GLM-4.5-Air": { + ID: "zai-org/GLM-4.5-Air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "zai-org/GLM-4.5-FP8": { + ID: "zai-org/GLM-4.5-FP8", + Name: "GLM 4.5 FP8", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + }, + }, + "synthetic": { + ID: "synthetic", + Env: []string{"SYNTHETIC_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Synthetic", + Models: map[string]ModelInfo{ + "hf:MiniMaxAI/MiniMax-M2": { + ID: "hf:MiniMaxAI/MiniMax-M2", + Name: "MiniMax-M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 196608, + Output: 131000, + }, + }, + "hf:MiniMaxAI/MiniMax-M2.1": { + ID: "hf:MiniMaxAI/MiniMax-M2.1", + Name: "MiniMax-M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "hf:Qwen/Qwen2.5-Coder-32B-Instruct": { + ID: "hf:Qwen/Qwen2.5-Coder-32B-Instruct", + Name: "Qwen2.5-Coder-32B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 0.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "hf:Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "hf:Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen 3 235B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "hf:Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "hf:Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.65, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen 3 Coder 480B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + "hf:deepseek-ai/DeepSeek-R1": { + ID: "hf:deepseek-ai/DeepSeek-R1", + Name: "DeepSeek R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "hf:deepseek-ai/DeepSeek-R1-0528": { + ID: "hf:deepseek-ai/DeepSeek-R1-0528", + Name: "DeepSeek R1 (0528)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "hf:deepseek-ai/DeepSeek-V3": { + ID: "hf:deepseek-ai/DeepSeek-V3", + Name: "DeepSeek V3", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 1.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "hf:deepseek-ai/DeepSeek-V3-0324": { + ID: "hf:deepseek-ai/DeepSeek-V3-0324", + Name: "DeepSeek V3 (0324)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.2, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "hf:deepseek-ai/DeepSeek-V3.1": { + ID: "hf:deepseek-ai/DeepSeek-V3.1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 1.68, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "hf:deepseek-ai/DeepSeek-V3.1-Terminus": { + ID: "hf:deepseek-ai/DeepSeek-V3.1-Terminus", + Name: "DeepSeek V3.1 Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.2, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "hf:deepseek-ai/DeepSeek-V3.2": { + ID: "hf:deepseek-ai/DeepSeek-V3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 0.4, + CacheRead: &[]float64{0.27}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 162816, + Output: 8000, + }, + }, + "hf:meta-llama/Llama-3.1-405B-Instruct": { + ID: "hf:meta-llama/Llama-3.1-405B-Instruct", + Name: "Llama-3.1-405B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "hf:meta-llama/Llama-3.1-70B-Instruct": { + ID: "hf:meta-llama/Llama-3.1-70B-Instruct", + Name: "Llama-3.1-70B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.9, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "hf:meta-llama/Llama-3.1-8B-Instruct": { + ID: "hf:meta-llama/Llama-3.1-8B-Instruct", + Name: "Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "hf:meta-llama/Llama-3.3-70B-Instruct": { + ID: "hf:meta-llama/Llama-3.3-70B-Instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.9, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": { + ID: "hf:meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8", + Name: "Llama-4-Maverick-17B-128E-Instruct-FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 524000, + Output: 4096, + }, + }, + "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct": { + ID: "hf:meta-llama/Llama-4-Scout-17B-16E-Instruct", + Name: "Llama-4-Scout-17B-16E-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 328000, + Output: 4096, + }, + }, + "hf:moonshotai/Kimi-K2-Instruct-0905": { + ID: "hf:moonshotai/Kimi-K2-Instruct-0905", + Name: "Kimi K2 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.2, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "hf:moonshotai/Kimi-K2-Thinking": { + ID: "hf:moonshotai/Kimi-K2-Thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "hf:openai/gpt-oss-120b": { + ID: "hf:openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "hf:zai-org/GLM-4.5": { + ID: "hf:zai-org/GLM-4.5", + Name: "GLM 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 96000, + }, + }, + "hf:zai-org/GLM-4.6": { + ID: "hf:zai-org/GLM-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "hf:zai-org/GLM-4.7": { + ID: "hf:zai-org/GLM-4.7", + Name: "GLM 4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.19, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + }, + }, + "togetherai": { + ID: "togetherai", + Env: []string{"TOGETHER_API_KEY" }, + NPM: "@ai-sdk/togetherai", + Name: "Together AI", + Models: map[string]ModelInfo{ + "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8", + Name: "Qwen3 Coder 480B A35B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "deepseek-ai/DeepSeek-R1": { + ID: "deepseek-ai/DeepSeek-R1", + Name: "DeepSeek R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 7, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163839, + Output: 12288, + }, + }, + "deepseek-ai/DeepSeek-V3": { + ID: "deepseek-ai/DeepSeek-V3", + Name: "DeepSeek V3", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 1.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 12288, + }, + }, + "deepseek-ai/DeepSeek-V3-1": { + ID: "deepseek-ai/DeepSeek-V3-1", + Name: "DeepSeek V3.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1.7, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 12288, + }, + }, + "essentialai/Rnj-1-Instruct": { + ID: "essentialai/Rnj-1-Instruct", + Name: "Rnj-1 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 32768, + }, + }, + "meta-llama/Llama-3.3-70B-Instruct-Turbo": { + ID: "meta-llama/Llama-3.3-70B-Instruct-Turbo", + Name: "Llama 3.3 70B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.88, + Output: 0.88, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 66536, + }, + }, + "moonshotai/Kimi-K2-Instruct": { + ID: "moonshotai/Kimi-K2-Instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "moonshotai/Kimi-K2-Thinking": { + ID: "moonshotai/Kimi-K2-Thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.2, + Output: 4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 131072, + }, + }, + "zai-org/GLM-4.6": { + ID: "zai-org/GLM-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 32768, + }, + }, + }, + }, + "upstage": { + ID: "upstage", + Env: []string{"UPSTAGE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Upstage", + Models: map[string]ModelInfo{ + "solar-mini": { + ID: "solar-mini", + Name: "solar-mini", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 4096, + }, + }, + "solar-pro2": { + ID: "solar-pro2", + Name: "solar-pro2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 0.25, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 8192, + }, + }, + }, + }, + "v0": { + ID: "v0", + Env: []string{"V0_API_KEY" }, + NPM: "@ai-sdk/vercel", + Name: "v0", + Models: map[string]ModelInfo{ + "v0-1.0-md": { + ID: "v0-1.0-md", + Name: "v0-1.0-md", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "v0-1.5-lg": { + ID: "v0-1.5-lg", + Name: "v0-1.5-lg", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 512000, + Output: 32000, + }, + }, + "v0-1.5-md": { + ID: "v0-1.5-md", + Name: "v0-1.5-md", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + }, + }, + "venice": { + ID: "venice", + Env: []string{"VENICE_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Venice AI", + Models: map[string]ModelInfo{ + "claude-opus-45": { + ID: "claude-opus-45", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 6, + Output: 30, + CacheRead: &[]float64{0.6}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 50688, + }, + }, + "deepseek-v3.2": { + ID: "deepseek-v3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1, + CacheRead: &[]float64{0.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 40960, + }, + }, + "gemini-3-flash-preview": { + ID: "gemini-3-flash-preview", + Name: "Gemini 3 Flash Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 3.75, + CacheRead: &[]float64{0.07}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "gemini-3-pro-preview": { + ID: "gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 15, + CacheRead: &[]float64{0.625}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 50688, + }, + }, + "google-gemma-3-27b-it": { + ID: "google-gemma-3-27b-it", + Name: "Google Gemma 3 27B Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.12, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 50688, + }, + }, + "grok-41-fast": { + ID: "grok-41-fast", + Name: "Grok 4.1 Fast", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.25, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "grok-code-fast-1": { + ID: "grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1.87, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "hermes-3-llama-3.1-405b": { + ID: "hermes-3-llama-3.1-405b", + Name: "Hermes 3 Llama 3.1 405b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "kimi-k2-thinking": { + ID: "kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.75, + Output: 3.2, + CacheRead: &[]float64{0.375}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "llama-3.2-3b": { + ID: "llama-3.2-3b", + Name: "Llama 3.2 3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "llama-3.3-70b": { + ID: "llama-3.3-70b", + Name: "Llama 3.3 70B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 2.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "minimax-m21": { + ID: "minimax-m21", + Name: "MiniMax M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.04}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 50688, + }, + }, + "mistral-31-24b": { + ID: "mistral-31-24b", + Name: "Venice Medium", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai-gpt-52": { + ID: "openai-gpt-52", + Name: "GPT-5.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2.19, + Output: 17.5, + CacheRead: &[]float64{0.219}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "openai-gpt-oss-120b": { + ID: "openai-gpt-oss-120b", + Name: "OpenAI GPT OSS 120B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-235b-a22b-instruct-2507": { + ID: "qwen3-235b-a22b-instruct-2507", + Name: "Qwen 3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-235b-a22b-thinking-2507": { + ID: "qwen3-235b-a22b-thinking-2507", + Name: "Qwen 3 235B A22B Thinking 2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.45, + Output: 3.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "qwen3-4b": { + ID: "qwen3-4b", + Name: "Venice Small", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.05, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "qwen3-coder-480b-a35b-instruct": { + ID: "qwen3-coder-480b-a35b-instruct", + Name: "Qwen 3 Coder 480b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.75, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "qwen3-next-80b": { + ID: "qwen3-next-80b", + Name: "Qwen 3 Next 80b", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 65536, + }, + }, + "venice-uncensored": { + ID: "venice-uncensored", + Name: "Venice Uncensored 1.1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32768, + Output: 8192, + }, + }, + "zai-org-glm-4.6": { + ID: "zai-org-glm-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.85, + Output: 2.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 50688, + }, + }, + "zai-org-glm-4.6v": { + ID: "zai-org-glm-4.6v", + Name: "GLM 4.6V", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.39, + Output: 1.13, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "zai-org-glm-4.7": { + ID: "zai-org-glm-4.7", + Name: "GLM 4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.55, + Output: 2.65, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 202752, + Output: 50688, + }, + }, + }, + }, + "vercel": { + ID: "vercel", + Env: []string{"AI_GATEWAY_API_KEY" }, + NPM: "@ai-sdk/gateway", + Name: "Vercel AI Gateway", + Models: map[string]ModelInfo{ + "alibaba/qwen3-coder-plus": { + ID: "alibaba/qwen3-coder-plus", + Name: "Qwen3 Coder Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 1000000, + }, + }, + "alibaba/qwen3-max": { + ID: "alibaba/qwen3-max", + Name: "Qwen3 Max", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 32768, + }, + }, + "alibaba/qwen3-next-80b-a3b-instruct": { + ID: "alibaba/qwen3-next-80b-a3b-instruct", + Name: "Qwen3 Next 80B A3B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "alibaba/qwen3-next-80b-a3b-thinking": { + ID: "alibaba/qwen3-next-80b-a3b-thinking", + Name: "Qwen3 Next 80B A3B Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "alibaba/qwen3-vl-instruct": { + ID: "alibaba/qwen3-vl-instruct", + Name: "Qwen3 VL Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 2.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 129024, + }, + }, + "alibaba/qwen3-vl-thinking": { + ID: "alibaba/qwen3-vl-thinking", + Name: "Qwen3 VL Thinking", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.7, + Output: 8.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 129024, + }, + }, + "amazon/nova-lite": { + ID: "amazon/nova-lite", + Name: "Nova Lite", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.06, + Output: 0.24, + CacheRead: &[]float64{0.015}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 300000, + Output: 8192, + }, + }, + "amazon/nova-micro": { + ID: "amazon/nova-micro", + Name: "Nova Micro", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.035, + Output: 0.14, + CacheRead: &[]float64{0.00875}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "amazon/nova-pro": { + ID: "amazon/nova-pro", + Name: "Nova Pro", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 3.2, + CacheRead: &[]float64{0.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 300000, + Output: 8192, + }, + }, + "anthropic/claude-3-haiku": { + ID: "anthropic/claude-3-haiku", + Name: "Claude Haiku 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 1.25, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{0.3}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic/claude-3-opus": { + ID: "anthropic/claude-3-opus", + Name: "Claude Opus 3", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 4096, + }, + }, + "anthropic/claude-3.5-haiku": { + ID: "anthropic/claude-3.5-haiku", + Name: "Claude Haiku 3.5", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.8, + Output: 4, + CacheRead: &[]float64{0.08}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic/claude-3.5-sonnet": { + ID: "anthropic/claude-3.5-sonnet", + Name: "Claude Sonnet 3.5 v2", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 8192, + }, + }, + "anthropic/claude-3.7-sonnet": { + ID: "anthropic/claude-3.7-sonnet", + Name: "Claude Sonnet 3.7", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-4-1-opus": { + ID: "anthropic/claude-4-1-opus", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-4-opus": { + ID: "anthropic/claude-4-opus", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-4-sonnet": { + ID: "anthropic/claude-4-sonnet", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-4.5-sonnet": { + ID: "anthropic/claude-4.5-sonnet", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-haiku-4.5": { + ID: "anthropic/claude-haiku-4.5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 1.25, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-opus-4.5": { + ID: "anthropic/claude-opus-4.5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "deepseek/deepseek-r1": { + ID: "deepseek/deepseek-r1", + Name: "DeepSeek-R1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "deepseek/deepseek-r1-distill-llama-70b": { + ID: "deepseek/deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.75, + Output: 0.99, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "deepseek/deepseek-v3.1-terminus": { + ID: "deepseek/deepseek-v3.1-terminus", + Name: "DeepSeek V3.1 Terminus", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.27, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 8192, + }, + }, + "deepseek/deepseek-v3.2-exp": { + ID: "deepseek/deepseek-v3.2-exp", + Name: "DeepSeek V3.2 Exp", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 8192, + }, + }, + "deepseek/deepseek-v3.2-exp-thinking": { + ID: "deepseek/deepseek-v3.2-exp-thinking", + Name: "DeepSeek V3.2 Exp Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 8192, + }, + }, + "google/gemini-2.0-flash": { + ID: "google/gemini-2.0-flash", + Name: "Gemini 2.0 Flash", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "google/gemini-2.0-flash-lite": { + ID: "google/gemini-2.0-flash-lite", + Name: "Gemini 2.0 Flash Lite", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.075, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 8192, + }, + }, + "google/gemini-2.5-flash": { + ID: "google/gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-flash-lite": { + ID: "google/gemini-2.5-flash-lite", + Name: "Gemini 2.5 Flash Lite", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-flash-lite-preview-09-2025": { + ID: "google/gemini-2.5-flash-lite-preview-09-2025", + Name: "Gemini 2.5 Flash Lite Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.025}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-flash-preview-09-2025": { + ID: "google/gemini-2.5-flash-preview-09-2025", + Name: "Gemini 2.5 Flash Preview 09-25", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: &[]float64{0.383}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-2.5-pro": { + ID: "google/gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-pro-preview": { + ID: "google/gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "meta/llama-3.3-70b": { + ID: "meta/llama-3.3-70b", + Name: "Llama-3.3-70B-Instruct", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-4-maverick": { + ID: "meta/llama-4-maverick", + Name: "Llama-4-Maverick-17B-128E-Instruct-FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "meta/llama-4-scout": { + ID: "meta/llama-4-scout", + Name: "Llama-4-Scout-17B-16E-Instruct-FP8", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "minimax/minimax-m2": { + ID: "minimax/minimax-m2", + Name: "MiniMax M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{0.38}[0], + }, + Limit: Limit{ + Context: 205000, + Output: 131072, + }, + }, + "mistral/codestral": { + ID: "mistral/codestral", + Name: "Codestral", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 4096, + }, + }, + "mistral/magistral-medium": { + ID: "mistral/magistral-medium", + Name: "Magistral Medium", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "mistral/magistral-small": { + ID: "mistral/magistral-small", + Name: "Magistral Small", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral/ministral-3b": { + ID: "mistral/ministral-3b", + Name: "Ministral 3B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.04, + Output: 0.04, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral/ministral-8b": { + ID: "mistral/ministral-8b", + Name: "Ministral 8B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral/mistral-large": { + ID: "mistral/mistral-large", + Name: "Mistral Large", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 262144, + }, + }, + "mistral/mistral-small": { + ID: "mistral/mistral-small", + Name: "Mistral Small", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "mistral/mixtral-8x22b-instruct": { + ID: "mistral/mixtral-8x22b-instruct", + Name: "Mixtral 8x22B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 64000, + }, + }, + "mistral/pixtral-12b": { + ID: "mistral/pixtral-12b", + Name: "Pixtral 12B", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "mistral/pixtral-large": { + ID: "mistral/pixtral-large", + Name: "Pixtral Large", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 6, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 128000, + }, + }, + "moonshotai/kimi-k2": { + ID: "moonshotai/kimi-k2", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 16384, + }, + }, + "morph/morph-v3-fast": { + ID: "morph/morph-v3-fast", + Name: "Morph v3 Fast", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.8, + Output: 1.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 16000, + Output: 16000, + }, + }, + "morph/morph-v3-large": { + ID: "morph/morph-v3-large", + Name: "Morph v3 Large", + Attachment: false, + Reasoning: false, + Temperature: false, + Cost: Cost{ + Input: 0.9, + Output: 1.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 32000, + Output: 32000, + }, + }, + "openai/gpt-4-turbo": { + ID: "openai/gpt-4-turbo", + Name: "GPT-4 Turbo", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 10, + Output: 30, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "openai/gpt-4.1": { + ID: "openai/gpt-4.1", + Name: "GPT-4.1", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4.1-mini": { + ID: "openai/gpt-4.1-mini", + Name: "GPT-4.1 mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.4, + Output: 1.6, + CacheRead: &[]float64{0.1}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4.1-nano": { + ID: "openai/gpt-4.1-nano", + Name: "GPT-4.1 nano", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1047576, + Output: 32768, + }, + }, + "openai/gpt-4o": { + ID: "openai/gpt-4o", + Name: "GPT-4o", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2.5, + Output: 10, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-4o-mini": { + ID: "openai/gpt-4o-mini", + Name: "GPT-4o mini", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.15, + Output: 0.6, + CacheRead: &[]float64{0.08}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + "openai/gpt-5": { + ID: "openai/gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-codex": { + ID: "openai/gpt-5-codex", + Name: "GPT-5-Codex", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.125}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-mini": { + ID: "openai/gpt-5-mini", + Name: "GPT-5 Mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-5-nano": { + ID: "openai/gpt-5-nano", + Name: "GPT-5 Nano", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 0.05, + Output: 0.4, + CacheRead: &[]float64{0.01}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 128000, + }, + }, + "openai/gpt-oss-120b": { + ID: "openai/gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/gpt-oss-20b": { + ID: "openai/gpt-oss-20b", + Name: "GPT OSS 20B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.3, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 32768, + }, + }, + "openai/o1": { + ID: "openai/o1", + Name: "o1", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 15, + Output: 60, + CacheRead: &[]float64{7.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3": { + ID: "openai/o3", + Name: "o3", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: &[]float64{0.5}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o3-mini": { + ID: "openai/o3-mini", + Name: "o3-mini", + Attachment: false, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.55}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "openai/o4-mini": { + ID: "openai/o4-mini", + Name: "o4-mini", + Attachment: true, + Reasoning: true, + Temperature: false, + Cost: Cost{ + Input: 1.1, + Output: 4.4, + CacheRead: &[]float64{0.28}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 100000, + }, + }, + "perplexity/sonar": { + ID: "perplexity/sonar", + Name: "Sonar", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 8000, + }, + }, + "perplexity/sonar-pro": { + ID: "perplexity/sonar-pro", + Name: "Sonar Pro", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 8000, + }, + }, + "perplexity/sonar-reasoning": { + ID: "perplexity/sonar-reasoning", + Name: "Sonar Reasoning", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 8000, + }, + }, + "perplexity/sonar-reasoning-pro": { + ID: "perplexity/sonar-reasoning-pro", + Name: "Sonar Reasoning Pro", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 127000, + Output: 8000, + }, + }, + "vercel/v0-1.0-md": { + ID: "vercel/v0-1.0-md", + Name: "v0-1.0-md", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "vercel/v0-1.5-md": { + ID: "vercel/v0-1.5-md", + Name: "v0-1.5-md", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32000, + }, + }, + "xai/grok-2": { + ID: "xai/grok-2", + Name: "Grok 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-2-vision": { + ID: "xai/grok-2-vision", + Name: "Grok 2 Vision", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 4096, + }, + }, + "xai/grok-3": { + ID: "xai/grok-3", + Name: "Grok 3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-3-fast": { + ID: "xai/grok-3-fast", + Name: "Grok 3 Fast", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-3-mini": { + ID: "xai/grok-3-mini", + Name: "Grok 3 Mini", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-3-mini-fast": { + ID: "xai/grok-3-mini-fast", + Name: "Grok 3 Mini Fast", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 4, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "xai/grok-4": { + ID: "xai/grok-4", + Name: "Grok 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "xai/grok-4-fast": { + ID: "xai/grok-4-fast", + Name: "Grok 4 Fast", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "xai/grok-4-fast-non-reasoning": { + ID: "xai/grok-4-fast-non-reasoning", + Name: "Grok 4 Fast (Non-Reasoning)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "xai/grok-code-fast-1": { + ID: "xai/grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 10000, + }, + }, + "zai/glm-4.5": { + ID: "zai/glm-4.5", + Name: "GLM 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 96000, + }, + }, + "zai/glm-4.5-air": { + ID: "zai/glm-4.5-air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 96000, + }, + }, + "zai/glm-4.5v": { + ID: "zai/glm-4.5v", + Name: "GLM 4.5V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 1.8, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 66000, + Output: 16000, + }, + }, + "zai/glm-4.6": { + ID: "zai/glm-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 96000, + }, + }, + }, + }, + "vultr": { + ID: "vultr", + Env: []string{"VULTR_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Vultr", + Models: map[string]ModelInfo{ + "deepseek-r1-distill-llama-70b": { + ID: "deepseek-r1-distill-llama-70b", + Name: "DeepSeek R1 Distill Llama 70B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 121808, + Output: 8192, + }, + }, + "deepseek-r1-distill-qwen-32b": { + ID: "deepseek-r1-distill-qwen-32b", + Name: "DeepSeek R1 Distill Qwen 32B", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 121808, + Output: 8192, + }, + }, + "gpt-oss-120b": { + ID: "gpt-oss-120b", + Name: "GPT OSS 120B", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 121808, + Output: 8192, + }, + }, + "kimi-k2-instruct": { + ID: "kimi-k2-instruct", + Name: "Kimi K2 Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 58904, + Output: 4096, + }, + }, + "qwen2.5-coder-32b-instruct": { + ID: "qwen2.5-coder-32b-instruct", + Name: "Qwen2.5 Coder 32B Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.2, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 12952, + Output: 2048, + }, + }, + }, + }, + "wandb": { + ID: "wandb", + Env: []string{"WANDB_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Weights & Biases", + Models: map[string]ModelInfo{ + "Qwen/Qwen3-235B-A22B-Instruct-2507": { + ID: "Qwen/Qwen3-235B-A22B-Instruct-2507", + Name: "Qwen3 235B A22B Instruct 2507", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-235B-A22B-Thinking-2507": { + ID: "Qwen/Qwen3-235B-A22B-Thinking-2507", + Name: "Qwen3-235B-A22B-Thinking-2507", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.1, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 131072, + }, + }, + "Qwen/Qwen3-Coder-480B-A35B-Instruct": { + ID: "Qwen/Qwen3-Coder-480B-A35B-Instruct", + Name: "Qwen3-Coder-480B-A35B-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 1.5, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 66536, + }, + }, + "deepseek-ai/DeepSeek-R1-0528": { + ID: "deepseek-ai/DeepSeek-R1-0528", + Name: "DeepSeek-R1-0528", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 5.4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 161000, + Output: 163840, + }, + }, + "deepseek-ai/DeepSeek-V3-0324": { + ID: "deepseek-ai/DeepSeek-V3-0324", + Name: "DeepSeek-V3-0324", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.14, + Output: 2.75, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 161000, + Output: 8192, + }, + }, + "meta-llama/Llama-3.1-8B-Instruct": { + ID: "meta-llama/Llama-3.1-8B-Instruct", + Name: "Meta-Llama-3.1-8B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.22, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta-llama/Llama-3.3-70B-Instruct": { + ID: "meta-llama/Llama-3.3-70B-Instruct", + Name: "Llama-3.3-70B-Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.71, + Output: 0.71, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "meta-llama/Llama-4-Scout-17B-16E-Instruct": { + ID: "meta-llama/Llama-4-Scout-17B-16E-Instruct", + Name: "Llama 4 Scout 17B 16E Instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 0.66, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 64000, + Output: 8192, + }, + }, + "microsoft/Phi-4-mini-instruct": { + ID: "microsoft/Phi-4-mini-instruct", + Name: "Phi-4-mini-instruct", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.08, + Output: 0.35, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 4096, + }, + }, + "moonshotai/Kimi-K2-Instruct": { + ID: "moonshotai/Kimi-K2-Instruct", + Name: "Kimi-K2-Instruct", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.35, + Output: 4, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 16384, + }, + }, + }, + }, + "xai": { + ID: "xai", + Env: []string{"XAI_API_KEY" }, + NPM: "@ai-sdk/xai", + Name: "xAI", + Models: map[string]ModelInfo{ + "grok-2": { + ID: "grok-2", + Name: "Grok 2", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-2-1212": { + ID: "grok-2-1212", + Name: "Grok 2 (1212)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-2-latest": { + ID: "grok-2-latest", + Name: "Grok 2 Latest", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-2-vision": { + ID: "grok-2-vision", + Name: "Grok 2 Vision", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 4096, + }, + }, + "grok-2-vision-1212": { + ID: "grok-2-vision-1212", + Name: "Grok 2 Vision (1212)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 4096, + }, + }, + "grok-2-vision-latest": { + ID: "grok-2-vision-latest", + Name: "Grok 2 Vision Latest", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 10, + CacheRead: &[]float64{2}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 8192, + Output: 4096, + }, + }, + "grok-3": { + ID: "grok-3", + Name: "Grok 3", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-fast": { + ID: "grok-3-fast", + Name: "Grok 3 Fast", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-fast-latest": { + ID: "grok-3-fast-latest", + Name: "Grok 3 Fast Latest", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{1.25}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-latest": { + ID: "grok-3-latest", + Name: "Grok 3 Latest", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-mini": { + ID: "grok-3-mini", + Name: "Grok 3 Mini", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-mini-fast": { + ID: "grok-3-mini-fast", + Name: "Grok 3 Mini Fast", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 4, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-mini-fast-latest": { + ID: "grok-3-mini-fast-latest", + Name: "Grok 3 Mini Fast Latest", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 4, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-3-mini-latest": { + ID: "grok-3-mini-latest", + Name: "Grok 3 Mini Latest", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.5, + CacheRead: &[]float64{0.075}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 131072, + Output: 8192, + }, + }, + "grok-4": { + ID: "grok-4", + Name: "Grok 4", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "grok-4-1-fast": { + ID: "grok-4-1-fast", + Name: "Grok 4.1 Fast", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, + "grok-4-1-fast-non-reasoning": { + ID: "grok-4-1-fast-non-reasoning", + Name: "Grok 4.1 Fast (Non-Reasoning)", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 30000, + }, + }, "grok-4-fast": { ID: "grok-4-fast", Name: "Grok 4 Fast", @@ -15643,9 +33509,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 0.5, - CacheRead: &[]float64{0.05}[0], + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15660,9 +33526,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: false, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 0.5, - CacheRead: &[]float64{0.05}[0], + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15677,9 +33543,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: false, Temperature: true, Cost: Cost{ - Input: 5, - Output: 15, - CacheRead: &[]float64{5}[0], + Input: 5, + Output: 15, + CacheRead: &[]float64{5}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15694,9 +33560,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 1.5, - CacheRead: &[]float64{0.02}[0], + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15711,9 +33577,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: false, Temperature: true, Cost: Cost{ - Input: 5, - Output: 15, - CacheRead: &[]float64{5}[0], + Input: 5, + Output: 15, + CacheRead: &[]float64{5}[0], CacheWrite: nil, }, Limit: Limit{ @@ -15723,9 +33589,34 @@ func GetModelsData() map[string]ProviderInfo { }, }, }, + "xiaomi": { + ID: "xiaomi", + Env: []string{"XIAOMI_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "Xiaomi", + Models: map[string]ModelInfo{ + "mimo-v2-flash": { + ID: "mimo-v2-flash", + Name: "MiMo-V2-Flash", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.07, + Output: 0.21, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 32000, + }, + }, + }, + }, "zai": { ID: "zai", - Env: []string{"ZHIPU_API_KEY"}, + Env: []string{"ZHIPU_API_KEY" }, NPM: "@ai-sdk/openai-compatible", Name: "Z.AI", Models: map[string]ModelInfo{ @@ -15736,9 +33627,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: &[]float64{0.11}[0], + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15753,9 +33644,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 1.1, - CacheRead: &[]float64{0.03}[0], + Input: 0.2, + Output: 1.1, + CacheRead: &[]float64{0.03}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15770,9 +33661,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15782,14 +33673,14 @@ func GetModelsData() map[string]ProviderInfo { }, "glm-4.5v": { ID: "glm-4.5v", - Name: "GLM 4.5V", + Name: "GLM-4.5V", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 1.8, - CacheRead: nil, + Input: 0.6, + Output: 1.8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -15804,9 +33695,43 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: &[]float64{0.11}[0], + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "glm-4.6v": { + ID: "glm-4.6v", + Name: "GLM-4.6V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "glm-4.7": { + ID: "glm-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15818,7 +33743,7 @@ func GetModelsData() map[string]ProviderInfo { }, "zai-coding-plan": { ID: "zai-coding-plan", - Env: []string{"ZHIPU_API_KEY"}, + Env: []string{"ZHIPU_API_KEY" }, NPM: "@ai-sdk/openai-compatible", Name: "Z.AI Coding Plan", Models: map[string]ModelInfo{ @@ -15829,9 +33754,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15846,9 +33771,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15863,9 +33788,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15875,14 +33800,14 @@ func GetModelsData() map[string]ProviderInfo { }, "glm-4.5v": { ID: "glm-4.5v", - Name: "GLM 4.5V", + Name: "GLM-4.5V", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0, + Output: 0, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -15897,9 +33822,43 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "glm-4.6v": { + ID: "glm-4.6v", + Name: "GLM-4.6V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "glm-4.7": { + ID: "glm-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15909,9 +33868,884 @@ func GetModelsData() map[string]ProviderInfo { }, }, }, + "zenmux": { + ID: "zenmux", + Env: []string{"ZENMUX_API_KEY" }, + NPM: "@ai-sdk/openai-compatible", + Name: "ZenMux", + Models: map[string]ModelInfo{ + "anthropic/claude-haiku-4.5": { + ID: "anthropic/claude-haiku-4.5", + Name: "Claude Haiku 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-opus-4": { + ID: "anthropic/claude-opus-4", + Name: "Claude Opus 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-opus-4.1": { + ID: "anthropic/claude-opus-4.1", + Name: "Claude Opus 4.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 15, + Output: 75, + CacheRead: &[]float64{1.5}[0], + CacheWrite: &[]float64{18.75}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 32000, + }, + }, + "anthropic/claude-opus-4.5": { + ID: "anthropic/claude-opus-4.5", + Name: "Claude Opus 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 5, + Output: 25, + CacheRead: &[]float64{0.5}[0], + CacheWrite: &[]float64{6.25}[0], + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4": { + ID: "anthropic/claude-sonnet-4", + Name: "Claude Sonnet 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "anthropic/claude-sonnet-4.5": { + ID: "anthropic/claude-sonnet-4.5", + Name: "Claude Sonnet 4.5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.3}[0], + CacheWrite: &[]float64{3.75}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "baidu/ernie-5.0-thinking-preview": { + ID: "baidu/ernie-5.0-thinking-preview", + Name: "ERNIE-5.0-Thinking-Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.84, + Output: 3.37, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek/deepseek-chat": { + ID: "deepseek/deepseek-chat", + Name: "DeepSeek-V3.2 (Non-thinking Mode)", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek/deepseek-reasoner": { + ID: "deepseek/deepseek-reasoner", + Name: "DeepSeek-V3.2 (Thinking Mode)", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.42, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek/deepseek-v3.2": { + ID: "deepseek/deepseek-v3.2", + Name: "DeepSeek V3.2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 0.43, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "deepseek/deepseek-v3.2-exp": { + ID: "deepseek/deepseek-v3.2-exp", + Name: "DeepSeek-V3.2-Exp", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.22, + Output: 0.33, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 163840, + Output: 64000, + }, + }, + "google/gemini-2.5-flash": { + ID: "google/gemini-2.5-flash", + Name: "Gemini 2.5 Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 2.5, + CacheRead: &[]float64{0.07}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 64000, + }, + }, + "google/gemini-2.5-flash-lite": { + ID: "google/gemini-2.5-flash-lite", + Name: "Gemini 2.5 Flash Lite", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.1, + Output: 0.4, + CacheRead: &[]float64{0.03}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 64000, + }, + }, + "google/gemini-2.5-pro": { + ID: "google/gemini-2.5-pro", + Name: "Gemini 2.5 Pro", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.31}[0], + CacheWrite: &[]float64{4.5}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 65536, + }, + }, + "google/gemini-3-flash-preview": { + ID: "google/gemini-3-flash-preview", + Name: "Gemini 3 Flash Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.5, + Output: 3, + CacheRead: &[]float64{0.05}[0], + CacheWrite: &[]float64{1}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 64000, + }, + }, + "google/gemini-3-flash-preview-free": { + ID: "google/gemini-3-flash-preview-free", + Name: "Gemini 3 Flash Preview Free", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 1048576, + Output: 64000, + }, + }, + "google/gemini-3-pro-preview": { + ID: "google/gemini-3-pro-preview", + Name: "Gemini 3 Pro Preview", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 2, + Output: 12, + CacheRead: &[]float64{0.2}[0], + CacheWrite: &[]float64{4.5}[0], + }, + Limit: Limit{ + Context: 1048576, + Output: 64000, + }, + }, + "inclusionai/ling-1t": { + ID: "inclusionai/ling-1t", + Name: "Ling-1T", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 2.24, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "inclusionai/ring-1t": { + ID: "inclusionai/ring-1t", + Name: "Ring-1T", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.56, + Output: 2.24, + CacheRead: &[]float64{0.11}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "kuaishou/kat-coder-pro-v1": { + ID: "kuaishou/kat-coder-pro-v1", + Name: "KAT-Coder-Pro-V1", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "kuaishou/kat-coder-pro-v1-free": { + ID: "kuaishou/kat-coder-pro-v1-free", + Name: "KAT-Coder-Pro-V1 Free", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "minimax/minimax-m2": { + ID: "minimax/minimax-m2", + Name: "MiniMax M2", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 64000, + }, + }, + "minimax/minimax-m2.1": { + ID: "minimax/minimax-m2.1", + Name: "MiniMax M2.1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 1.2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 204800, + Output: 64000, + }, + }, + "moonshotai/kimi-k2-0905": { + ID: "moonshotai/kimi-k2-0905", + Name: "Kimi K2 0905", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262100, + Output: 64000, + }, + }, + "moonshotai/kimi-k2-thinking": { + ID: "moonshotai/kimi-k2-thinking", + Name: "Kimi K2 Thinking", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.5, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 64000, + }, + }, + "moonshotai/kimi-k2-thinking-turbo": { + ID: "moonshotai/kimi-k2-thinking-turbo", + Name: "Kimi K2 Thinking Turbo", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.15, + Output: 8, + CacheRead: &[]float64{0.15}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 64000, + }, + }, + "openai/gpt-5": { + ID: "openai/gpt-5", + Name: "GPT-5", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 64000, + }, + }, + "openai/gpt-5-codex": { + ID: "openai/gpt-5-codex", + Name: "GPT-5 Codex", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 64000, + }, + }, + "openai/gpt-5.1": { + ID: "openai/gpt-5.1", + Name: "GPT-5.1", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 64000, + }, + }, + "openai/gpt-5.1-chat": { + ID: "openai/gpt-5.1-chat", + Name: "GPT-5.1 Chat", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "openai/gpt-5.1-codex": { + ID: "openai/gpt-5.1-codex", + Name: "GPT-5.1-Codex", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.25, + Output: 10, + CacheRead: &[]float64{0.13}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 64000, + }, + }, + "openai/gpt-5.1-codex-mini": { + ID: "openai/gpt-5.1-codex-mini", + Name: "GPT-5.1-Codex-Mini", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.25, + Output: 2, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 64000, + }, + }, + "openai/gpt-5.2": { + ID: "openai/gpt-5.2", + Name: "GPT-5.2", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 1.75, + Output: 14, + CacheRead: &[]float64{0.17}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 400000, + Output: 64000, + }, + }, + "qwen/qwen3-coder-plus": { + ID: "qwen/qwen3-coder-plus", + Name: "Qwen3-Coder-Plus", + Attachment: false, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 1, + Output: 5, + CacheRead: &[]float64{0.1}[0], + CacheWrite: &[]float64{1.25}[0], + }, + Limit: Limit{ + Context: 1000000, + Output: 64000, + }, + }, + "stepfun/step-3": { + ID: "stepfun/step-3", + Name: "Step-3", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.21, + Output: 0.57, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 65536, + Output: 64000, + }, + }, + "volcengine/doubao-seed-1.8": { + ID: "volcengine/doubao-seed-1.8", + Name: "Doubao-Seed-1.8", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.28, + CacheRead: &[]float64{0.02}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "volcengine/doubao-seed-code": { + ID: "volcengine/doubao-seed-code", + Name: "Doubao-Seed-Code", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.17, + Output: 1.12, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "x-ai/grok-4": { + ID: "x-ai/grok-4", + Name: "Grok 4", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 3, + Output: 15, + CacheRead: &[]float64{0.75}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "x-ai/grok-4-fast": { + ID: "x-ai/grok-4-fast", + Name: "Grok 4 Fast", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 64000, + }, + }, + "x-ai/grok-4.1-fast": { + ID: "x-ai/grok-4.1-fast", + Name: "Grok 4.1 Fast", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 64000, + }, + }, + "x-ai/grok-4.1-fast-non-reasoning": { + ID: "x-ai/grok-4.1-fast-non-reasoning", + Name: "Grok 4.1 Fast Non Reasoning", + Attachment: true, + Reasoning: false, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 0.5, + CacheRead: &[]float64{0.05}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 2000000, + Output: 64000, + }, + }, + "x-ai/grok-code-fast-1": { + ID: "x-ai/grok-code-fast-1", + Name: "Grok Code Fast 1", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.2, + Output: 1.5, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 256000, + Output: 64000, + }, + }, + "xiaomi/mimo-v2-flash": { + ID: "xiaomi/mimo-v2-flash", + Name: "MiMo-V2-Flash", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 64000, + }, + }, + "xiaomi/mimo-v2-flash-free": { + ID: "xiaomi/mimo-v2-flash-free", + Name: "MiMo-V2-Flash Free", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 262144, + Output: 64000, + }, + }, + "z-ai/glm-4.5": { + ID: "z-ai/glm-4.5", + Name: "GLM 4.5", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.54, + CacheRead: &[]float64{0.07}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "z-ai/glm-4.5-air": { + ID: "z-ai/glm-4.5-air", + Name: "GLM 4.5 Air", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.11, + Output: 0.56, + CacheRead: &[]float64{0.02}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 64000, + }, + }, + "z-ai/glm-4.6": { + ID: "z-ai/glm-4.6", + Name: "GLM 4.6", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.35, + Output: 1.54, + CacheRead: &[]float64{0.07}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 128000, + }, + }, + "z-ai/glm-4.6v": { + ID: "z-ai/glm-4.6v", + Name: "GLM 4.6V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.14, + Output: 0.42, + CacheRead: &[]float64{0.03}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "z-ai/glm-4.6v-flash": { + ID: "z-ai/glm-4.6v-flash", + Name: "GLM 4.6V FlashX", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "z-ai/glm-4.6v-flash-free": { + ID: "z-ai/glm-4.6v-flash-free", + Name: "GLM 4.6V Flash (Free)", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + "z-ai/glm-4.7": { + ID: "z-ai/glm-4.7", + Name: "GLM 4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.28, + Output: 1.14, + CacheRead: &[]float64{0.06}[0], + CacheWrite: nil, + }, + Limit: Limit{ + Context: 200000, + Output: 64000, + }, + }, + }, + }, "zhipuai": { ID: "zhipuai", - Env: []string{"ZHIPU_API_KEY"}, + Env: []string{"ZHIPU_API_KEY" }, NPM: "@ai-sdk/openai-compatible", Name: "Zhipu AI", Models: map[string]ModelInfo{ @@ -15922,9 +34756,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: &[]float64{0.11}[0], + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15939,9 +34773,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.2, - Output: 1.1, - CacheRead: &[]float64{0.03}[0], + Input: 0.2, + Output: 1.1, + CacheRead: &[]float64{0.03}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15956,9 +34790,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -15968,14 +34802,14 @@ func GetModelsData() map[string]ProviderInfo { }, "glm-4.5v": { ID: "glm-4.5v", - Name: "GLM 4.5V", + Name: "GLM-4.5V", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 1.8, - CacheRead: nil, + Input: 0.6, + Output: 1.8, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -15990,9 +34824,60 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0.6, - Output: 2.2, - CacheRead: &[]float64{0.11}[0], + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "glm-4.6v": { + ID: "glm-4.6v", + Name: "GLM-4.6V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.3, + Output: 0.9, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "glm-4.6v-flash": { + ID: "glm-4.6v-flash", + Name: "GLM-4.6V-Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "glm-4.7": { + ID: "glm-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0.6, + Output: 2.2, + CacheRead: &[]float64{0.11}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -16004,7 +34889,7 @@ func GetModelsData() map[string]ProviderInfo { }, "zhipuai-coding-plan": { ID: "zhipuai-coding-plan", - Env: []string{"ZHIPU_API_KEY"}, + Env: []string{"ZHIPU_API_KEY" }, NPM: "@ai-sdk/openai-compatible", Name: "Zhipu AI Coding Plan", Models: map[string]ModelInfo{ @@ -16015,9 +34900,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -16032,9 +34917,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -16049,9 +34934,9 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ @@ -16061,14 +34946,14 @@ func GetModelsData() map[string]ProviderInfo { }, "glm-4.5v": { ID: "glm-4.5v", - Name: "GLM 4.5V", + Name: "GLM-4.5V", Attachment: true, Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: nil, + Input: 0, + Output: 0, + CacheRead: nil, CacheWrite: nil, }, Limit: Limit{ @@ -16083,9 +34968,60 @@ func GetModelsData() map[string]ProviderInfo { Reasoning: true, Temperature: true, Cost: Cost{ - Input: 0, - Output: 0, - CacheRead: &[]float64{0}[0], + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], + CacheWrite: &[]float64{0}[0], + }, + Limit: Limit{ + Context: 204800, + Output: 131072, + }, + }, + "glm-4.6v": { + ID: "glm-4.6v", + Name: "GLM-4.6V", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "glm-4.6v-flash": { + ID: "glm-4.6v-flash", + Name: "GLM-4.6V-Flash", + Attachment: true, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: nil, + CacheWrite: nil, + }, + Limit: Limit{ + Context: 128000, + Output: 32768, + }, + }, + "glm-4.7": { + ID: "glm-4.7", + Name: "GLM-4.7", + Attachment: false, + Reasoning: true, + Temperature: true, + Cost: Cost{ + Input: 0, + Output: 0, + CacheRead: &[]float64{0}[0], CacheWrite: &[]float64{0}[0], }, Limit: Limit{ diff --git a/internal/models/providers.go b/internal/models/providers.go index 4f2caedc..8c141fd4 100644 --- a/internal/models/providers.go +++ b/internal/models/providers.go @@ -19,7 +19,6 @@ import ( "github.com/mark3labs/mcphost/internal/models/anthropic" "github.com/mark3labs/mcphost/internal/models/openai" "github.com/mark3labs/mcphost/internal/ui/progress" - "github.com/ollama/ollama/api" "google.golang.org/genai" "github.com/mark3labs/mcphost/internal/auth" @@ -218,6 +217,12 @@ func CreateProvider(ctx context.Context, config *ProviderConfig) (*ProviderResul return nil, err } return &ProviderResult{Model: model, Message: ""}, nil + case "google-vertex-anthropic": + model, err := createVertexAnthropicProvider(ctx, config, modelName) + if err != nil { + return nil, err + } + return &ProviderResult{Model: model, Message: ""}, nil default: return nil, fmt.Errorf("unsupported provider: %s", provider) } @@ -335,6 +340,67 @@ func createAnthropicProvider(ctx context.Context, config *ProviderConfig, modelN claudeConfig.Temperature = config.Temperature } + if config.TopP != nil && *config.TopP != 0.95 { + claudeConfig.TopP = config.TopP + } + + if config.TopK != nil { + claudeConfig.TopK = config.TopK + } + + if len(config.StopSequences) > 0 { + claudeConfig.StopSequences = config.StopSequences + } + + return anthropic.NewCustomChatModel(ctx, claudeConfig) +} + +func createVertexAnthropicProvider(ctx context.Context, config *ProviderConfig, modelName string) (model.ToolCallingChatModel, error) { + projectID := os.Getenv("GOOGLE_VERTEX_PROJECT") + if projectID == "" { + projectID = os.Getenv("ANTHROPIC_VERTEX_PROJECT_ID") + } + if projectID == "" { + projectID = os.Getenv("GOOGLE_CLOUD_PROJECT") + } + if projectID == "" { + projectID = os.Getenv("GCLOUD_PROJECT") + } + if projectID == "" { + projectID = os.Getenv("CLOUDSDK_CORE_PROJECT") + } + if projectID == "" { + return nil, fmt.Errorf("Google Vertex project ID not provided. Set ANTHROPIC_VERTEX_PROJECT_ID, GOOGLE_CLOUD_PROJECT, or GCLOUD_PROJECT environment variable") + } + + region := os.Getenv("GOOGLE_VERTEX_LOCATION") + if region == "" { + region = os.Getenv("ANTHROPIC_VERTEX_REGION") + } + if region == "" { + region = os.Getenv("CLOUD_ML_REGION") + } + if region == "" { + region = "global" + } + + maxTokens := config.MaxTokens + if maxTokens == 0 { + maxTokens = 4096 // Default value + } + + claudeConfig := &einoclaude.Config{ + ByVertex: true, + VertexProjectID: projectID, + VertexRegion: region, + Model: modelName, + MaxTokens: maxTokens, + } + + if config.Temperature != nil { + claudeConfig.Temperature = config.Temperature + } + if config.TopP != nil { claudeConfig.TopP = config.TopP } @@ -473,7 +539,7 @@ func createGoogleProvider(ctx context.Context, config *ProviderConfig, modelName type OllamaLoadingResult struct { // Options contains the actual Ollama options used for loading // May differ from requested options if fallback occurred (e.g., CPU instead of GPU) - Options *api.Options + Options *ollama.Options // Message describes the loading result // Example: "Model loaded successfully on GPU" or @@ -482,7 +548,7 @@ type OllamaLoadingResult struct { } // loadOllamaModelWithFallback loads an Ollama model with GPU settings and automatic CPU fallback -func loadOllamaModelWithFallback(ctx context.Context, baseURL, modelName string, options *api.Options, tlsSkipVerify bool) (*OllamaLoadingResult, error) { +func loadOllamaModelWithFallback(ctx context.Context, baseURL, modelName string, options *ollama.Options, tlsSkipVerify bool) (*OllamaLoadingResult, error) { client := createHTTPClientWithTLSConfig(tlsSkipVerify) // Phase 1: Check if model exists locally @@ -590,7 +656,7 @@ func pullOllamaModelWithProgress(ctx context.Context, client *http.Client, baseU } // loadOllamaModelWithOptions loads a model with specific options using a warmup request -func loadOllamaModelWithOptions(ctx context.Context, client *http.Client, baseURL, modelName string, options *api.Options) (*api.Options, error) { +func loadOllamaModelWithOptions(ctx context.Context, client *http.Client, baseURL, modelName string, options *ollama.Options) (*ollama.Options, error) { // Create a copy of options for warmup to avoid modifying the original warmupOptions := *options warmupOptions.NumPredict = 1 // Limit response length for warmup @@ -667,8 +733,8 @@ func createOllamaProviderWithResult(ctx context.Context, config *ProviderConfig, baseURL = config.ProviderURL } - // Set up options for Ollama using the api.Options struct - options := &api.Options{} + // Set up options for Ollama using the ollama.Options struct + options := &ollama.Options{} if config.Temperature != nil { options.Temperature = *config.Temperature @@ -700,7 +766,7 @@ func createOllamaProviderWithResult(ctx context.Context, config *ProviderConfig, } // Create a clean copy of options for the final model - finalOptions := &api.Options{} + finalOptions := &ollama.Options{} *finalOptions = *options // Copy all fields // Try to pre-load the model with GPU settings and automatic CPU fallback diff --git a/internal/models/registry.go b/internal/models/registry.go index 3ac93df3..53f67b1c 100644 --- a/internal/models/registry.go +++ b/internal/models/registry.go @@ -100,6 +100,19 @@ func (r *ModelsRegistry) ValidateEnvironment(provider string, apiKey string) err return nil } + // Add alternative environment variable names for google-vertex-anthropic + // These match the env vars checked by eino-claude and other tools + if provider == "google-vertex-anthropic" { + envVars = append(envVars, + "ANTHROPIC_VERTEX_PROJECT_ID", + "GOOGLE_CLOUD_PROJECT", + "GCLOUD_PROJECT", + "CLOUDSDK_CORE_PROJECT", + "ANTHROPIC_VERTEX_REGION", + "CLOUD_ML_REGION", + ) + } + // Check if at least one environment variable is set var foundVar bool for _, envVar := range envVars { diff --git a/internal/tools/mcp.go b/internal/tools/mcp.go index 2da192d5..9a0e2c73 100644 --- a/internal/tools/mcp.go +++ b/internal/tools/mcp.go @@ -11,7 +11,7 @@ import ( "github.com/cloudwego/eino/components/model" "github.com/cloudwego/eino/components/tool" "github.com/cloudwego/eino/schema" - "github.com/getkin/kin-openapi/openapi3" + "github.com/eino-contrib/jsonschema" "github.com/mark3labs/mcp-go/client" "github.com/mark3labs/mcp-go/client/transport" "github.com/mark3labs/mcp-go/mcp" @@ -221,7 +221,14 @@ func (m *MCPToolManager) loadServerTools(ctx context.Context, serverName string, if err != nil { return fmt.Errorf("conv mcp tool input schema fail(marshal): %w, tool name: %s", err, mcpTool.Name) } - inputSchema := &openapi3.Schema{} + + // Fix for JSON Schema draft-07 vs draft-04 compatibility: + // Chrome DevTools MCP uses draft-07 where exclusiveMinimum/exclusiveMaximum are numbers, + // but kin-openapi (OpenAPI 3.0) expects them as booleans (draft-04 format). + // Pre-process the schema to convert numeric exclusive bounds to boolean format. + marshaledInputSchema = convertExclusiveBoundsToBoolean(marshaledInputSchema) + + inputSchema := &jsonschema.Schema{} err = sonic.Unmarshal(marshaledInputSchema, inputSchema) if err != nil { return fmt.Errorf("conv mcp tool input schema fail(unmarshal): %w, tool name: %s", err, mcpTool.Name) @@ -231,7 +238,7 @@ func (m *MCPToolManager) loadServerTools(ctx context.Context, serverName string, // OpenAI function calling requires object schemas to have a "properties" field // even if it's empty, otherwise it throws "object schema missing properties" error if inputSchema.Type == "object" && inputSchema.Properties == nil { - inputSchema.Properties = make(openapi3.Schemas) + inputSchema.Properties = jsonschema.NewProperties() } // Create prefixed tool name @@ -251,7 +258,7 @@ func (m *MCPToolManager) loadServerTools(ctx context.Context, serverName string, info: &schema.ToolInfo{ Name: prefixedName, Desc: mcpTool.Description, - ParamsOneOf: schema.NewParamsOneOfByOpenAPIV3(inputSchema), + ParamsOneOf: schema.NewParamsOneOfByJSONSchema(inputSchema), }, mapping: mapping, } @@ -555,3 +562,81 @@ func (m *MCPToolManager) debugLogConnectionInfo(serverName string, serverConfig } } } + +// convertExclusiveBoundsToBoolean converts JSON Schema draft-07 style exclusive bounds +// (where exclusiveMinimum/exclusiveMaximum are numbers) to draft-04 style +// (where they are booleans that modify minimum/maximum). +// This enables compatibility with kin-openapi which uses OpenAPI 3.0 (draft-04 based) schemas. +func convertExclusiveBoundsToBoolean(schemaJSON []byte) []byte { + var data map[string]interface{} + if err := json.Unmarshal(schemaJSON, &data); err != nil { + return schemaJSON // Return unchanged on error + } + + convertSchemaRecursive(data) + + result, err := json.Marshal(data) + if err != nil { + return schemaJSON // Return unchanged on error + } + return result +} + +// convertSchemaRecursive recursively processes a schema map and converts +// numeric exclusiveMinimum/exclusiveMaximum to boolean format. +func convertSchemaRecursive(schema map[string]interface{}) { + // Convert exclusiveMinimum if it's a number + if exMin, ok := schema["exclusiveMinimum"]; ok { + if num, isNum := exMin.(float64); isNum { + // JSON Schema draft-07: exclusiveMinimum is the limit value + // Convert to draft-04: set minimum = value, exclusiveMinimum = true + schema["minimum"] = num + schema["exclusiveMinimum"] = true + } + } + + // Convert exclusiveMaximum if it's a number + if exMax, ok := schema["exclusiveMaximum"]; ok { + if num, isNum := exMax.(float64); isNum { + // JSON Schema draft-07: exclusiveMaximum is the limit value + // Convert to draft-04: set maximum = value, exclusiveMaximum = true + schema["maximum"] = num + schema["exclusiveMaximum"] = true + } + } + + // Recursively process properties + if props, ok := schema["properties"].(map[string]interface{}); ok { + for _, prop := range props { + if propSchema, ok := prop.(map[string]interface{}); ok { + convertSchemaRecursive(propSchema) + } + } + } + + // Recursively process items (for arrays) + if items, ok := schema["items"].(map[string]interface{}); ok { + convertSchemaRecursive(items) + } + + // Recursively process additionalProperties + if addProps, ok := schema["additionalProperties"].(map[string]interface{}); ok { + convertSchemaRecursive(addProps) + } + + // Recursively process allOf, anyOf, oneOf + for _, key := range []string{"allOf", "anyOf", "oneOf"} { + if arr, ok := schema[key].([]interface{}); ok { + for _, item := range arr { + if itemSchema, ok := item.(map[string]interface{}); ok { + convertSchemaRecursive(itemSchema) + } + } + } + } + + // Recursively process not + if not, ok := schema["not"].(map[string]interface{}); ok { + convertSchemaRecursive(not) + } +} diff --git a/internal/tools/mcp_test.go b/internal/tools/mcp_test.go index 9b4e72f8..0c0168c9 100644 --- a/internal/tools/mcp_test.go +++ b/internal/tools/mcp_test.go @@ -2,11 +2,12 @@ package tools import ( "context" + "encoding/json" "testing" "time" "github.com/cloudwego/eino/schema" - "github.com/getkin/kin-openapi/openapi3" + "github.com/eino-contrib/jsonschema" "github.com/mark3labs/mcphost/internal/config" ) @@ -131,7 +132,7 @@ func TestMCPToolManager_ToolWithoutProperties(t *testing.T) { func TestIssue89_ObjectSchemaMissingProperties(t *testing.T) { // Create a schema that would cause the OpenAI validation error // This simulates what might happen with tools that have no input properties - brokenSchema := &openapi3.Schema{ + brokenSchema := &jsonschema.Schema{ Type: "object", // Properties is nil - this causes "object schema missing properties" error in OpenAI } @@ -143,7 +144,7 @@ func TestIssue89_ObjectSchemaMissingProperties(t *testing.T) { // Apply the fix from issue #89 if brokenSchema.Type == "object" && brokenSchema.Properties == nil { - brokenSchema.Properties = make(openapi3.Schemas) + brokenSchema.Properties = jsonschema.NewProperties() } // Verify the fix worked @@ -153,12 +154,224 @@ func TestIssue89_ObjectSchemaMissingProperties(t *testing.T) { // Test that we can create a ParamsOneOf from the fixed schema // This is what would fail before the fix - paramsOneOf := schema.NewParamsOneOfByOpenAPIV3(brokenSchema) + paramsOneOf := schema.NewParamsOneOfByJSONSchema(brokenSchema) if paramsOneOf == nil { t.Error("Failed to create ParamsOneOf from fixed schema - OpenAI function calling would fail") } } +// TestConvertExclusiveBoundsToBoolean tests the JSON Schema draft-07 to draft-04 conversion +// for exclusiveMinimum and exclusiveMaximum fields. +// Draft-07: exclusiveMinimum/exclusiveMaximum are numeric values (the actual bounds) +// Draft-04: exclusiveMinimum/exclusiveMaximum are booleans that modify minimum/maximum +func TestConvertExclusiveBoundsToBoolean(t *testing.T) { + tests := []struct { + name string + input string + expected map[string]interface{} + }{ + { + name: "exclusiveMinimum as number", + input: `{"type": "number", "exclusiveMinimum": 0}`, + expected: map[string]interface{}{ + "type": "number", + "minimum": float64(0), + "exclusiveMinimum": true, + }, + }, + { + name: "exclusiveMaximum as number", + input: `{"type": "number", "exclusiveMaximum": 100}`, + expected: map[string]interface{}{ + "type": "number", + "maximum": float64(100), + "exclusiveMaximum": true, + }, + }, + { + name: "both exclusive bounds as numbers", + input: `{"type": "integer", "exclusiveMinimum": 1, "exclusiveMaximum": 10}`, + expected: map[string]interface{}{ + "type": "integer", + "minimum": float64(1), + "exclusiveMinimum": true, + "maximum": float64(10), + "exclusiveMaximum": true, + }, + }, + { + name: "already boolean exclusiveMinimum (draft-04 style)", + input: `{"type": "number", "minimum": 0, "exclusiveMinimum": true}`, + expected: map[string]interface{}{ + "type": "number", + "minimum": float64(0), + "exclusiveMinimum": true, + }, + }, + { + name: "no exclusive bounds", + input: `{"type": "string", "minLength": 1}`, + expected: map[string]interface{}{ + "type": "string", + "minLength": float64(1), + }, + }, + { + name: "nested properties with exclusive bounds", + input: `{"type": "object", "properties": {"age": {"type": "integer", "exclusiveMinimum": 0}}}`, + expected: map[string]interface{}{ + "type": "object", + "properties": map[string]interface{}{ + "age": map[string]interface{}{ + "type": "integer", + "minimum": float64(0), + "exclusiveMinimum": true, + }, + }, + }, + }, + { + name: "array items with exclusive bounds", + input: `{"type": "array", "items": {"type": "number", "exclusiveMaximum": 100}}`, + expected: map[string]interface{}{ + "type": "array", + "items": map[string]interface{}{ + "type": "number", + "maximum": float64(100), + "exclusiveMaximum": true, + }, + }, + }, + { + name: "allOf with exclusive bounds", + input: `{"allOf": [{"type": "number", "exclusiveMinimum": 0}]}`, + expected: map[string]interface{}{ + "allOf": []interface{}{ + map[string]interface{}{ + "type": "number", + "minimum": float64(0), + "exclusiveMinimum": true, + }, + }, + }, + }, + { + name: "additionalProperties with exclusive bounds", + input: `{"type": "object", "additionalProperties": {"type": "integer", "exclusiveMinimum": 0, "exclusiveMaximum": 255}}`, + expected: map[string]interface{}{ + "type": "object", + "additionalProperties": map[string]interface{}{ + "type": "integer", + "minimum": float64(0), + "exclusiveMinimum": true, + "maximum": float64(255), + "exclusiveMaximum": true, + }, + }, + }, + { + name: "Chrome DevTools MCP style schema (real-world example)", + input: `{"type": "object", "properties": {"timeout": {"type": "integer", "exclusiveMinimum": 0}, "quality": {"type": "number", "minimum": 0, "maximum": 100}}}`, + expected: map[string]interface{}{ + "type": "object", + "properties": map[string]interface{}{ + "timeout": map[string]interface{}{ + "type": "integer", + "minimum": float64(0), + "exclusiveMinimum": true, + }, + "quality": map[string]interface{}{ + "type": "number", + "minimum": float64(0), + "maximum": float64(100), + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := convertExclusiveBoundsToBoolean([]byte(tt.input)) + + var got map[string]interface{} + if err := json.Unmarshal(result, &got); err != nil { + t.Fatalf("Failed to unmarshal result: %v", err) + } + + if !deepEqual(got, tt.expected) { + t.Errorf("convertExclusiveBoundsToBoolean() =\n%v\nwant:\n%v", got, tt.expected) + } + }) + } +} + +// TestConvertExclusiveBoundsToBoolean_InvalidJSON tests that invalid JSON is returned unchanged +func TestConvertExclusiveBoundsToBoolean_InvalidJSON(t *testing.T) { + invalidJSON := []byte(`{invalid json}`) + result := convertExclusiveBoundsToBoolean(invalidJSON) + + if string(result) != string(invalidJSON) { + t.Errorf("Expected invalid JSON to be returned unchanged, got: %s", string(result)) + } +} + +// deepEqual compares two maps recursively +func deepEqual(a, b map[string]interface{}) bool { + if len(a) != len(b) { + return false + } + for k, v := range a { + bv, ok := b[k] + if !ok { + return false + } + switch av := v.(type) { + case map[string]interface{}: + bvm, ok := bv.(map[string]interface{}) + if !ok || !deepEqual(av, bvm) { + return false + } + case []interface{}: + bva, ok := bv.([]interface{}) + if !ok || !sliceEqual(av, bva) { + return false + } + default: + if v != bv { + return false + } + } + } + return true +} + +// sliceEqual compares two slices recursively +func sliceEqual(a, b []interface{}) bool { + if len(a) != len(b) { + return false + } + for i := range a { + switch av := a[i].(type) { + case map[string]interface{}: + bvm, ok := b[i].(map[string]interface{}) + if !ok || !deepEqual(av, bvm) { + return false + } + case []interface{}: + bva, ok := b[i].([]interface{}) + if !ok || !sliceEqual(av, bva) { + return false + } + default: + if a[i] != b[i] { + return false + } + } + } + return true +} + // Helper function to check if a string contains a substring func contains(s, substr string) bool { for i := 0; i <= len(s)-len(substr); i++ { diff --git a/internal/ui/cli.go b/internal/ui/cli.go index 2bfb451b..89bef174 100644 --- a/internal/ui/cli.go +++ b/internal/ui/cli.go @@ -13,9 +13,7 @@ import ( "golang.org/x/term" ) -var ( - promptStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("12")) -) +var promptStyle = lipgloss.NewStyle().Foreground(lipgloss.Color("12")) // CLI manages the command-line interface for MCPHost, providing message rendering, // user input handling, and display management. It supports both standard and compact @@ -377,6 +375,22 @@ func (c *CLI) IsSlashCommand(input string) bool { return strings.HasPrefix(input, "/") } +// GetToolApproval asks the user for permission to execute the tool with the given +// arguments. Returns true if the user approves. +func (c *CLI) GetToolApproval(toolName, toolArgs string) (bool, error) { + input := NewToolApprovalInput(toolName, toolArgs, c.width) + p := tea.NewProgram(input) + finalModel, err := p.Run() + if err != nil { + return false, err + } + + if finalInput, ok := finalModel.(*ToolApprovalInput); ok { + return finalInput.approved, nil + } + return false, fmt.Errorf("GetToolApproval: unexpected error type") +} + // SlashCommandResult encapsulates the outcome of processing a slash command, // indicating whether the command was recognized and handled, and whether the // conversation history should be cleared as a result of the command. diff --git a/internal/ui/tool_approval_input.go b/internal/ui/tool_approval_input.go new file mode 100644 index 00000000..01970ccf --- /dev/null +++ b/internal/ui/tool_approval_input.go @@ -0,0 +1,135 @@ +package ui + +import ( + "fmt" + "strings" + + "github.com/charmbracelet/bubbles/textarea" + tea "github.com/charmbracelet/bubbletea" + "github.com/charmbracelet/lipgloss" +) + +type ToolApprovalInput struct { + textarea textarea.Model + toolName string + toolArgs string + width int + selected bool // true when "yes" is highlighted and false when "no" is + approved bool + done bool +} + +func NewToolApprovalInput(toolName, toolArgs string, width int) *ToolApprovalInput { + ta := textarea.New() + ta.Placeholder = "" + ta.ShowLineNumbers = false + ta.CharLimit = 1000 + ta.SetWidth(width - 8) // Account for container padding, border and internal padding + ta.SetHeight(4) // Default to 3 lines like huh + ta.Focus() + + // Style the textarea to match huh theme + ta.FocusedStyle.Base = lipgloss.NewStyle() + ta.FocusedStyle.Placeholder = lipgloss.NewStyle().Foreground(lipgloss.Color("240")) + ta.FocusedStyle.Text = lipgloss.NewStyle().Foreground(lipgloss.Color("252")) + ta.FocusedStyle.Prompt = lipgloss.NewStyle() + ta.FocusedStyle.CursorLine = lipgloss.NewStyle() + ta.Cursor.Style = lipgloss.NewStyle().Foreground(lipgloss.Color("39")) + + return &ToolApprovalInput{ + textarea: ta, + toolName: toolName, + toolArgs: toolArgs, + width: width, + selected: true, + } +} + +func (t *ToolApprovalInput) Init() tea.Cmd { + return textarea.Blink +} + +func (t *ToolApprovalInput) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + switch msg := msg.(type) { + case tea.KeyMsg: + switch msg.String() { + case "y", "Y": + t.approved = true + t.done = true + return t, tea.Quit + case "n", "N": + t.approved = false + t.done = true + return t, tea.Quit + case "left": + t.selected = true + return t, nil + case "right": + t.selected = false + return t, nil + case "enter": + t.approved = t.selected + t.done = true + return t, tea.Quit + case "esc", "ctrl+c": + t.approved = false + t.done = true + return t, tea.Quit + } + } + return t, nil +} + +func (t *ToolApprovalInput) View() string { + if t.done { + return "we are done" + } + // Add left padding to entire component (2 spaces like other UI elements) + containerStyle := lipgloss.NewStyle().PaddingLeft(2) + + // Title + titleStyle := lipgloss.NewStyle(). + Foreground(lipgloss.Color("252")). + MarginBottom(1) + + // Input box with huh-like styling + inputBoxStyle := lipgloss.NewStyle(). + Border(lipgloss.ThickBorder()). + BorderLeft(true). + BorderRight(false). + BorderTop(false). + BorderBottom(false). + BorderForeground(lipgloss.Color("39")). + PaddingLeft(1). + Width(t.width - 2) // Account for container padding + + // Style for the currently selected/highlighted option + selectedStyle := lipgloss.NewStyle(). + Foreground(lipgloss.Color("42")). // Bright green + Bold(true). + Underline(true) + + // Style for the unselected/unhighlighted option + unselectedStyle := lipgloss.NewStyle(). + Foreground(lipgloss.Color("240")) // Dark gray + + // Build the view + var view strings.Builder + view.WriteString(titleStyle.Render("Allow tool execution")) + view.WriteString("\n") + details := fmt.Sprintf("Tool: %s\nArguments: %s\n\n", t.toolName, t.toolArgs) + view.WriteString(details) + view.WriteString("Allow tool execution: ") + + var yesText, noText string + if t.selected { + yesText = selectedStyle.Render("[y]es") + noText = unselectedStyle.Render("[n]o") + } else { + yesText = unselectedStyle.Render("[y]es") + noText = selectedStyle.Render("[n]o") + } + view.WriteString(yesText + "/" + noText + "\n") + + return containerStyle.Render(inputBoxStyle.Render(view.String())) +} diff --git a/sdk/mcphost.go b/sdk/mcphost.go index 95c01db2..b598e5ca 100644 --- a/sdk/mcphost.go +++ b/sdk/mcphost.go @@ -142,6 +142,7 @@ func (m *MCPHost) Prompt(ctx context.Context, message string) (string, error) { nil, // onToolResult nil, // onResponse nil, // onToolCallContent + nil, // onToolApproval ) if err != nil { return "", err @@ -181,6 +182,7 @@ func (m *MCPHost) PromptWithCallbacks( nil, // onResponse nil, // onToolCallContent onStreaming, + nil, // onToolApproval ) if err != nil { return "", err diff --git a/sdk/mcphost_test.go b/sdk/mcphost_test.go index 6da12561..b36f90b0 100644 --- a/sdk/mcphost_test.go +++ b/sdk/mcphost_test.go @@ -2,12 +2,17 @@ package sdk_test import ( "context" + "os" "testing" "github.com/mark3labs/mcphost/sdk" ) func TestNew(t *testing.T) { + if os.Getenv("ANTHROPIC_API_KEY") == "" { + t.Skip("Skipping test: ANTHROPIC_API_KEY not set") + } + ctx := context.Background() // Test default initialization @@ -23,6 +28,10 @@ func TestNew(t *testing.T) { } func TestNewWithOptions(t *testing.T) { + if os.Getenv("ANTHROPIC_API_KEY") == "" { + t.Skip("Skipping test: ANTHROPIC_API_KEY not set") + } + ctx := context.Background() opts := &sdk.Options{ @@ -43,6 +52,10 @@ func TestNewWithOptions(t *testing.T) { } func TestSessionManagement(t *testing.T) { + if os.Getenv("ANTHROPIC_API_KEY") == "" { + t.Skip("Skipping test: ANTHROPIC_API_KEY not set") + } + ctx := context.Background() host, err := sdk.New(ctx, &sdk.Options{Quiet: true})