mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-25 09:53:29 +08:00
…end) ### Summary Support pipeline DSL modification through dataset configuration (backend) Key modification: knowledgebase.parser_config --------- Co-authored-by: yzc <yuzhichang@gmail.com>
96 lines
2.5 KiB
Go
96 lines
2.5 KiB
Go
package canvas
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"ragflow/internal/agent/runtime"
|
|
)
|
|
|
|
func TestCompile_OverrideParams(t *testing.T) {
|
|
captured := map[string]map[string]any{} // component_name -> params received by factory
|
|
factory := func(name string, params map[string]any) (runtime.Component, error) {
|
|
cp := make(map[string]any, len(params))
|
|
for k, v := range params {
|
|
cp[k] = v
|
|
}
|
|
captured[name] = cp
|
|
return &stubComponent{params: cp}, nil
|
|
}
|
|
|
|
dsl := &Canvas{
|
|
Components: map[string]CanvasComponent{
|
|
"parser_0": {
|
|
Obj: CanvasComponentObj{
|
|
ComponentName: "Parser",
|
|
Params: map[string]any{
|
|
"pdf": map[string]any{
|
|
"output_format": "one",
|
|
"parse_method": "naive",
|
|
},
|
|
"doc": map[string]any{
|
|
"output_format": "one",
|
|
},
|
|
},
|
|
},
|
|
Upstream: []string{},
|
|
Downstream: []string{"sink_0"},
|
|
},
|
|
"sink_0": {
|
|
Obj: CanvasComponentObj{
|
|
ComponentName: "Sink",
|
|
Params: map[string]any{"name": "sink"},
|
|
},
|
|
Upstream: []string{"parser_0"},
|
|
Downstream: []string{},
|
|
},
|
|
},
|
|
Path: []string{"parser_0", "sink_0"},
|
|
}
|
|
|
|
override := map[string]any{
|
|
"parser_0": map[string]any{
|
|
"pdf": map[string]any{
|
|
"output_format": "detailed",
|
|
},
|
|
"docx": map[string]any{
|
|
"output_format": "one",
|
|
},
|
|
},
|
|
}
|
|
|
|
ctx := WithComponentFactory(context.Background(), factory)
|
|
if _, err := Compile(ctx, dsl, WithOverrideParams(override)); err != nil {
|
|
t.Fatalf("Compile: %v", err)
|
|
}
|
|
|
|
got := captured["Parser"]
|
|
if got == nil {
|
|
t.Fatalf("Parser factory not called")
|
|
}
|
|
// doc preserved from base.
|
|
if v, _ := got["doc"].(map[string]any); v == nil || v["output_format"] != "one" {
|
|
t.Errorf("doc should be preserved from base: %#v", got["doc"])
|
|
}
|
|
// docx injected by the override (was absent in base).
|
|
if v, _ := got["docx"].(map[string]any); v == nil || v["output_format"] != "one" {
|
|
t.Errorf("docx injection missing: %#v", got["docx"])
|
|
}
|
|
// pdf: override fully replaces the base entry (shallow merge).
|
|
pdf, _ := got["pdf"].(map[string]any)
|
|
if pdf == nil {
|
|
t.Fatalf("pdf setup missing: %#v", got)
|
|
}
|
|
if pdf["output_format"] != "detailed" {
|
|
t.Errorf("pdf.output_format not overridden: %#v", pdf)
|
|
}
|
|
if _, ok := pdf["parse_method"]; ok {
|
|
t.Errorf("pdf.parse_method should be dropped by shallow merge: %#v", pdf)
|
|
}
|
|
|
|
// sink_0: absent from the override → no file-format keys injected.
|
|
if _, ok := captured["Sink"]["pdf"]; ok {
|
|
t.Errorf("Sink should not have pdf injected: %#v", captured["Sink"])
|
|
}
|
|
}
|