Skip to content

Commit 9f50f14

Browse files
authored
Put provider in private network (#1171)
1 parent 79bef69 commit 9f50f14

File tree

2 files changed

+37
-31
lines changed

2 files changed

+37
-31
lines changed

src/pkg/cli/compose/fixup.go

+34-29
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ func FixupServices(ctx context.Context, provider client.Provider, project *types
123123
}
124124
}
125125

126-
if svccfg.Provider != nil && svccfg.Provider.Type == "model" {
126+
if svccfg.Provider != nil && svccfg.Provider.Type == "model" && svccfg.Image == "" && svccfg.Build == nil {
127127
fixupModelProvider(&svccfg, provider, project)
128128
}
129129

@@ -209,34 +209,39 @@ func fixupRedisService(svccfg *types.ServiceConfig, provider client.Provider) er
209209
}
210210

211211
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
240245
}
241246
}
242247
}

src/testdata/provider/compose.yaml.fixup

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
},
88
"image": "defangio/openai-access-gateway",
99
"networks": {
10-
"default": null
10+
"model_provider_private": null
1111
},
1212
"ports": [
1313
{
@@ -32,7 +32,8 @@
3232
},
3333
"image": "my-chat-app",
3434
"networks": {
35-
"default": null
35+
"default": null,
36+
"model_provider_private": null
3637
}
3738
}
3839
}

0 commit comments

Comments
 (0)