47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
package converters
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/yaoapp/gou/graphrag/types"
|
|
"github.com/yaoapp/yao/kb/providers/factory"
|
|
kbtypes "github.com/yaoapp/yao/kb/types"
|
|
)
|
|
|
|
// parseNestedConverter parses nested converter configuration
|
|
func parseNestedConverter(config interface{}) (types.Converter, error) {
|
|
configMap, ok := config.(map[string]interface{})
|
|
if !ok {
|
|
return nil, fmt.Errorf("converter config must be a map")
|
|
}
|
|
|
|
converterID, ok := configMap["converter"].(string)
|
|
if !ok {
|
|
return nil, fmt.Errorf("converter ID is required")
|
|
}
|
|
|
|
// Get converter factory
|
|
converterFactory, exists := factory.Converters[converterID]
|
|
if !exists {
|
|
return nil, fmt.Errorf("converter %s not found", converterID)
|
|
}
|
|
|
|
// Parse properties
|
|
var providerOption *kbtypes.ProviderOption
|
|
if properties, ok := configMap["properties"]; ok {
|
|
if propertiesStr, ok := properties.(string); ok {
|
|
// Handle preset value - we'd need to look up the preset
|
|
// For now, create a basic option with the preset as ID
|
|
providerOption = &kbtypes.ProviderOption{
|
|
Value: propertiesStr,
|
|
}
|
|
} else if propertiesMap, ok := properties.(map[string]interface{}); ok {
|
|
// Handle direct properties map
|
|
providerOption = &kbtypes.ProviderOption{
|
|
Properties: propertiesMap,
|
|
}
|
|
}
|
|
}
|
|
|
|
return converterFactory.Make(providerOption)
|
|
}
|