Refactor provider option resolution to require provider type
- Updated the resolveProviderOption function to include providerType as a required parameter, enhancing error handling for missing provider types. - Simplified the provider retrieval logic to directly fetch providers based on the specified type, improving clarity and maintainability. - Removed redundant comments and streamlined the code for better readability.
This commit is contained in:
parent
c9fdb2c01c
commit
82788e82a9
2 changed files with 17 additions and 21 deletions
|
|
@ -16,7 +16,6 @@ func (p *Provider) GetOption(id string) (*ProviderOption, bool) {
|
|||
return nil, false
|
||||
}
|
||||
|
||||
// Find the option by id
|
||||
for _, option := range p.Options {
|
||||
if option.Value == id {
|
||||
return option, true
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ type UpdateSegmentsRequest struct {
|
|||
// If OptionID is provided, it looks up the option from the provider
|
||||
// If Option is provided directly, it uses the Option field
|
||||
// If neither is provided, it selects the default option from provider's Options
|
||||
func resolveProviderOption(config *ProviderConfig, locale string) (*kbtypes.ProviderOption, error) {
|
||||
func resolveProviderOption(config *ProviderConfig, providerType, locale string) (*kbtypes.ProviderOption, error) {
|
||||
if config == nil {
|
||||
return nil, fmt.Errorf("provider config is required")
|
||||
}
|
||||
|
|
@ -144,6 +144,10 @@ func resolveProviderOption(config *ProviderConfig, locale string) (*kbtypes.Prov
|
|||
return nil, fmt.Errorf("provider_id is required")
|
||||
}
|
||||
|
||||
if providerType == "" {
|
||||
return nil, fmt.Errorf("provider_type is required")
|
||||
}
|
||||
|
||||
// If Option is provided directly, use it
|
||||
if config.Option != nil {
|
||||
return config.Option, nil
|
||||
|
|
@ -159,22 +163,15 @@ func resolveProviderOption(config *ProviderConfig, locale string) (*kbtypes.Prov
|
|||
locale = "en"
|
||||
}
|
||||
|
||||
// Find the provider using the new multi-language system
|
||||
// Find the provider using the specified provider type
|
||||
var provider *kbtypes.Provider
|
||||
kbInstance := kb.Instance.(*kb.KnowledgeBase)
|
||||
|
||||
// Check all provider types to find the matching provider
|
||||
providerTypes := []string{"chunking", "embedding", "converter", "extractor", "fetcher"}
|
||||
|
||||
for _, providerType := range providerTypes {
|
||||
providers := kbInstance.Providers.GetProviders(providerType, locale)
|
||||
for _, p := range providers {
|
||||
if p.ID == config.ProviderID {
|
||||
provider = p
|
||||
break
|
||||
}
|
||||
}
|
||||
if provider != nil {
|
||||
// Get providers of the specific type
|
||||
providers := kbInstance.Providers.GetProviders(providerType, locale)
|
||||
for _, p := range providers {
|
||||
if p.ID == config.ProviderID {
|
||||
provider = p
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
@ -232,7 +229,7 @@ func (r *BaseUpsertRequest) ToUpsertOptions(fileInfo ...string) (*types.UpsertOp
|
|||
}
|
||||
|
||||
// Resolve and create chunking provider
|
||||
chunkingOption, err := resolveProviderOption(r.Chunking, locale)
|
||||
chunkingOption, err := resolveProviderOption(r.Chunking, "chunking", locale)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve chunking provider: %w", err)
|
||||
}
|
||||
|
|
@ -251,7 +248,7 @@ func (r *BaseUpsertRequest) ToUpsertOptions(fileInfo ...string) (*types.UpsertOp
|
|||
options.ChunkingOptions = chunkingOpts
|
||||
|
||||
// Resolve and create embedding provider
|
||||
embeddingOption, err := resolveProviderOption(r.Embedding, locale)
|
||||
embeddingOption, err := resolveProviderOption(r.Embedding, "embedding", locale)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve embedding provider: %w", err)
|
||||
}
|
||||
|
|
@ -264,7 +261,7 @@ func (r *BaseUpsertRequest) ToUpsertOptions(fileInfo ...string) (*types.UpsertOp
|
|||
|
||||
// Optional providers
|
||||
if r.Extraction != nil {
|
||||
extractionOption, err := resolveProviderOption(r.Extraction, locale)
|
||||
extractionOption, err := resolveProviderOption(r.Extraction, "extractor", locale)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve extraction provider: %w", err)
|
||||
}
|
||||
|
|
@ -277,7 +274,7 @@ func (r *BaseUpsertRequest) ToUpsertOptions(fileInfo ...string) (*types.UpsertOp
|
|||
}
|
||||
|
||||
if r.Fetcher != nil {
|
||||
fetcherOption, err := resolveProviderOption(r.Fetcher, locale)
|
||||
fetcherOption, err := resolveProviderOption(r.Fetcher, "fetcher", locale)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve fetcher provider: %w", err)
|
||||
}
|
||||
|
|
@ -292,7 +289,7 @@ func (r *BaseUpsertRequest) ToUpsertOptions(fileInfo ...string) (*types.UpsertOp
|
|||
// Handle converter - auto-detect if not specified
|
||||
if r.Converter != nil {
|
||||
// User specified converter
|
||||
converterOption, err := resolveProviderOption(r.Converter, locale)
|
||||
converterOption, err := resolveProviderOption(r.Converter, "converter", locale)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve converter provider: %w", err)
|
||||
}
|
||||
|
|
@ -315,7 +312,7 @@ func (r *BaseUpsertRequest) ToUpsertOptions(fileInfo ...string) (*types.UpsertOp
|
|||
ProviderID: converterID,
|
||||
}
|
||||
|
||||
converterOption, err := resolveProviderOption(converterConfig, locale)
|
||||
converterOption, err := resolveProviderOption(converterConfig, "converter", locale)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to resolve auto-detected converter provider: %w", err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue