@@ -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,15 +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 )
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
295304 }
296305
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 )
299308 if err != nil {
300309 return nil , err
301310 }
@@ -327,7 +336,7 @@ func appendExports(completionTools []CompletionTool, prg Program, parentTool Too
327336 }
328337
329338 for _ , export := range subTool .Export {
330- completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames )
339+ completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames , "" )
331340 if err != nil {
332341 return nil , err
333342 }
@@ -336,7 +345,7 @@ func appendExports(completionTools []CompletionTool, prg Program, parentTool Too
336345 return completionTools , nil
337346}
338347
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 ) {
340349 subTool , err := getTool (prg , parentTool , subToolName )
341350 if err != nil {
342351 return nil , err
@@ -356,18 +365,22 @@ func appendTool(completionTools []CompletionTool, prg Program, parentTool Tool,
356365 if subTool .Instructions == "" {
357366 log .Debugf ("Skipping zero instruction tool %s (%s)" , subToolName , subTool .ID )
358367 } else {
368+ name := subToolName
369+ if asName != "" {
370+ name = asName
371+ }
359372 completionTools = append (completionTools , CompletionTool {
360373 Function : CompletionFunctionDefinition {
361374 ToolID : subTool .ID ,
362- Name : PickToolName (subToolName , toolNames ),
375+ Name : PickToolName (name , toolNames ),
363376 Description : subTool .Parameters .Description ,
364377 Parameters : args ,
365378 },
366379 })
367380 }
368381
369382 for _ , export := range subTool .Export {
370- completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames )
383+ completionTools , err = appendTool (completionTools , prg , subTool , export , toolNames , "" )
371384 if err != nil {
372385 return nil , err
373386 }
0 commit comments