models

package
v0.411.0 Latest Latest
Warning

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

Go to latest
Published: Jun 1, 2026 License: MIT Imports: 18 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 (
	ProviderAntigravity ModelProvider = "antigravity"
	ProviderGemini      ModelProvider = "gemini"

	// Gemini 3 preview models (require preview access)
	Gemini31ProPreview       ModelID = "gemini.gemini-3.1-pro-preview-customtools"
	Gemini31ProPreviewBase   ModelID = "gemini.gemini-3.1-pro-preview"
	Gemini31FlashLitePreview ModelID = "gemini.gemini-3.1-flash-lite-preview"
	Gemini30ProPreview       ModelID = "gemini.gemini-3-pro-preview"
	Gemini30Flash            ModelID = "gemini.gemini-3-flash-preview"
	// Gemini30Flash legacy alias – config files using "gemini.gemini-3-flash" still resolve.
	Gemini30FlashLegacy ModelID = "gemini.gemini-3-flash"

	// Gemini 2.5 stable models
	Gemini25          ModelID = "gemini.gemini-2.5-pro"
	Gemini25Flash     ModelID = "gemini.gemini-2.5-flash"
	Gemini25FlashLite ModelID = "gemini.gemini-2.5-flash-lite"

	// Gemini 2.5 preview aliases – config files using old preview IDs still resolve.
	Gemini25LegacyPreview      ModelID = "gemini.gemini-2.5-pro-preview-05-06"
	Gemini25FlashLegacyPreview ModelID = "gemini.gemini-2.5-flash-preview-04-17"

	// Gemini 2.0 stable models
	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"
	ProviderOpenAICompatible ModelProvider = "openai-compatible"

	// 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 AntigravityModels = map[ModelID]Model{
	AntigravityGemini30Pro: {
		ID:                  AntigravityGemini30Pro,
		Name:                "Gemini 3 Pro",
		Provider:            ProviderAntigravity,
		APIModel:            "gemini-3-pro-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	AntigravityGemini31Pro: {
		ID:                  AntigravityGemini31Pro,
		Name:                "Gemini 3.1 Pro",
		Provider:            ProviderAntigravity,
		APIModel:            "gemini-3.1-pro-preview-customtools",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	AntigravityGemini30Flash: {
		ID:                  AntigravityGemini30Flash,
		Name:                "Gemini 3 Flash",
		Provider:            ProviderAntigravity,
		APIModel:            "gemini-3-flash-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		SupportsAttachments: true,
	},
}
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 GeminiModels = map[ModelID]Model{

	Gemini31ProPreview: {
		ID:                  Gemini31ProPreview,
		Name:                "Gemini 3.1 Pro Preview (Custom Tools)",
		Provider:            ProviderGemini,
		APIModel:            "gemini-3.1-pro-preview-customtools",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini31ProPreviewBase: {
		ID:                  Gemini31ProPreviewBase,
		Name:                "Gemini 3.1 Pro Preview",
		Provider:            ProviderGemini,
		APIModel:            "gemini-3.1-pro-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini31FlashLitePreview: {
		ID:                  Gemini31FlashLitePreview,
		Name:                "Gemini 3.1 Flash Lite Preview",
		Provider:            ProviderGemini,
		APIModel:            "gemini-3.1-flash-lite-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini30ProPreview: {
		ID:                  Gemini30ProPreview,
		Name:                "Gemini 3 Pro Preview",
		Provider:            ProviderGemini,
		APIModel:            "gemini-3-pro-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini30Flash: {
		ID:                  Gemini30Flash,
		Name:                "Gemini 3 Flash Preview",
		Provider:            ProviderGemini,
		APIModel:            "gemini-3-flash-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},

	Gemini30FlashLegacy: {
		ID:                  Gemini30FlashLegacy,
		Name:                "Gemini 3 Flash Preview",
		Provider:            ProviderGemini,
		APIModel:            "gemini-3-flash-preview",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},

	Gemini25: {
		ID:                  Gemini25,
		Name:                "Gemini 2.5 Pro",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.5-pro",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini25Flash: {
		ID:                  Gemini25Flash,
		Name:                "Gemini 2.5 Flash",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.5-flash",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini25FlashLite: {
		ID:                  Gemini25FlashLite,
		Name:                "Gemini 2.5 Flash Lite",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.5-flash-lite",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		SupportsAttachments: true,
	},

	Gemini25LegacyPreview: {
		ID:                  Gemini25LegacyPreview,
		Name:                "Gemini 2.5 Pro",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.5-pro",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},
	Gemini25FlashLegacyPreview: {
		ID:                  Gemini25FlashLegacyPreview,
		Name:                "Gemini 2.5 Flash",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.5-flash",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		CanReason:           true,
		SupportsAttachments: true,
	},

	Gemini20Flash: {
		ID:                  Gemini20Flash,
		Name:                "Gemini 2.0 Flash",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.0-flash",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		SupportsAttachments: true,
	},
	Gemini20FlashLite: {
		ID:                  Gemini20FlashLite,
		Name:                "Gemini 2.0 Flash Lite",
		Provider:            ProviderGemini,
		APIModel:            "gemini-2.0-flash-lite",
		ContextWindow:       1_000_000,
		DefaultMaxTokens:    8_192,
		SupportsAttachments: true,
	},
}
View Source
var ProviderPopularity = map[ModelProvider]int{
	ProviderCopilot:          1,
	ProviderAnthropic:        2,
	ProviderOpenAI:           3,
	ProviderAntigravity:      4,
	ProviderOllama:           5,
	ProviderLlamaCpp:         6,
	ProviderGemini:           7,
	ProviderGROQ:             8,
	ProviderOpenRouter:       9,
	ProviderBedrock:          10,
	ProviderAzure:            11,
	ProviderVertexAI:         12,
	ProviderOpenAICompatible: 13,
}

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 IsCopilotResponsesAPIModel added in v0.100.0

func IsCopilotResponsesAPIModel(apiModel string) bool

IsCopilotResponsesAPIModel returns true if the model must use the OpenAI Responses API (/v1/responses) instead of Chat Completions (/v1/chat/completions). GPT-5+ models (except gpt-5-mini variants) require the Responses API.

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 RefreshProviderModelsForAccount added in v0.252.0

func RefreshProviderModelsForAccount(ctx context.Context, params AccountModelRefreshParams) error

RefreshProviderModelsForAccount fetches and registers models for a named provider account. Model IDs are prefixed with accountID when AllAccountsOfType > 1 (disambiguates multiple accounts of same type).

func RegisterDynamicModel added in v0.2.0

func RegisterDynamicModel(model Model)

RegisterDynamicModel adds a dynamically discovered model

func ResolveLlamaCppBaseURL added in v0.291.0

func ResolveLlamaCppBaseURL(configured string) string

ResolveLlamaCppBaseURL returns the llama-server base URL, consulting the LLAMACPP_BASE_URL environment variable as a fallback before using the built-in default (http://localhost:8080/v1).

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 AccountModelRefreshParams added in v0.252.0

type AccountModelRefreshParams struct {
	AccountID    string
	ProviderType ModelProvider
	APIKey       string
	BearerToken  string
	BaseURL      string
	ExtraHeaders map[string]string
	// AllAccountsOfType is the count of non-disabled accounts sharing ProviderType,
	// used to decide whether to prefix the model ID with AccountID.
	AllAccountsOfType int
}

AccountModelRefreshParams holds the parameters needed to refresh models for a named account.

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"`
	// AccountID is the ProviderAccount.ID that this model belongs to.
	// Empty means the model comes from the legacy single-account system.
	AccountID string `json:"account_id,omitempty"`
}

func (Model) DisplayLabel added in v0.252.0

func (m Model) DisplayLabel(sameTypeAccountCount int) string

DisplayLabel returns the display label for a model. sameTypeAccountCount is how many non-disabled accounts share this model's provider type. If > 1, the account ID is prefixed to disambiguate.

type ModelID

type ModelID string
const (
	AntigravityGemini30Pro   ModelID = "antigravity/gemini-3-pro"
	AntigravityGemini31Pro   ModelID = "antigravity/gemini-3.1-pro"
	AntigravityGemini30Flash ModelID = "antigravity/gemini-3-flash"
)
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

func NormalizeModelID added in v0.210.0

func NormalizeModelID(input string) ModelID

type ModelProvider

type ModelProvider string
const (
	ProviderLlamaCpp       ModelProvider = "llama-cpp"
	DefaultLlamaCppBaseURL               = "http://localhost:8080/v1"
)
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