rara/packages/go/integration/integration.go
toki fdc86c7ff4
Some checks are pending
ci / validate (push) Waiting to run
initial commit
2026-07-18 18:41:17 +09:00

55 lines
1.4 KiB
Go

package integration
import (
"context"
"encoding/json"
"errors"
)
type Kind string
const (
KindSource Kind = "source"
KindRetrievalBackend Kind = "retrieval_backend"
KindArtifactStore Kind = "artifact_store"
KindEmbeddingProvider Kind = "embedding_provider"
KindRerankProvider Kind = "rerank_provider"
KindGenerationProvider Kind = "generation_provider"
KindExecutor Kind = "executor"
)
type Manifest struct {
Name string `json:"name"`
Kind Kind `json:"kind"`
SchemaVersion string `json:"schema_version"`
Capabilities map[string]bool `json:"capabilities"`
}
type Factory interface {
Manifest() Manifest
Build(context.Context, json.RawMessage, string) (any, error)
}
type Registry struct {
factories map[string]Factory
}
func NewRegistry(factories ...Factory) (*Registry, error) {
registry := &Registry{factories: make(map[string]Factory, len(factories))}
for _, factory := range factories {
name := factory.Manifest().Name
if name == "" {
return nil, errors.New("integration manifest name is required")
}
if _, exists := registry.factories[name]; exists {
return nil, errors.New("duplicate integration factory: " + name)
}
registry.factories[name] = factory
}
return registry, nil
}
func (registry *Registry) Get(name string) (Factory, bool) {
factory, ok := registry.factories[name]
return factory, ok
}