@@ -80,43 +80,51 @@ func FindAgentPaths(agentsPathOrDirectory string) ([]string, error) {
8080// checkRequiredEnvVars checks which environment variables are required by the models and tools.
8181// This allows exiting early with a proper error message instead of failing later when trying to use a model or tool.
8282// TODO(dga): This code contains lots of duplication and ought to be refactored.
83- func checkRequiredEnvVars (ctx context.Context , cfg * latest.Config , env environment.Provider ) error {
83+ func checkRequiredEnvVars (ctx context.Context , cfg * latest.Config , env environment.Provider , runtimeConfig config. RuntimeConfig ) error {
8484 requiredEnv := map [string ]bool {}
8585
86- for _ , model := range cfg .Models {
87- switch model .Provider {
88- case "openai" :
89- requiredEnv ["OPENAI_API_KEY" ] = true
90- case "anthropic" :
91- requiredEnv ["ANTHROPIC_API_KEY" ] = true
92- case "google" :
93- requiredEnv ["GOOGLE_API_KEY" ] = true
86+ // Models
87+ if runtimeConfig .ModelsGateway == "" {
88+ for _ , model := range cfg .Models {
89+ switch model .Provider {
90+ case "openai" :
91+ requiredEnv ["OPENAI_API_KEY" ] = true
92+ case "anthropic" :
93+ requiredEnv ["ANTHROPIC_API_KEY" ] = true
94+ case "google" :
95+ requiredEnv ["GOOGLE_API_KEY" ] = true
96+ }
9497 }
95- }
9698
97- for _ , agent := range cfg .Agents {
98- model := agent .Model
99- switch {
100- case strings .HasPrefix (model , "openai/" ):
101- requiredEnv ["OPENAI_API_KEY" ] = true
102- case strings .HasPrefix (model , "anthropic/" ):
103- requiredEnv ["ANTHROPIC_API_KEY" ] = true
104- case strings .HasPrefix (model , "google/" ):
105- requiredEnv ["GOOGLE_API_KEY" ] = true
99+ for _ , agent := range cfg .Agents {
100+ model := agent .Model
101+ switch {
102+ case strings .HasPrefix (model , "openai/" ):
103+ requiredEnv ["OPENAI_API_KEY" ] = true
104+ case strings .HasPrefix (model , "anthropic/" ):
105+ requiredEnv ["ANTHROPIC_API_KEY" ] = true
106+ case strings .HasPrefix (model , "google/" ):
107+ requiredEnv ["GOOGLE_API_KEY" ] = true
108+ }
106109 }
110+ }
107111
108- for i := range agent .Toolsets {
109- toolSet := agent .Toolsets [i ]
110-
111- if toolSet .Type == "mcp" && toolSet .Ref != "" {
112- mcpServerName := gateway .ParseServerRef (toolSet .Ref )
113-
114- secrets , err := gateway .RequiredEnvVars (ctx , mcpServerName , gateway .DockerCatalogURL )
115- if err != nil {
116- return fmt .Errorf ("reading which secrets the MCP server needs: %w" , err )
117- }
118- for _ , secret := range secrets {
119- requiredEnv [secret .Env ] = true
112+ // Tools
113+ if runtimeConfig .ToolsGateway == "" {
114+ for _ , agent := range cfg .Agents {
115+ for i := range agent .Toolsets {
116+ toolSet := agent .Toolsets [i ]
117+
118+ if toolSet .Type == "mcp" && toolSet .Ref != "" {
119+ mcpServerName := gateway .ParseServerRef (toolSet .Ref )
120+
121+ secrets , err := gateway .RequiredEnvVars (ctx , mcpServerName , gateway .DockerCatalogURL )
122+ if err != nil {
123+ return fmt .Errorf ("reading which secrets the MCP server needs: %w" , err )
124+ }
125+ for _ , secret := range secrets {
126+ requiredEnv [secret .Env ] = true
127+ }
120128 }
121129 }
122130 }
@@ -171,7 +179,7 @@ func Load(ctx context.Context, path string, runtimeConfig config.RuntimeConfig)
171179 }
172180
173181 // Early check for required env vars before loading models and tools.
174- if err := checkRequiredEnvVars (ctx , cfg , env ); err != nil {
182+ if err := checkRequiredEnvVars (ctx , cfg , env , runtimeConfig ); err != nil {
175183 return nil , err
176184 }
177185
0 commit comments