@@ -57,6 +57,7 @@ func (p Program) ChatName() string {
57
57
}
58
58
59
59
type ToolReference struct {
60
+ Named string
60
61
Reference string
61
62
Arg string
62
63
ToolID string
@@ -184,9 +185,14 @@ func SplitArg(hasArg string) (prefix, arg string) {
184
185
var (
185
186
fields = strings .Fields (hasArg )
186
187
idx = slices .Index (fields , "with" )
188
+ asIdx = slices .Index (fields , "as" )
187
189
)
188
190
189
191
if idx == - 1 {
192
+ if asIdx != - 1 {
193
+ return strings .Join (fields [:asIdx ], " " ),
194
+ strings .Join (fields [asIdx :], " " )
195
+ }
190
196
return strings .TrimSpace (hasArg ), ""
191
197
}
192
198
@@ -201,7 +207,12 @@ func (t Tool) GetToolRefsFromNames(names []string) (result []ToolReference, _ er
201
207
return nil , NewErrToolNotFound (toolName )
202
208
}
203
209
_ , arg := SplitArg (toolName )
210
+ named , ok := strings .CutPrefix (arg , "as " )
211
+ if ! ok {
212
+ named = ""
213
+ }
204
214
result = append (result , ToolReference {
215
+ Named : named ,
205
216
Arg : arg ,
206
217
Reference : toolName ,
207
218
ToolID : toolID ,
@@ -287,15 +298,13 @@ func (t Tool) String() string {
287
298
func (t Tool ) GetCompletionTools (prg Program ) (result []CompletionTool , err error ) {
288
299
toolNames := map [string ]struct {}{}
289
300
290
- for _ , subToolName := range t .Parameters .Tools {
291
- result , err = appendTool (result , prg , t , subToolName , toolNames )
292
- if err != nil {
293
- return nil , err
294
- }
301
+ subToolRefs , err := t .GetToolRefsFromNames (t .Parameters .Tools )
302
+ if err != nil {
303
+ return nil , err
295
304
}
296
305
297
- for _ , subToolName := range t . Parameters . Context {
298
- result , err = appendExports (result , prg , t , subToolName , toolNames )
306
+ for _ , subToolRef := range subToolRefs {
307
+ result , err = appendTool (result , prg , t , subToolRef . Reference , toolNames , subToolRef . Named )
299
308
if err != nil {
300
309
return nil , err
301
310
}
@@ -327,7 +336,7 @@ func appendExports(completionTools []CompletionTool, prg Program, parentTool Too
327
336
}
328
337
329
338
for _ , export := range subTool .Export {
330
- completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames )
339
+ completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames , "" )
331
340
if err != nil {
332
341
return nil , err
333
342
}
@@ -336,7 +345,7 @@ func appendExports(completionTools []CompletionTool, prg Program, parentTool Too
336
345
return completionTools , nil
337
346
}
338
347
339
- func appendTool (completionTools []CompletionTool , prg Program , parentTool Tool , subToolName string , toolNames map [string ]struct {}) ([]CompletionTool , error ) {
348
+ func appendTool (completionTools []CompletionTool , prg Program , parentTool Tool , subToolName string , toolNames map [string ]struct {}, asName string ) ([]CompletionTool , error ) {
340
349
subTool , err := getTool (prg , parentTool , subToolName )
341
350
if err != nil {
342
351
return nil , err
@@ -356,18 +365,22 @@ func appendTool(completionTools []CompletionTool, prg Program, parentTool Tool,
356
365
if subTool .Instructions == "" {
357
366
log .Debugf ("Skipping zero instruction tool %s (%s)" , subToolName , subTool .ID )
358
367
} else {
368
+ name := subToolName
369
+ if asName != "" {
370
+ name = asName
371
+ }
359
372
completionTools = append (completionTools , CompletionTool {
360
373
Function : CompletionFunctionDefinition {
361
374
ToolID : subTool .ID ,
362
- Name : PickToolName (subToolName , toolNames ),
375
+ Name : PickToolName (name , toolNames ),
363
376
Description : subTool .Parameters .Description ,
364
377
Parameters : args ,
365
378
},
366
379
})
367
380
}
368
381
369
382
for _ , export := range subTool .Export {
370
- completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames )
383
+ completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames , "" )
371
384
if err != nil {
372
385
return nil , err
373
386
}
0 commit comments