@@ -57,6 +57,7 @@ func (p Program) ChatName() string {
5757}
5858
5959type ToolReference struct {
60+ Named string
6061 Reference string
6162 Arg string
6263 ToolID string
@@ -184,9 +185,14 @@ func SplitArg(hasArg string) (prefix, arg string) {
184185 var (
185186 fields = strings .Fields (hasArg )
186187 idx = slices .Index (fields , "with" )
188+ asIdx = slices .Index (fields , "as" )
187189 )
188190
189191 if idx == - 1 {
192+ if asIdx != - 1 {
193+ return strings .Join (fields [:asIdx ], " " ),
194+ strings .Join (fields [asIdx :], " " )
195+ }
190196 return strings .TrimSpace (hasArg ), ""
191197 }
192198
@@ -201,7 +207,12 @@ func (t Tool) GetToolRefsFromNames(names []string) (result []ToolReference, _ er
201207 return nil , NewErrToolNotFound (toolName )
202208 }
203209 _ , arg := SplitArg (toolName )
210+ named , ok := strings .CutPrefix (arg , "as " )
211+ if ! ok {
212+ named = ""
213+ }
204214 result = append (result , ToolReference {
215+ Named : named ,
205216 Arg : arg ,
206217 Reference : toolName ,
207218 ToolID : toolID ,
@@ -287,8 +298,13 @@ func (t Tool) String() string {
287298func (t Tool ) GetCompletionTools (prg Program ) (result []CompletionTool , err error ) {
288299 toolNames := map [string ]struct {}{}
289300
290- for _ , subToolName := range t .Parameters .Tools {
291- result , err = appendTool (result , prg , t , subToolName , toolNames )
301+ subToolRefs , err := t .GetToolRefsFromNames (t .Parameters .Tools )
302+ if err != nil {
303+ return nil , err
304+ }
305+
306+ for _ , subToolRef := range subToolRefs {
307+ result , err = appendTool (result , prg , t , subToolRef .Reference , toolNames , subToolRef .Named )
292308 if err != nil {
293309 return nil , err
294310 }
@@ -327,7 +343,7 @@ func appendExports(completionTools []CompletionTool, prg Program, parentTool Too
327343 }
328344
329345 for _ , export := range subTool .Export {
330- completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames )
346+ completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames , "" )
331347 if err != nil {
332348 return nil , err
333349 }
@@ -336,7 +352,7 @@ func appendExports(completionTools []CompletionTool, prg Program, parentTool Too
336352 return completionTools , nil
337353}
338354
339- func appendTool (completionTools []CompletionTool , prg Program , parentTool Tool , subToolName string , toolNames map [string ]struct {}) ([]CompletionTool , error ) {
355+ func appendTool (completionTools []CompletionTool , prg Program , parentTool Tool , subToolName string , toolNames map [string ]struct {}, asName string ) ([]CompletionTool , error ) {
340356 subTool , err := getTool (prg , parentTool , subToolName )
341357 if err != nil {
342358 return nil , err
@@ -356,18 +372,22 @@ func appendTool(completionTools []CompletionTool, prg Program, parentTool Tool,
356372 if subTool .Instructions == "" {
357373 log .Debugf ("Skipping zero instruction tool %s (%s)" , subToolName , subTool .ID )
358374 } else {
375+ name := subToolName
376+ if asName != "" {
377+ name = asName
378+ }
359379 completionTools = append (completionTools , CompletionTool {
360380 Function : CompletionFunctionDefinition {
361381 ToolID : subTool .ID ,
362- Name : PickToolName (subToolName , toolNames ),
382+ Name : PickToolName (name , toolNames ),
363383 Description : subTool .Parameters .Description ,
364384 Parameters : args ,
365385 },
366386 })
367387 }
368388
369389 for _ , export := range subTool .Export {
370- completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames )
390+ completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames , "" )
371391 if err != nil {
372392 return nil , err
373393 }
0 commit comments