Files
ai-agent/internal/ai/rag/chunk/registry.go
T
t 2bbf42b741 refactor(auth): delegate access control to be-system
Remove Agent Desk users, roles, login sessions, tokens, and local permission persistence. Expose the backend as an embeddable ai-agent module with host-provided subject lookup and operation authorization callbacks, and complete the frontend/backend repository split.
2026-08-21 00:41:07 +08:00

60 lines
1.3 KiB
Go

package chunk
import (
"code.tczkiot.com/wlw/ai-agent/internal/pkg/enums"
"context"
"fmt"
)
type Registry struct {
providers map[string]Provider
}
func NewRegistry() *Registry {
return &Registry{
providers: make(map[string]Provider),
}
}
func NewDefaultRegistry() *Registry {
r := NewRegistry()
r.Register(NewFixedProvider())
r.Register(NewStructuredProvider())
return r
}
func (r *Registry) Register(p Provider) {
if p == nil {
return
}
r.providers[p.Name()] = p
}
func (r *Registry) Get(name string) Provider {
if name == "" {
return nil
}
return r.providers[name]
}
func (r *Registry) Resolve(name string, contentType enums.KnowledgeDocumentContentType) Provider {
if p := r.Get(name); p != nil && p.Supports(contentType) {
return p
}
if p := r.Get(string(enums.KnowledgeChunkProviderStructured)); p != nil && p.Supports(contentType) {
return p
}
return r.Get(string(enums.KnowledgeChunkProviderFixed))
}
func (r *Registry) Chunk(ctx context.Context, req *ChunkRequest) ([]ChunkResult, error) {
if req == nil {
return nil, fmt.Errorf("chunk request is nil")
}
provider := r.Resolve(req.Options.Provider, req.ContentType)
if provider == nil {
return nil, fmt.Errorf("chunk provider not found")
}
return provider.Chunk(ctx, req)
}