provider.go

 1// Package provider provides types and constants for AI providers.
 2package provider
 3
 4// Type represents the type of AI provider.
 5type Type string
 6
 7// All the supported AI provider types.
 8const (
 9	TypeOpenAI     Type = "openai"
10	TypeAnthropic  Type = "anthropic"
11	TypeGemini     Type = "gemini"
12	TypeAzure      Type = "azure"
13	TypeBedrock    Type = "bedrock"
14	TypeVertexAI   Type = "vertexai"
15	TypeXAI        Type = "xai"
16	TypeOpenRouter Type = "openrouter"
17)
18
19// InferenceProvider represents the inference provider identifier.
20type InferenceProvider string
21
22// All the inference providers supported by the system.
23const (
24	InferenceProviderOpenAI     InferenceProvider = "openai"
25	InferenceProviderAnthropic  InferenceProvider = "anthropic"
26	InferenceProviderGemini     InferenceProvider = "gemini"
27	InferenceProviderAzure      InferenceProvider = "azure"
28	InferenceProviderBedrock    InferenceProvider = "bedrock"
29	InferenceProviderVertexAI   InferenceProvider = "vertexai"
30	InferenceProviderXAI        InferenceProvider = "xai"
31	InferenceProviderOpenRouter InferenceProvider = "openrouter"
32)
33
34// Provider represents an AI provider configuration.
35type Provider struct {
36	Name                string            `json:"name"`
37	ID                  InferenceProvider `json:"id"`
38	APIKey              string            `json:"api_key,omitempty"`
39	APIEndpoint         string            `json:"api_endpoint,omitempty"`
40	Type                Type              `json:"type,omitempty"`
41	DefaultLargeModelID string            `json:"default_large_model_id,omitempty"`
42	DefaultSmallModelID string            `json:"default_small_model_id,omitempty"`
43	Models              []Model           `json:"models,omitempty"`
44}
45
46// Model represents an AI model configuration.
47type Model struct {
48	ID                     string  `json:"id"`
49	Name                   string  `json:"model"`
50	CostPer1MIn            float64 `json:"cost_per_1m_in"`
51	CostPer1MOut           float64 `json:"cost_per_1m_out"`
52	CostPer1MInCached      float64 `json:"cost_per_1m_in_cached"`
53	CostPer1MOutCached     float64 `json:"cost_per_1m_out_cached"`
54	ContextWindow          int64   `json:"context_window"`
55	DefaultMaxTokens       int64   `json:"default_max_tokens"`
56	CanReason              bool    `json:"can_reason"`
57	HasReasoningEffort     bool    `json:"has_reasoning_efforts"`
58	DefaultReasoningEffort string  `json:"default_reasoning_effort,omitempty"`
59	SupportsImages         bool    `json:"supports_attachments"`
60}
61
62// KnownProviders returns all the known inference providers.
63func KnownProviders() []InferenceProvider {
64	return []InferenceProvider{
65		InferenceProviderOpenAI,
66		InferenceProviderAnthropic,
67		InferenceProviderGemini,
68		InferenceProviderAzure,
69		InferenceProviderBedrock,
70		InferenceProviderVertexAI,
71		InferenceProviderXAI,
72		InferenceProviderOpenRouter,
73	}
74}