@@ -18,13 +18,15 @@ package convert
18
18
19
19
import (
20
20
"fmt"
21
+
21
22
"strconv"
22
23
"strings"
23
24
24
25
einoCompose "github.com/cloudwego/eino/compose"
25
26
26
27
"github.com/coze-dev/coze-studio/backend/domain/workflow/entity/vo"
27
28
"github.com/coze-dev/coze-studio/backend/domain/workflow/internal/schema"
29
+ "github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
28
30
"github.com/coze-dev/coze-studio/backend/pkg/sonic"
29
31
"github.com/coze-dev/coze-studio/backend/types/errno"
30
32
)
@@ -180,7 +182,10 @@ func CanvasBlockInputToFieldInfo(b *vo.BlockInput, path einoCompose.FieldPath, p
180
182
if value == nil {
181
183
return nil , fmt .Errorf ("input %v has no value, type= %s" , path , b .Type )
182
184
}
183
-
185
+ var fileExtra * vo.FileExtra
186
+ isFileAssistType := func (assistType vo.AssistType ) bool {
187
+ return assistType >= vo .AssistTypeDefault && assistType <= vo .AssistTypeVoice
188
+ }
184
189
switch value .Type {
185
190
case vo .BlockInputValueTypeObjectRef :
186
191
sc := b .Schema
@@ -214,7 +219,6 @@ func CanvasBlockInputToFieldInfo(b *vo.BlockInput, path einoCompose.FieldPath, p
214
219
if content == nil {
215
220
return nil , fmt .Errorf ("input %v is literal but has no value, type= %s" , path , b .Type )
216
221
}
217
-
218
222
switch b .Type {
219
223
case vo .VariableTypeObject :
220
224
m := make (map [string ]any )
@@ -223,11 +227,43 @@ func CanvasBlockInputToFieldInfo(b *vo.BlockInput, path einoCompose.FieldPath, p
223
227
}
224
228
content = m
225
229
case vo .VariableTypeList :
226
- l := make ([]any , 0 )
227
- if err = sonic .UnmarshalString (content .(string ), & l ); err != nil {
228
- return nil , err
230
+ switch content .(type ) {
231
+ case string :
232
+ if _ , ok := content .(string ); ok {
233
+ l := make ([]any , 0 )
234
+ if err = sonic .UnmarshalString (content .(string ), & l ); err != nil {
235
+ return nil , err
236
+ }
237
+ content = l
238
+ }
239
+ case []string :
240
+ content = content .([]string )
241
+ case []any :
242
+ content = content .([]any )
243
+ default :
244
+ return nil , fmt .Errorf ("unsupported variable type fot list: %s" , b .Type )
245
+ }
246
+ eleSchema , err := vo .ParseVariable (b .Schema )
247
+ if err != nil {
248
+ return nil , fmt .Errorf ("can not parse schema from %v" , b .Schema )
249
+ }
250
+
251
+ if isFileAssistType (eleSchema .AssistType ) {
252
+ rawMeta , ok := b .Value .RawMeta .(map [string ]any )
253
+ if ok {
254
+ filenames , ok := rawMeta ["fileName" ].([]any )
255
+ if ! ok {
256
+ return nil , fmt .Errorf ("can not get filename from %v" , rawMeta )
257
+ }
258
+ fileExtra = & vo.FileExtra {
259
+ FileNames : make ([]string , 0 , len (filenames )),
260
+ }
261
+ for _ , filename := range filenames {
262
+ fileExtra .FileNames = append (fileExtra .FileNames , filename .(string ))
263
+ }
264
+ }
265
+
229
266
}
230
- content = l
231
267
case vo .VariableTypeInteger :
232
268
switch content .(type ) {
233
269
case string :
@@ -268,13 +304,27 @@ func CanvasBlockInputToFieldInfo(b *vo.BlockInput, path einoCompose.FieldPath, p
268
304
default :
269
305
return nil , fmt .Errorf ("unsupported variable type for boolean: %s" , b .Type )
270
306
}
307
+ case vo .VariableTypeString :
308
+ if isFileAssistType (b .AssistType ) {
309
+ rawMeta , ok := b .Value .RawMeta .(map [string ]any )
310
+ if ok {
311
+ filename , ok := rawMeta ["fileName" ].(string )
312
+ if ! ok {
313
+ return nil , fmt .Errorf ("can not get filename from %v" , rawMeta )
314
+ }
315
+ fileExtra = & vo.FileExtra {
316
+ FileName : ptr .Of (filename ),
317
+ }
318
+ }
319
+ }
271
320
default :
272
321
}
273
322
return []* vo.FieldInfo {
274
323
{
275
324
Path : path ,
276
325
Source : vo.FieldSource {
277
- Val : content ,
326
+ Val : content ,
327
+ FileExtra : fileExtra ,
278
328
},
279
329
},
280
330
}, nil
@@ -466,8 +516,8 @@ func SetInputsForNodeSchema(n *vo.Node, ns *schema.NodeSchema) error {
466
516
if err != nil {
467
517
return err
468
518
}
469
-
470
519
ns .AddInputSource (sources ... )
520
+
471
521
}
472
522
473
523
return nil
0 commit comments