models

package
v0.32.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 19, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProviderAnthropic ModelProvider = "anthropic"

	// Claude 3 family
	Claude3Haiku   ModelID = "anthropic.claude-3-haiku-20240307"
	Claude3Opus    ModelID = "anthropic.claude-3-opus-20240229"
	Claude35Sonnet ModelID = "anthropic.claude-3-5-sonnet-20241022"
	Claude35Haiku  ModelID = "anthropic.claude-3-5-haiku-20241022"
	Claude37Sonnet ModelID = "anthropic.claude-3-7-sonnet-20250219"

	// Claude 4 family
	Claude4Sonnet  ModelID = "anthropic.claude-sonnet-4-20250514"
	Claude4Opus    ModelID = "anthropic.claude-opus-4-20250514"
	Claude4Opus1   ModelID = "anthropic.claude-opus-4-1-20250805"
	Claude45Sonnet ModelID = "anthropic.claude-sonnet-4-5-20250929"
	Claude45Haiku  ModelID = "anthropic.claude-haiku-4-5-20251001"
	Claude45Opus   ModelID = "anthropic.claude-opus-4-5-20251101"
	Claude46Sonnet ModelID = "anthropic.claude-sonnet-4-6"
	Claude46Opus   ModelID = "anthropic.claude-opus-4-6"
)
View Source
const (
	ProviderCopilot ModelProvider = "copilot"

	// Model IDs match the dynamic format: "copilot.{api-id}"
	CopilotGTP35Turbo      ModelID = "copilot.gpt-3.5-turbo"
	CopilotGPT4o           ModelID = "copilot.gpt-4o"
	CopilotGPT4oMini       ModelID = "copilot.gpt-4o-mini"
	CopilotGPT41           ModelID = "copilot.gpt-4.1"
	CopilotClaude35        ModelID = "copilot.claude-3.5-sonnet"
	CopilotClaude37        ModelID = "copilot.claude-3.7-sonnet"
	CopilotClaude4         ModelID = "copilot.claude-sonnet-4"
	CopilotO1              ModelID = "copilot.o1"
	CopilotO3Mini          ModelID = "copilot.o3-mini"
	CopilotO4Mini          ModelID = "copilot.o4-mini"
	CopilotGemini20        ModelID = "copilot.gemini-2.0-flash"
	CopilotGemini25        ModelID = "copilot.gemini-2.5-pro"
	CopilotGPT4            ModelID = "copilot.gpt-4"
	CopilotClaude37Thought ModelID = "copilot.claude-3.7-sonnet-thought"
	CopilotGPT54           ModelID = "copilot.gpt-5.4"
	CopilotClaudeOpus4     ModelID = "copilot.claude-opus-4"
	CopilotGemini25Flash   ModelID = "copilot.gemini-2.5-flash"
)
View Source
const (
	ProviderGemini ModelProvider = "gemini"

	// Model IDs match the dynamic format: "gemini.{api-id}"
	// Note: Gemini API returns preview-versioned IDs (e.g. "gemini-2.5-pro-preview-05-06")
	Gemini25Flash     ModelID = "gemini.gemini-2.5-flash-preview-04-17"
	Gemini25          ModelID = "gemini.gemini-2.5-pro-preview-05-06"
	Gemini20Flash     ModelID = "gemini.gemini-2.0-flash"
	Gemini20FlashLite ModelID = "gemini.gemini-2.0-flash-lite"
)
View Source
const (
	ProviderGROQ ModelProvider = "groq"

	// Model IDs match the dynamic format: "groq.{api-id}"
	QWENQwq                   ModelID = "groq.qwen-qwq-32b"
	Llama4Scout               ModelID = "groq.meta-llama/llama-4-scout-17b-16e-instruct"
	Llama4Maverick            ModelID = "groq.meta-llama/llama-4-maverick-17b-128e-instruct"
	Llama3_3_70BVersatile     ModelID = "groq.llama-3.3-70b-versatile"
	DeepseekR1DistillLlama70b ModelID = "groq.deepseek-r1-distill-llama-70b"
)
View Source
const (
	ProviderOllama       ModelProvider = "ollama"
	DefaultOllamaBaseURL               = "http://localhost:11434/v1"
	DefaultOllamaRawURL                = "http://localhost:11434"
)
View Source
const (
	ProviderOpenAI ModelProvider = "openai"

	// Model IDs match the dynamic format: "openai.{api-id}"
	GPT41        ModelID = "openai.gpt-4.1"
	GPT41Mini    ModelID = "openai.gpt-4.1-mini"
	GPT41Nano    ModelID = "openai.gpt-4.1-nano"
	GPT45Preview ModelID = "openai.gpt-4.5-preview"
	GPT4o        ModelID = "openai.gpt-4o"
	GPT4oMini    ModelID = "openai.gpt-4o-mini"
	O1           ModelID = "openai.o1"
	O1Pro        ModelID = "openai.o1-pro"
	O1Mini       ModelID = "openai.o1-mini"
	O3           ModelID = "openai.o3"
	O3Mini       ModelID = "openai.o3-mini"
	O4Mini       ModelID = "openai.o4-mini"
)
View Source
const (
	ProviderOpenRouter ModelProvider = "openrouter"

	// Model IDs match the dynamic format: "openrouter.{api-id}"
	// OpenRouter API returns IDs in "provider/model" format
	OpenRouterClaude37Sonnet ModelID = "openrouter.anthropic/claude-3.7-sonnet"
	OpenRouterClaude35Haiku  ModelID = "openrouter.anthropic/claude-3.5-haiku"
	OpenRouterGPT41          ModelID = "openrouter.openai/gpt-4.1"
	OpenRouterDeepSeekR1Free ModelID = "openrouter.deepseek/deepseek-r1-0528:free"
)
View Source
const (
	ProviderVertexAI ModelProvider = "vertexai"

	// Models
	VertexAIGemini25Flash ModelID = "vertexai.gemini-2.5-flash"
	VertexAIGemini25      ModelID = "vertexai.gemini-2.5"
)
View Source
const (
	ProviderXAI ModelProvider = "xai"

	// Model IDs match the dynamic format: "xai.{api-id}"
	XAIGrok3Beta         ModelID = "xai.grok-3-beta"
	XAIGrok3MiniBeta     ModelID = "xai.grok-3-mini-beta"
	XAIGrok3FastBeta     ModelID = "xai.grok-3-fast-beta"
	XAiGrok3MiniFastBeta ModelID = "xai.grok-3-mini-fast-beta"
)

