Changeset 0.22.1 (#95)
This commit is contained in:
@@ -40,10 +40,70 @@ func List() []string {
|
||||
return ids
|
||||
}
|
||||
|
||||
// ── Provider Type Metadata ──────────────────
|
||||
|
||||
// ProviderTypeMeta describes a registered provider type for the admin API.
|
||||
type ProviderTypeMeta struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
DefaultEndpoint string `json:"default_endpoint"`
|
||||
ProfileSchema ProfileSchema `json:"profile_schema"`
|
||||
}
|
||||
|
||||
var providerTypes = map[string]ProviderTypeMeta{}
|
||||
|
||||
// RegisterType adds a provider type with its metadata to the type registry.
|
||||
// Called by Init() for built-in types. External types can be registered at startup.
|
||||
func RegisterType(meta ProviderTypeMeta, p Provider) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
registry[meta.ID] = p
|
||||
providerTypes[meta.ID] = meta
|
||||
}
|
||||
|
||||
// ListTypes returns metadata for all registered provider types.
|
||||
func ListTypes() []ProviderTypeMeta {
|
||||
mu.RLock()
|
||||
defer mu.RUnlock()
|
||||
out := make([]ProviderTypeMeta, 0, len(providerTypes))
|
||||
for _, m := range providerTypes {
|
||||
out = append(out, m)
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// Init registers all built-in providers.
|
||||
func Init() {
|
||||
Register(&OpenAIProvider{})
|
||||
Register(&AnthropicProvider{})
|
||||
Register(&VeniceProvider{})
|
||||
Register(&OpenRouterProvider{})
|
||||
RegisterType(ProviderTypeMeta{
|
||||
ID: "openai",
|
||||
Name: "OpenAI",
|
||||
Description: "OpenAI and any OpenAI-compatible API (Ollama, LiteLLM, etc.)",
|
||||
DefaultEndpoint: "https://api.openai.com/v1",
|
||||
ProfileSchema: GetProfileSchema("openai"),
|
||||
}, &OpenAIProvider{})
|
||||
|
||||
RegisterType(ProviderTypeMeta{
|
||||
ID: "anthropic",
|
||||
Name: "Anthropic",
|
||||
Description: "Anthropic Messages API (Claude models)",
|
||||
DefaultEndpoint: "https://api.anthropic.com",
|
||||
ProfileSchema: GetProfileSchema("anthropic"),
|
||||
}, &AnthropicProvider{})
|
||||
|
||||
RegisterType(ProviderTypeMeta{
|
||||
ID: "venice",
|
||||
Name: "Venice",
|
||||
Description: "Venice.ai — privacy-focused, OpenAI-compatible with extensions",
|
||||
DefaultEndpoint: "https://api.venice.ai/api/v1",
|
||||
ProfileSchema: GetProfileSchema("venice"),
|
||||
}, &VeniceProvider{})
|
||||
|
||||
RegisterType(ProviderTypeMeta{
|
||||
ID: "openrouter",
|
||||
Name: "OpenRouter",
|
||||
Description: "OpenRouter — unified API for 300+ models with per-model pricing",
|
||||
DefaultEndpoint: "https://openrouter.ai/api/v1",
|
||||
ProfileSchema: GetProfileSchema("openrouter"),
|
||||
}, &OpenRouterProvider{})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user