model

package
v0.16.2 Latest Latest
Warning

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

Go to latest
Published: Sep 5, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package model is the single source of truth for the models wingman serves: display name, capability class and token limits. Values are kept in sync with the wingman-vscode catalog (src/models.ts).

Index

Constants

This section is empty.

Variables

View Source
var Models = []Model{

	{
		ID: "claude-sonnet-5",

		Namespace: "anthropic",

		Name: "Claude Sonnet 5",

		Class: ClassMedium,

		Output: 128000,

		Context: 1000000,
	},
	{
		ID: "claude-opus-5",

		Namespace: "anthropic",

		Name: "Claude Opus 5",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,
	},

	{
		ID: "claude-opus-4-8",

		Namespace: "anthropic",

		Name: "Claude Opus 4.8",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,
	},

	{
		ID: "claude-opus-4-7",

		Namespace: "anthropic",

		Name: "Claude Opus 4.7",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,
	},

	{
		ID: "claude-sonnet-4-6",

		Namespace: "anthropic",

		Name: "Claude Sonnet 4.6",

		Class: ClassMedium,

		Output: 128000,

		Context: 1000000,
	},
	{
		ID: "claude-opus-4-6",

		Namespace: "anthropic",

		Name: "Claude Opus 4.6",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,
	},
	{
		ID: "claude-haiku-4-6",

		Namespace: "anthropic",

		Name: "Claude Haiku 4.6",

		Class: ClassSmall,

		Output: 64000,

		Context: 200000,
	},

	{
		ID: "claude-sonnet-4-5",

		Namespace: "anthropic",

		Name: "Claude Sonnet 4.5",

		Class: ClassMedium,

		Output: 64000,

		Context: 200000,
	},
	{
		ID: "claude-opus-4-5",

		Namespace: "anthropic",

		Name: "Claude Opus 4.5",

		Class: ClassLarge,

		Output: 64000,

		Context: 200000,
	},
	{
		ID: "claude-haiku-4-5",

		Namespace: "anthropic",

		Name: "Claude Haiku 4.5",

		Class: ClassSmall,

		Output: 64000,

		Context: 200000,
	},

	{
		ID: "claude-fable-5-1",

		Namespace: "anthropic",

		Name: "Claude Fable 5.1",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,

		Efforts: claudeAlwaysThinkingEfforts,
	},
	{
		ID: "claude-fable-5",

		Namespace: "anthropic",

		Name: "Claude Fable 5",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,

		Efforts: claudeAlwaysThinkingEfforts,
	},
	{
		ID: "claude-mythos-5-1",

		Namespace: "anthropic",

		Name: "Claude Mythos 5.1",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,

		Efforts: claudeAlwaysThinkingEfforts,
	},
	{
		ID: "claude-mythos-5",

		Namespace: "anthropic",

		Name: "Claude Mythos 5",

		Class: ClassLarge,

		Output: 128000,

		Context: 1000000,

		Efforts: claudeAlwaysThinkingEfforts,
	},

	{
		ID: "gpt-6-astra",

		Namespace: "openai",

		Name: "GPT 6 Astra",

		Class: ClassLarge,

		Output: 128000,

		Context:          1050000,
		ContextThreshold: 272_000,

		Effort:    "low",
		Efforts:   gpt6AstraEfforts,
		Verbosity: "low",
	},
	{
		ID: "gpt-5.6-sol",

		Aliases:   []string{"gpt-5.6"},
		Namespace: "openai",

		Name: "GPT 5.6 Sol",

		Class: ClassLarge,

		Output: 128000,

		Context:          1050000,
		ContextThreshold: 272_000,

		Efforts: gpt56Efforts,
	},
	{
		ID: "gpt-5.6-terra",

		Namespace: "openai",

		Name: "GPT 5.6 Terra",

		Class: ClassMedium,

		Output: 128000,

		Context:          1050000,
		ContextThreshold: 272_000,

		Efforts: gpt56Efforts,
	},
	{
		ID: "gpt-5.6-luna",

		Namespace: "openai",

		Name: "GPT 5.6 Luna",

		Class: ClassSmall,

		Output: 128000,

		Context:          1050000,
		ContextThreshold: 272_000,

		Efforts: gpt56Efforts,
	},

	{
		ID: "gpt-5.5",

		Namespace: "openai",

		Name: "GPT 5.5",

		Class: ClassMedium,

		Output: 128000,

		Context:          1050000,
		ContextThreshold: 272_000,

		Efforts: gptEfforts,
	},

	{
		ID: "gpt-5.4",

		Namespace: "openai",

		Name: "GPT 5.4",

		Class: ClassMedium,

		Output: 128000,

		Context:          1050000,
		ContextThreshold: 272_000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5.4-mini",

		Namespace: "openai",

		Name: "GPT 5.4 Mini",

		Class: ClassSmall,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},

	{
		ID: "gpt-5.3-codex",

		Namespace: "openai",

		Name: "GPT 5.3 Codex",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5.3-codex-spark",

		Namespace: "openai",

		Name: "GPT 5.3 Codex Spark",

		Class: ClassSmall,

		Output: 32000,

		Context: 128000,

		Efforts: gptEfforts,
	},

	{
		ID: "gpt-5.2-codex",

		Namespace: "openai",

		Name: "GPT 5.2 Codex",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5.2",

		Namespace: "openai",

		Name: "GPT 5.2",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},

	{
		ID: "gpt-5.1-codex-max",

		Namespace: "openai",

		Name: "GPT 5.1 Codex Max",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5.1-codex",

		Namespace: "openai",

		Name: "GPT 5.1 Codex",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5.1-codex-mini",

		Namespace: "openai",

		Name: "GPT 5.1 Codex Mini",

		Class: ClassSmall,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5.1",

		Namespace: "openai",

		Name: "GPT 5.1",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},

	{
		ID: "gpt-5-codex",

		Namespace: "openai",

		Name: "GPT 5 Codex",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5",

		Namespace: "openai",

		Name: "GPT 5",

		Class: ClassMedium,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},
	{
		ID: "gpt-5-mini",

		Namespace: "openai",

		Name: "GPT 5 Mini",

		Class: ClassSmall,

		Output: 128000,

		Context: 400000,

		Efforts: gptEfforts,
	},

	{
		ID: "gemini-3.7-flash",

		Namespace: "google",

		Name: "Gemini 3.7 Flash",

		Class: ClassMedium,

		Input:  1048576,
		Output: 65536,

		ContextThreshold: 200_000,
	},

	{
		ID: "gemini-3.6-flash",

		Namespace: "google",

		Name: "Gemini 3.6 Flash",

		Class: ClassMedium,

		Input:  1048576,
		Output: 65536,

		ContextThreshold: 200_000,
	},

	{
		ID: "gemini-3.5-flash",

		Aliases:   []string{"gemini-3-flash-preview"},
		Namespace: "google",

		Name: "Gemini 3.5 Flash",

		Class: ClassMedium,

		Input:  1048576,
		Output: 65536,

		ContextThreshold: 200_000,
	},
	{
		ID: "gemini-3.5-flash-lite",

		Namespace: "google",

		Name: "Gemini 3.5 Flash Lite",

		Class: ClassSmall,

		Input:  1048576,
		Output: 65536,

		ContextThreshold: 200_000,
	},

	{
		ID: "gemini-3.1-pro",

		Aliases:   []string{"gemini-3.1-pro-preview"},
		Namespace: "google",

		Name: "Gemini 3.1 Pro",

		Class: ClassLarge,

		Input:  1048576,
		Output: 65536,

		ContextThreshold: 200_000,
	},
	{
		ID: "gemini-3.1-flash-lite",

		Namespace: "google",

		Name: "Gemini 3.1 Flash Lite",

		Class: ClassSmall,

		Input:  1048576,
		Output: 65536,

		ContextThreshold: 200_000,
	},

	{
		ID: "glm-5.3",

		Namespace: "z-ai",

		Name: "GLM 5.3",

		Class: ClassMedium,

		Output: 131072,

		Context: 1000000,
	},
	{
		ID: "glm-5.2",

		Namespace: "z-ai",

		Name: "GLM 5.2",

		Class: ClassMedium,

		Output: 131072,

		Context: 1000000,
	},

	{
		ID: "deepseek-v4-pro",

		Namespace: "deepseek",

		Name: "DeepSeek V4 Pro",

		Class: ClassLarge,

		Output: 384000,

		Context: 1000000,
	},
	{
		ID: "deepseek-v4-flash-0731",

		Namespace: "deepseek",

		Name: "DeepSeek V4 Flash 0731",

		Class: ClassSmall,

		Output: 384000,

		Context: 1000000,
	},
	{
		ID: "deepseek-v4-flash",

		Namespace: "deepseek",

		Name: "DeepSeek V4 Flash",

		Class: ClassSmall,

		Output: 384000,

		Context: 1000000,
	},

	{
		ID: "mistral-medium",

		Aliases:   []string{"mistral-medium-latest", "mistral-medium-2604"},
		Namespace: "mistralai",

		Name: "Mistral Medium 3.5",

		Class: ClassMedium,

		Output: 262144,

		Context: 262144,
	},
	{
		ID: "mistral-small",

		Aliases:   []string{"mistral-small-latest", "mistral-small-2603"},
		Namespace: "mistralai",

		Name: "Mistral Small 4",

		Class: ClassSmall,

		Output: 256000,

		Context: 256000,
	},

	{
		ID: "kimi-k3",

		Namespace: "moonshotai",

		Name: "Kimi K3",

		Class: ClassLarge,

		Output: 131072,

		Context: 1048576,
	},

	{
		ID: "minimax-m3",

		Aliases:   []string{"MiniMax-M3"},
		Namespace: "minimax",

		Name: "MiniMax M3",

		Class: ClassLarge,

		Output: 128000,

		Context:          1000000,
		ContextThreshold: 512_000,
	},

	{
		ID: "grok-4.6",

		Namespace: "x-ai",

		Name: "Grok 4.6",

		Class: ClassLarge,

		Output: 500000,

		Context:          500000,
		ContextThreshold: 200_000,
	},

	{
		ID: "qwen3.8-max",

		Aliases:   []string{"qwen3.8-2.4t-a95b"},
		Namespace: "qwen",

		Name: "Qwen 3.8 Max",

		Class: ClassLarge,

		Output: 131072,

		Context: 1000000,
	},
	{
		ID: "qwen3.8",

		Aliases:   []string{"qwen3.8-27b"},
		Namespace: "qwen",

		Name: "Qwen 3.8",

		Class: ClassMedium,

		Output: 65536,

		Context: 262144,

		Efforts: qwen38Efforts,
	},

	{
		ID: "qwen3.7-max",

		Namespace: "qwen",

		Name: "Qwen 3.7 Max",

		Class: ClassLarge,

		Output: 65536,

		Context: 1000000,
	},
	{
		ID: "qwen3.7-plus",

		Aliases:   []string{"qwen3.7"},
		Namespace: "qwen",

		Name: "Qwen 3.7 Plus",

		Class: ClassMedium,

		Output: 65536,

		Context: 1000000,
	},

	{
		ID: "qwen3.5-plus",

		Aliases:   []string{"qwen3.5"},
		Namespace: "qwen",

		Name: "Qwen 3.5",

		Class: ClassMedium,

		Output: 65536,

		Context: 1000000,
	},
}

