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}