package domain import "strings" const ( LLMProviderOpenAI = "openai" LLMProviderAnthropic = "anthropic" LLMProviderGoogle = "google" LLMProviderXAI = "xai" LLMProviderOllama = "ollama" ) type LLMModelOption struct { Value string Label string } type LLMProviderOption struct { Value string Label string Models []LLMModelOption } func DefaultLLMProvider() string { return LLMProviderOpenAI } func LLMProviderOptions() []LLMProviderOption { return []LLMProviderOption{ { Value: LLMProviderOpenAI, Label: "OpenAI", Models: []LLMModelOption{ {Value: "gpt-5.2", Label: "gpt-5.2"}, {Value: "gpt-5.4", Label: "gpt-5.4"}, }, }, { Value: LLMProviderAnthropic, Label: "Anthropic", Models: []LLMModelOption{ {Value: "claude-sonnet-4-5", Label: "claude-sonnet-4-5"}, {Value: "claude-opus-4-1", Label: "claude-opus-4-1"}, }, }, { Value: LLMProviderGoogle, Label: "Google", Models: []LLMModelOption{ {Value: "gemini-2.5-pro", Label: "gemini-2.5-pro"}, {Value: "gemini-2.5-flash", Label: "gemini-2.5-flash"}, }, }, { Value: LLMProviderXAI, Label: "xAI", Models: []LLMModelOption{ {Value: "grok-4", Label: "grok-4"}, {Value: "grok-3-mini", Label: "grok-3-mini"}, }, }, { Value: LLMProviderOllama, Label: "Ollama", Models: []LLMModelOption{ {Value: "llama3.2", Label: "llama3.2"}, {Value: "qwen2.5", Label: "qwen2.5"}, {Value: "mistral", Label: "mistral"}, }, }, } } func LLMModelsByProvider(provider string) []LLMModelOption { normalized := NormalizeLLMProvider(provider) for _, option := range LLMProviderOptions() { if option.Value == normalized { out := make([]LLMModelOption, len(option.Models)) copy(out, option.Models) return out } } return nil } func NormalizeLLMProvider(provider string) string { value := strings.ToLower(strings.TrimSpace(provider)) for _, option := range LLMProviderOptions() { if option.Value == value { return value } } return DefaultLLMProvider() } func NormalizeLLMModel(provider, model string) string { models := LLMModelsByProvider(provider) if len(models) == 0 { return "" } value := strings.TrimSpace(model) for _, option := range models { if option.Value == value { return value } } return models[0].Value }