@@ -56,7 +56,7 @@ func (m model) String() string {
5656// PUBLIC METHODS
5757
5858// Return a list of tool names
59- func (a * Agent ) Tools () []string {
59+ func (a * Agent ) ToolNames () []string {
6060 if a .ToolKit () == nil {
6161 return nil
6262 }
@@ -67,11 +67,35 @@ func (a *Agent) Tools() []string {
6767 return result
6868}
6969
70+ // Return a list of agent names
71+ func (a * Agent ) AgentNames () []string {
72+ var result []string
73+ for _ , a := range a .Agents () {
74+ result = append (result , a .Name ())
75+ }
76+ return result
77+ }
78+
79+ // Return a list of agents
80+ func (a * Agent ) AgentsWithName (name ... string ) []llm.Agent {
81+ all := a .Agents ()
82+ if len (name ) == 0 {
83+ return all
84+ }
85+ result := make ([]llm.Agent , 0 , len (name ))
86+ for _ , a := range all {
87+ if slices .Contains (name , a .Name ()) {
88+ result = append (result , a )
89+ }
90+ }
91+ return result
92+ }
93+
7094// Return a comma-separated list of agent names
7195func (a * Agent ) Name () string {
7296 var keys []string
73- for key := range a .Agents () {
74- keys = append (keys , key )
97+ for _ , agent := range a .Agents () {
98+ keys = append (keys , agent . Name () )
7599 }
76100 return strings .Join (keys , "," )
77101}
@@ -82,22 +106,13 @@ func (a *Agent) Models(ctx context.Context) ([]llm.Model, error) {
82106}
83107
84108// Return the models from list of agents
85- func (a * Agent ) ListModels (ctx context.Context , agents ... string ) ([]llm.Model , error ) {
109+ func (a * Agent ) ListModels (ctx context.Context , names ... string ) ([]llm.Model , error ) {
86110 var result error
87111
88- // Ensure all agents are valid
112+ // Gather models from agents
113+ agents := a .AgentsWithName (names ... )
114+ models := make ([]llm.Model , 0 , len (agents )* 10 )
89115 for _ , agent := range agents {
90- if _ , exists := a .agents [agent ]; ! exists {
91- result = errors .Join (result , llm .ErrNotFound .Withf ("agent %q" , agent ))
92- }
93- }
94-
95- // Gather models from all agents
96- models := make ([]llm.Model , 0 , 100 )
97- for _ , agent := range a .agents {
98- if len (agents ) > 0 && ! slices .Contains (agents , agent .Name ()) {
99- continue
100- }
101116 agentmodels , err := modelsForAgent (ctx , agent )
102117 if err != nil {
103118 result = errors .Join (result , err )
@@ -113,24 +128,12 @@ func (a *Agent) ListModels(ctx context.Context, agents ...string) ([]llm.Model,
113128
114129// Return a model by name. If no agents are specified, then all agents are considered.
115130// If multiple agents are specified, then the first model found is returned.
116- func (a * Agent ) GetModel (ctx context.Context , name string , agents ... string ) (llm.Model , error ) {
117- if len (agents ) == 0 {
118- for _ , agent := range a .agents {
119- agents = append (agents , agent .Name ())
120- }
121- }
122-
123- // Ensure all agents are valid
131+ func (a * Agent ) GetModel (ctx context.Context , name string , agentnames ... string ) (llm.Model , error ) {
124132 var result error
125- for _ , agent := range agents {
126- if _ , exists := a .agents [agent ]; ! exists {
127- result = errors .Join (result , llm .ErrNotFound .Withf ("agent %q" , agent ))
128- }
129- }
130133
131- // Gather models from agents
134+ agents := a . AgentsWithName ( agentnames ... )
132135 for _ , agent := range agents {
133- models , err := modelsForAgent (ctx , a . agents [ agent ] , name )
136+ models , err := modelsForAgent (ctx , agent , name )
134137 if err != nil {
135138 result = errors .Join (result , err )
136139 continue
0 commit comments