Models lists every known model in preference order: the first entry of a family, filter or class is the one picked automatically.

Functions

func Family

func Family(id string) string

Family groups models by vendor line (claude, gpt, glm, …) so automatic selection stays within one family when possible: switching families mid-session drops encrypted reasoning state.

func Name

func Name(id string) string

func Normalize added in v0.14.3

func Normalize(id string) string

Types

type Class

type Class int

Class buckets models by capability for automatic per-role selection: large drives planning, medium drives coding, small drives utility calls (recaps, compaction summaries) and the "fast" model of external agents.

const (
	ClassMedium Class = iota
	ClassLarge
	ClassSmall
)

func ClassOf

func ClassOf(id string) Class

ClassOf reports the class of a model, falling back to naming markers for ids the catalog does not know (external agents report their own models).

type Model

type Model struct {
	ID string

	Aliases   []string
	Namespace string

	Name        string
	Description string

	Class Class

	Input  int
	Output int

	Context          int
	ContextThreshold int

	Effort  string
	Efforts []string

	Verbosity string
}

func Available

func Available(available map[string]bool) []Model

Available returns the catalog entries a backend serves, in preference order and with each ID resolved to the alias the backend accepts. A nil map means availability is unknown and every model is returned.

func Find

func Find(id string) (Model, bool)

func (Model) ContextTokens

func (m Model) ContextTokens() int

func (Model) InputTokens

func (m Model) InputTokens() int

func (Model) OutputTokens

func (m Model) OutputTokens() int

Jump to

Keyboard shortcuts

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