@@ -123,7 +123,7 @@ func FixupServices(ctx context.Context, provider client.Provider, project *types
123
123
}
124
124
}
125
125
126
- if svccfg .Provider != nil && svccfg .Provider .Type == "model" {
126
+ if svccfg .Provider != nil && svccfg .Provider .Type == "model" && svccfg . Image == "" && svccfg . Build == nil {
127
127
fixupModelProvider (& svccfg , provider , project )
128
128
}
129
129
@@ -209,34 +209,39 @@ func fixupRedisService(svccfg *types.ServiceConfig, provider client.Provider) er
209
209
}
210
210
211
211
func fixupModelProvider (svccfg * types.ServiceConfig , provider client.Provider , project * types.Project ) {
212
- if svccfg .Image == "" && svccfg .Build == nil {
213
- // Local Docker sets [SERVICE]_URL and [SERVICE]_MODEL environment variables on the dependent services
214
- envName := strings .ToUpper (svccfg .Name ) // TODO: handle characters that are not allowed in env vars, like '-'
215
- urlEnv := envName + "_URL"
216
- urlVal := "http://" + provider .ServiceDNS (NormalizeServiceName (svccfg .Name )) + "/api/v1/"
217
- modelEnv := envName + "_MODEL"
218
- modelVal := svccfg .Provider .Options ["model" ]
219
-
220
- empty := ""
221
- svccfg .Environment = types.MappingWithEquals {"OPENAI_API_KEY" : & empty } // disable auth; see https://github.com/DefangLabs/openai-access-gateway/pull/5
222
- svccfg .Image = "defangio/openai-access-gateway"
223
- svccfg .Provider = nil // remove "provider:" because current backend will not accept it
224
- svccfg .Ports = []types.ServicePortConfig {{Target : 80 , Mode : Mode_HOST , Protocol : Protocol_TCP }}
225
- // svccfg.Deploy.Resources.Reservations.Limits = &types.Resources{} TODO: avoid memory limits warning
226
- // svccfg.HealthCheck = &types.ServiceHealthCheckConfig{} TODO: add healthcheck
227
-
228
- // Set environment variables (url and model) for any service that depends on the provider pseudo service
229
- for _ , dependency := range project .Services {
230
- if _ , ok := dependency .DependsOn [svccfg .Name ]; ok {
231
- if dependency .Environment == nil {
232
- dependency .Environment = make (types.MappingWithEquals )
233
- }
234
- if _ , ok := dependency .Environment [urlEnv ]; ! ok {
235
- dependency .Environment [urlEnv ] = & urlVal
236
- }
237
- if _ , ok := dependency .Environment [modelEnv ]; ! ok && modelVal != "" {
238
- dependency .Environment [modelEnv ] = & modelVal
239
- }
212
+ // Declare a private network for the model provider
213
+ const modelProviderNetwork = "model_provider_private"
214
+
215
+ // Local Docker sets [SERVICE]_URL and [SERVICE]_MODEL environment variables on the dependent services
216
+ envName := strings .ToUpper (svccfg .Name ) // TODO: handle characters that are not allowed in env vars, like '-'
217
+ urlEnv := envName + "_URL"
218
+ urlVal := "http://" + provider .ServiceDNS (NormalizeServiceName (svccfg .Name )) + "/api/v1/"
219
+ modelEnv := envName + "_MODEL"
220
+ modelVal := svccfg .Provider .Options ["model" ]
221
+
222
+ empty := ""
223
+ // svccfg.Deploy.Resources.Reservations.Limits = &types.Resources{} TODO: avoid memory limits warning
224
+ svccfg .Environment = types.MappingWithEquals {"OPENAI_API_KEY" : & empty } // disable auth; see https://github.com/DefangLabs/openai-access-gateway/pull/5
225
+ // svccfg.HealthCheck = &types.ServiceHealthCheckConfig{} TODO: add healthcheck
226
+ svccfg .Image = "defangio/openai-access-gateway"
227
+ svccfg .Networks [modelProviderNetwork ] = nil
228
+ svccfg .Ports = []types.ServicePortConfig {{Target : 80 , Mode : Mode_HOST , Protocol : Protocol_TCP }}
229
+ svccfg .Provider = nil // remove "provider:" because current backend will not accept it
230
+ delete (svccfg .Networks , "default" ) // remove the default network
231
+ project .Networks [modelProviderNetwork ] = types.NetworkConfig {Name : modelProviderNetwork }
232
+
233
+ // Set environment variables (url and model) for any service that depends on the provider pseudo service
234
+ for _ , dependency := range project .Services {
235
+ if _ , ok := dependency .DependsOn [svccfg .Name ]; ok {
236
+ if dependency .Environment == nil {
237
+ dependency .Environment = make (types.MappingWithEquals )
238
+ }
239
+ dependency .Networks [modelProviderNetwork ] = nil
240
+ if _ , ok := dependency .Environment [urlEnv ]; ! ok {
241
+ dependency .Environment [urlEnv ] = & urlVal
242
+ }
243
+ if _ , ok := dependency .Environment [modelEnv ]; ! ok && modelVal != "" {
244
+ dependency .Environment [modelEnv ] = & modelVal
240
245
}
241
246
}
242
247
}
0 commit comments