Variables

View Source
var AnthropicModels = map[ModelID]Model{

	Claude3Haiku: {
		ID:                  Claude3Haiku,
		Name:                "Claude 3 Haiku",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-3-haiku-20240307",
		CostPer1MIn:         0.25,
		CostPer1MInCached:   0.03,
		CostPer1MOut:        1.25,
		ContextWindow:       200_000,
		DefaultMaxTokens:    4_096,
		SupportsAttachments: true,
	},
	Claude3Opus: {
		ID:                  Claude3Opus,
		Name:                "Claude 3 Opus",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-3-opus-20240229",
		CostPer1MIn:         15.0,
		CostPer1MInCached:   1.50,
		CostPer1MOut:        75.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    4_096,
		SupportsAttachments: true,
	},
	Claude35Sonnet: {
		ID:                  Claude35Sonnet,
		Name:                "Claude 3.5 Sonnet",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-3-5-sonnet-20241022",
		CostPer1MIn:         3.0,
		CostPer1MInCached:   0.30,
		CostPer1MOut:        15.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    8_192,
		SupportsAttachments: true,
	},
	Claude35Haiku: {
		ID:                  Claude35Haiku,
		Name:                "Claude 3.5 Haiku",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-3-5-haiku-20241022",
		CostPer1MIn:         0.80,
		CostPer1MInCached:   0.08,
		CostPer1MOut:        4.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    8_192,
		SupportsAttachments: true,
	},
	Claude37Sonnet: {
		ID:                  Claude37Sonnet,
		Name:                "Claude 3.7 Sonnet",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-3-7-sonnet-20250219",
		CostPer1MIn:         3.0,
		CostPer1MInCached:   0.30,
		CostPer1MOut:        15.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},

	Claude4Sonnet: {
		ID:                  Claude4Sonnet,
		Name:                "Claude Sonnet 4",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-sonnet-4-20250514",
		CostPer1MIn:         3.0,
		CostPer1MInCached:   0.30,
		CostPer1MOut:        15.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Claude4Opus: {
		ID:                  Claude4Opus,
		Name:                "Claude Opus 4",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-opus-4-20250514",
		CostPer1MIn:         15.0,
		CostPer1MInCached:   1.50,
		CostPer1MOut:        75.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Claude4Opus1: {
		ID:                  Claude4Opus1,
		Name:                "Claude Opus 4.1",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-opus-4-1-20250805",
		CostPer1MIn:         15.0,
		CostPer1MInCached:   1.50,
		CostPer1MOut:        75.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Claude45Sonnet: {
		ID:                  Claude45Sonnet,
		Name:                "Claude Sonnet 4.5",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-sonnet-4-5-20250929",
		CostPer1MIn:         3.0,
		CostPer1MInCached:   0.30,
		CostPer1MOut:        15.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Claude45Haiku: {
		ID:                  Claude45Haiku,
		Name:                "Claude Haiku 4.5",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-haiku-4-5-20251001",
		CostPer1MIn:         0.80,
		CostPer1MInCached:   0.08,
		CostPer1MOut:        4.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		SupportsAttachments: true,
	},
	Claude45Opus: {
		ID:                  Claude45Opus,
		Name:                "Claude Opus 4.5",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-opus-4-5-20251101",
		CostPer1MIn:         15.0,
		CostPer1MInCached:   1.50,
		CostPer1MOut:        75.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Claude46Sonnet: {
		ID:                  Claude46Sonnet,
		Name:                "Claude Sonnet 4.6",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-sonnet-4-6",
		CostPer1MIn:         3.0,
		CostPer1MInCached:   0.30,
		CostPer1MOut:        15.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Claude46Opus: {
		ID:                  Claude46Opus,
		Name:                "Claude Opus 4.6",
		Provider:            ProviderAnthropic,
		APIModel:            "claude-opus-4-6",
		CostPer1MIn:         15.0,
		CostPer1MInCached:   1.50,
		CostPer1MOut:        75.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    32_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
}

AnthropicModels lists all supported Anthropic models with their full capabilities. Capabilities are sourced from the Claude Code CLI source (oa() and uM() functions). Context window: 200 000 tokens for all current models. Max output tokens by family (default / upper limit from oa()):

  • Claude 3 Haiku: 4 096 / 4 096
  • Claude 3 Opus: 4 096 / 4 096
  • Claude 3.5 Sonnet / 3.5 Haiku: 8 192 / 8 192
  • Claude 3.7 Sonnet: 32 000 / 64 000
  • Claude 4 Sonnet / Haiku / Opus (all 4.x): 32 000 / 64 000
View Source
var AzureModels = map[ModelID]Model{
	AzureGPT41: {
		ID:                  AzureGPT41,
		Name:                "Azure OpenAI – GPT 4.1",
		Provider:            ProviderAzure,
		APIModel:            "gpt-4.1",
		CostPer1MIn:         2.00,
		CostPer1MInCached:   0.50,
		CostPer1MOut:        8.00,
		CostPer1MOutCached:  0.0,
		ContextWindow:       1_047_576,
		DefaultMaxTokens:    20000,
		SupportsAttachments: true,
	},
	AzureGPT41Mini: {
		ID:                  AzureGPT41Mini,
		Name:                "Azure OpenAI – GPT 4.1 mini",
		Provider:            ProviderAzure,
		APIModel:            "gpt-4.1-mini",
		CostPer1MIn:         0.40,
		CostPer1MInCached:   0.10,
		CostPer1MOut:        1.60,
		CostPer1MOutCached:  0.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    20000,
		SupportsAttachments: true,
	},
	AzureGPT41Nano: {
		ID:                  AzureGPT41Nano,
		Name:                "Azure OpenAI – GPT 4.1 nano",
		Provider:            ProviderAzure,
		APIModel:            "gpt-4.1-nano",
		CostPer1MIn:         0.10,
		CostPer1MInCached:   0.025,
		CostPer1MOut:        0.40,
		CostPer1MOutCached:  0.0,
		ContextWindow:       1_047_576,
		DefaultMaxTokens:    20000,
		SupportsAttachments: true,
	},
	AzureGPT45Preview: {
		ID:                  AzureGPT45Preview,
		Name:                "Azure OpenAI – GPT 4.5 preview",
		Provider:            ProviderAzure,
		APIModel:            "gpt-4.5-preview",
		CostPer1MIn:         75.00,
		CostPer1MInCached:   37.50,
		CostPer1MOut:        150.00,
		CostPer1MOutCached:  0.0,
		ContextWindow:       128_000,
		DefaultMaxTokens:    15000,
		SupportsAttachments: true,
	},
	AzureGPT4o: {
		ID:                  AzureGPT4o,
		Name:                "Azure OpenAI – GPT-4o",
		Provider:            ProviderAzure,
		APIModel:            "gpt-4o",
		CostPer1MIn:         2.50,
		CostPer1MInCached:   1.25,
		CostPer1MOut:        10.00,
		CostPer1MOutCached:  0.0,
		ContextWindow:       128_000,
		DefaultMaxTokens:    4096,
		SupportsAttachments: true,
	},
	AzureGPT4oMini: {
		ID:                  AzureGPT4oMini,
		Name:                "Azure OpenAI – GPT-4o mini",
		Provider:            ProviderAzure,
		APIModel:            "gpt-4o-mini",
		CostPer1MIn:         0.15,
		CostPer1MInCached:   0.075,
		CostPer1MOut:        0.60,
		CostPer1MOutCached:  0.0,
		ContextWindow:       128_000,
		SupportsAttachments: true,
	},
	AzureO1: {
		ID:                  AzureO1,
		Name:                "Azure OpenAI – O1",
		Provider:            ProviderAzure,
		APIModel:            "o1",
		CostPer1MIn:         15.00,
		CostPer1MInCached:   7.50,
		CostPer1MOut:        60.00,
		CostPer1MOutCached:  0.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    50000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	AzureO1Mini: {
		ID:                  AzureO1Mini,
		Name:                "Azure OpenAI – O1 mini",
		Provider:            ProviderAzure,
		APIModel:            "o1-mini",
		CostPer1MIn:         1.10,
		CostPer1MInCached:   0.55,
		CostPer1MOut:        4.40,
		CostPer1MOutCached:  0.0,
		ContextWindow:       128_000,
		DefaultMaxTokens:    50000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	AzureO3: {
		ID:                  AzureO3,
		Name:                "Azure OpenAI – O3",
		Provider:            ProviderAzure,
		APIModel:            "o3",
		CostPer1MIn:         10.00,
		CostPer1MInCached:   2.50,
		CostPer1MOut:        40.00,
		CostPer1MOutCached:  0.0,
		ContextWindow:       200_000,
		CanReason:           true,
		SupportsAttachments: true,
	},
	AzureO3Mini: {
		ID:                  AzureO3Mini,
		Name:                "Azure OpenAI – O3 mini",
		Provider:            ProviderAzure,
		APIModel:            "o3-mini",
		CostPer1MIn:         1.10,
		CostPer1MInCached:   0.55,
		CostPer1MOut:        4.40,
		CostPer1MOutCached:  0.0,
		ContextWindow:       200_000,
		DefaultMaxTokens:    50000,
		CanReason:           true,
		SupportsAttachments: false,
	},
	AzureO4Mini: {
		ID:                  AzureO4Mini,
		Name:                "Azure OpenAI – O4 mini",
		Provider:            ProviderAzure,
		APIModel:            "o4-mini",
		CostPer1MIn:         1.10,
		CostPer1MInCached:   0.275,
		CostPer1MOut:        4.40,
		CostPer1MOutCached:  0.0,
		ContextWindow:       128_000,
		DefaultMaxTokens:    50000,
		CanReason:           true,
		SupportsAttachments: true,
	},
}
View Source
var ProviderPopularity = map[ModelProvider]int{
	ProviderCopilot:    1,
	ProviderAnthropic:  2,
	ProviderOpenAI:     3,
	ProviderOllama:     4,
	ProviderGemini:     5,
	ProviderGROQ:       6,
	ProviderOpenRouter: 7,
	ProviderBedrock:    8,
	ProviderAzure:      9,
	ProviderVertexAI:   10,
}

Providers in order of popularity

View Source
var SupportedModels = map[ModelID]Model{

	BedrockClaude37Sonnet: {
		ID:                 BedrockClaude37Sonnet,
		Name:               "Bedrock: Claude 3.7 Sonnet",
		Provider:           ProviderBedrock,
		APIModel:           "anthropic.claude-3-7-sonnet-20250219-v1:0",
		CostPer1MIn:        3.0,
		CostPer1MInCached:  3.75,
		CostPer1MOutCached: 0.30,
		CostPer1MOut:       15.0,
	},
}
View Source
var VertexAIGeminiModels = map[ModelID]Model{
	VertexAIGemini25Flash: {
		ID:                  VertexAIGemini25Flash,
		Name:                "VertexAI: Gemini 2.5 Flash",
		Provider:            ProviderVertexAI,
		APIModel:            "gemini-2.5-flash-preview-04-17",
		CostPer1MIn:         0.15,
		CostPer1MInCached:   0,
		CostPer1MOut:        0.60,
		CostPer1MOutCached:  0,
		ContextWindow:       1000000,
		DefaultMaxTokens:    50000,
		SupportsAttachments: true,
	},
	VertexAIGemini25: {
		ID:                  VertexAIGemini25,
		Name:                "VertexAI: Gemini 2.5 Pro",
		Provider:            ProviderVertexAI,
		APIModel:            "gemini-2.5-pro-preview-03-25",
		CostPer1MIn:         1.25,
		CostPer1MInCached:   0,
		CostPer1MOut:        10,
		CostPer1MOutCached:  0,
		ContextWindow:       1000000,
		DefaultMaxTokens:    50000,
		SupportsAttachments: true,
	},
}

Functions

func GetAllModels added in v0.2.0

func GetAllModels() map[ModelID]Model

GetAllModels returns both static and dynamic models

func IsCopilotAnthropicModel added in v0.3.0

func IsCopilotAnthropicModel(apiModel string) bool

IsCopilotAnthropicModel returns true if the given API model name is an Anthropic model served through the GitHub Copilot API (detected by name containing "claude").

func LoadModelCache added in v0.3.0

func LoadModelCache() error

LoadModelCache loads previously cached dynamic models into SupportedModels. Cached models do not overwrite static entries (Azure, VertexAI, Bedrock).

func RefreshProviderModels added in v0.2.0

func RefreshProviderModels(ctx context.Context, provider ModelProvider, apiKey string, bearerToken string, baseURL string) error

RefreshProviderModels fetches and registers models from a provider

func RegisterDynamicModel added in v0.2.0

func RegisterDynamicModel(model Model)

RegisterDynamicModel adds a dynamically discovered model

func ResolveOllamaBaseURL added in v0.2.0

func ResolveOllamaBaseURL(configured string) string

func ResolveOllamaRawBaseURL added in v0.2.0

func ResolveOllamaRawBaseURL(configured string) string

ResolveOllamaRawBaseURL returns the raw Ollama base URL without the /v1 suffix, suitable for calling native Ollama endpoints like /api/tags.

func SaveModelCache added in v0.3.0

func SaveModelCache() error

SaveModelCache saves dynamically discovered models to a local cache file. This allows models to be available immediately on the next startup.

Types

type FetchedModel added in v0.2.0

type FetchedModel struct {
	ID            string `json:"id"`
	Name          string `json:"name,omitempty"`
	Description   string `json:"description,omitempty"`
	Created       int64  `json:"created,omitempty"`
	ContextWindow int64  `json:"context_window,omitempty"`
}

FetchedModel represents a model returned by a provider's API

func FetchModelsFromProvider added in v0.2.0

func FetchModelsFromProvider(ctx context.Context, provider ModelProvider, apiKey string, bearerToken string, baseURL string) ([]FetchedModel, error)

FetchModelsFromProvider queries a provider's API for available models

type Model

type Model struct {
	ID                      ModelID       `json:"id"`
	Name                    string        `json:"name"`
	Provider                ModelProvider `json:"provider"`
	APIModel                string        `json:"api_model"`
	CostPer1MIn             float64       `json:"cost_per_1m_in"`
	CostPer1MOut            float64       `json:"cost_per_1m_out"`
	CostPer1MInCached       float64       `json:"cost_per_1m_in_cached"`
	CostPer1MOutCached      float64       `json:"cost_per_1m_out_cached"`
	ContextWindow           int64         `json:"context_window"`
	DefaultMaxTokens        int64         `json:"default_max_tokens"`
	CanReason               bool          `json:"can_reason"`
	SupportsReasoningEffort bool          `json:"supports_reasoning_effort"`
	SupportsAttachments     bool          `json:"supports_attachments"`
}

type ModelID

type ModelID string
const (
	AzureGPT41        ModelID = "azure.gpt-4.1"
	AzureGPT41Mini    ModelID = "azure.gpt-4.1-mini"
	AzureGPT41Nano    ModelID = "azure.gpt-4.1-nano"
	AzureGPT45Preview ModelID = "azure.gpt-4.5-preview"
	AzureGPT4o        ModelID = "azure.gpt-4o"
	AzureGPT4oMini    ModelID = "azure.gpt-4o-mini"
	AzureO1           ModelID = "azure.o1"
	AzureO1Mini       ModelID = "azure.o1-mini"
	AzureO3           ModelID = "azure.o3"
	AzureO3Mini       ModelID = "azure.o3-mini"
	AzureO4Mini       ModelID = "azure.o4-mini"
)
const (
	// Bedrock
	BedrockClaude37Sonnet ModelID = "bedrock.claude-3.7-sonnet"
)

Model IDs

type ModelProvider

type ModelProvider string
const (
	ProviderBedrock ModelProvider = "bedrock"
	// ForTests
	ProviderMock ModelProvider = "__mock"
)
const ProviderAzure ModelProvider = "azure"
const (
	ProviderLocal ModelProvider = "local"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL