diff --git a/loader/loader_test.go b/loader/loader_test.go index 881279ca..58051365 100644 --- a/loader/loader_test.go +++ b/loader/loader_test.go @@ -3862,3 +3862,39 @@ services: InterfaceName: "eth0", }) } + +func TestModel(t *testing.T) { + p, err := loadYAML(` +name: model +services: + test_array: + models: + - foo + + test_mapping: + models: + foo: + endpoint_var: MODEL_URL + +models: + foo: + model: ai/model + context_size: 1024 + runtime_flags: + - "--some-flag" +`) + assert.NilError(t, err) + assert.DeepEqual(t, p.Models["foo"], types.ModelConfig{ + Model: "ai/model", + ContextSize: 1024, + RuntimeFlags: []string{"--some-flag"}, + }) + assert.DeepEqual(t, p.Services["test_array"].Models, map[string]*types.ServiceModelConfig{ + "foo": nil, + }) + assert.DeepEqual(t, p.Services["test_mapping"].Models, map[string]*types.ServiceModelConfig{ + "foo": { + EndpointVariable: "MODEL_URL", + }, + }) +} diff --git a/override/merge.go b/override/merge.go index c6358ed7..6fae6e5f 100644 --- a/override/merge.go +++ b/override/merge.go @@ -63,6 +63,7 @@ func init() { mergeSpecials["services.*.labels"] = mergeToSequence mergeSpecials["services.*.volumes.*.volume.labels"] = mergeToSequence mergeSpecials["services.*.logging"] = mergeLogging + mergeSpecials["services.*.models"] = mergeModels mergeSpecials["services.*.networks"] = mergeNetworks mergeSpecials["services.*.sysctls"] = mergeToSequence mergeSpecials["services.*.tmpfs"] = mergeToSequence @@ -158,6 +159,12 @@ func mergeDependsOn(c any, o any, path tree.Path) (any, error) { return mergeMappings(right, left, path) } +func mergeModels(c any, o any, path tree.Path) (any, error) { + right := convertIntoMapping(c, nil) + left := convertIntoMapping(o, nil) + return mergeMappings(right, left, path) +} + func mergeNetworks(c any, o any, path tree.Path) (any, error) { right := convertIntoMapping(c, nil) left := convertIntoMapping(o, nil) diff --git a/schema/compose-spec.json b/schema/compose-spec.json index dd6f9f88..9aeb151c 100644 --- a/schema/compose-spec.json +++ b/schema/compose-spec.json @@ -36,6 +36,17 @@ "description": "The services that will be used by your application." }, + "models": { + "type": "object", + "patternProperties": { + "^[a-zA-Z0-9._-]+$": { + "$ref": "#/definitions/model" + } + }, + "description": "Language models that will be used by your application." + }, + + "networks": { "type": "object", "patternProperties": { @@ -511,6 +522,27 @@ "type": "string", "description": "Network mode. Values can be 'bridge', 'host', 'none', 'service:[service name]', or 'container:[container name]'." }, + "models": { + "oneOf": [ + {"$ref": "#/definitions/list_of_strings"}, + {"type": "object", + "patternProperties": { + "^[a-zA-Z0-9._-]+$": { + "type": "object", + "properties": { + "endpoint_var": { + "type": "string", + "description": "Environment variable set to AI model endpoint." + } + }, + "additionalProperties": false, + "patternProperties": {"^x-": {}} + } + } + } + ], + "description": "AI Models to use, referencing entries under the top-level models key." + }, "networks": { "oneOf": [ {"$ref": "#/definitions/list_of_strings"}, @@ -1530,6 +1562,32 @@ "patternProperties": {"^x-": {}} }, + "model": { + "type": "object", + "description": "Language Model for the Compose application.", + "properties": { + "name": { + "type": "string", + "description": "Custom name for this model." + }, + "model": { + "type": "string", + "description": "Language Model to run." + }, + "context_size": { + "type": "integer" + }, + "runtime_flags": { + "type": "array", + "items": {"type": "string"}, + "description": "Raw runtime flags to pass to the inference engine." + } + }, + "required": ["model"], + "additionalProperties": false, + "patternProperties": {"^x-": {}} + }, + "command": { "oneOf": [ { diff --git a/transform/canonical.go b/transform/canonical.go index 3f65d117..2754ed3f 100644 --- a/transform/canonical.go +++ b/transform/canonical.go @@ -33,7 +33,8 @@ func init() { transformers["services.*.label_file"] = transformStringOrList transformers["services.*.extends"] = transformExtends transformers["services.*.gpus"] = transformGpus - transformers["services.*.networks"] = transformServiceNetworks + transformers["services.*.networks"] = transformStringSliceToMap + transformers["services.*.models"] = transformStringSliceToMap transformers["services.*.volumes.*"] = transformVolumeMount transformers["services.*.dns"] = transformStringOrList transformers["services.*.devices.*"] = transformDeviceMapping diff --git a/transform/services.go b/transform/services.go index 960c3e7e..d9df42c8 100644 --- a/transform/services.go +++ b/transform/services.go @@ -29,13 +29,13 @@ func transformService(data any, p tree.Path, ignoreParseError bool) (any, error) } } -func transformServiceNetworks(data any, _ tree.Path, _ bool) (any, error) { +func transformStringSliceToMap(data any, _ tree.Path, _ bool) (any, error) { if slice, ok := data.([]any); ok { - networks := make(map[string]any, len(slice)) + mapping := make(map[string]any, len(slice)) for _, net := range slice { - networks[net.(string)] = nil + mapping[net.(string)] = nil } - return networks, nil + return mapping, nil } return data, nil } diff --git a/types/config.go b/types/config.go index 4c0d00a8..9a0fdaf2 100644 --- a/types/config.go +++ b/types/config.go @@ -101,6 +101,8 @@ type Secrets map[string]SecretConfig // Configs is a map of ConfigObjConfig type Configs map[string]ConfigObjConfig +type Models map[string]ModelConfig + // Extensions is a map of custom extension type Extensions map[string]any diff --git a/types/derived.gen.go b/types/derived.gen.go index 77e8a774..199792a3 100644 --- a/types/derived.gen.go +++ b/types/derived.gen.go @@ -36,6 +36,12 @@ func deriveDeepCopyProject(dst, src *Project) { } else { dst.Configs = nil } + if src.Models != nil { + dst.Models = make(map[string]ModelConfig, len(src.Models)) + deriveDeepCopy_4(dst.Models, src.Models) + } else { + dst.Models = nil + } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) src.Extensions.DeepCopy(dst.Extensions) @@ -62,7 +68,7 @@ func deriveDeepCopyProject(dst, src *Project) { } if src.Environment != nil { dst.Environment = make(map[string]string, len(src.Environment)) - deriveDeepCopy_4(dst.Environment, src.Environment) + deriveDeepCopy_5(dst.Environment, src.Environment) } else { dst.Environment = nil } @@ -115,7 +121,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } if src.Annotations != nil { dst.Annotations = make(map[string]string, len(src.Annotations)) - deriveDeepCopy_4(dst.Annotations, src.Annotations) + deriveDeepCopy_5(dst.Annotations, src.Annotations) } else { dst.Annotations = nil } @@ -129,19 +135,19 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.Build = nil } else { dst.Build = new(BuildConfig) - deriveDeepCopy_5(dst.Build, src.Build) + deriveDeepCopy_6(dst.Build, src.Build) } if src.Develop == nil { dst.Develop = nil } else { dst.Develop = new(DevelopConfig) - deriveDeepCopy_6(dst.Develop, src.Develop) + deriveDeepCopy_7(dst.Develop, src.Develop) } if src.BlkioConfig == nil { dst.BlkioConfig = nil } else { dst.BlkioConfig = new(BlkioConfig) - deriveDeepCopy_7(dst.BlkioConfig, src.BlkioConfig) + deriveDeepCopy_8(dst.BlkioConfig, src.BlkioConfig) } if src.CapAdd == nil { dst.CapAdd = nil @@ -224,18 +230,18 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.Configs = make([]ServiceConfigObjConfig, len(src.Configs)) } - deriveDeepCopy_8(dst.Configs, src.Configs) + deriveDeepCopy_9(dst.Configs, src.Configs) } dst.ContainerName = src.ContainerName if src.CredentialSpec == nil { dst.CredentialSpec = nil } else { dst.CredentialSpec = new(CredentialSpecConfig) - deriveDeepCopy_9(dst.CredentialSpec, src.CredentialSpec) + deriveDeepCopy_10(dst.CredentialSpec, src.CredentialSpec) } if src.DependsOn != nil { dst.DependsOn = make(map[string]ServiceDependency, len(src.DependsOn)) - deriveDeepCopy_10(dst.DependsOn, src.DependsOn) + deriveDeepCopy_11(dst.DependsOn, src.DependsOn) } else { dst.DependsOn = nil } @@ -243,7 +249,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.Deploy = nil } else { dst.Deploy = new(DeployConfig) - deriveDeepCopy_11(dst.Deploy, src.Deploy) + deriveDeepCopy_12(dst.Deploy, src.Deploy) } if src.DeviceCgroupRules == nil { dst.DeviceCgroupRules = nil @@ -279,7 +285,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.Devices = make([]DeviceMapping, len(src.Devices)) } - deriveDeepCopy_12(dst.Devices, src.Devices) + deriveDeepCopy_13(dst.Devices, src.Devices) } if src.DNS == nil { dst.DNS = nil @@ -359,11 +365,11 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.Provider = nil } else { dst.Provider = new(ServiceProviderConfig) - deriveDeepCopy_13(dst.Provider, src.Provider) + deriveDeepCopy_14(dst.Provider, src.Provider) } if src.Environment != nil { dst.Environment = make(map[string]*string, len(src.Environment)) - deriveDeepCopy_14(dst.Environment, src.Environment) + deriveDeepCopy_15(dst.Environment, src.Environment) } else { dst.Environment = nil } @@ -429,7 +435,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } if src.ExtraHosts != nil { dst.ExtraHosts = make(map[string][]string, len(src.ExtraHosts)) - deriveDeepCopy_15(dst.ExtraHosts, src.ExtraHosts) + deriveDeepCopy_16(dst.ExtraHosts, src.ExtraHosts) } else { dst.ExtraHosts = nil } @@ -467,14 +473,14 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.Gpus = make([]DeviceRequest, len(src.Gpus)) } - deriveDeepCopy_16(dst.Gpus, src.Gpus) + deriveDeepCopy_17(dst.Gpus, src.Gpus) } dst.Hostname = src.Hostname if src.HealthCheck == nil { dst.HealthCheck = nil } else { dst.HealthCheck = new(HealthCheckConfig) - deriveDeepCopy_17(dst.HealthCheck, src.HealthCheck) + deriveDeepCopy_18(dst.HealthCheck, src.HealthCheck) } dst.Image = src.Image if src.Init == nil { @@ -487,7 +493,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.Isolation = src.Isolation if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } @@ -511,7 +517,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } if src.CustomLabels != nil { dst.CustomLabels = make(map[string]string, len(src.CustomLabels)) - deriveDeepCopy_4(dst.CustomLabels, src.CustomLabels) + deriveDeepCopy_5(dst.CustomLabels, src.CustomLabels) } else { dst.CustomLabels = nil } @@ -537,12 +543,12 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.Logging = nil } else { dst.Logging = new(LoggingConfig) - deriveDeepCopy_18(dst.Logging, src.Logging) + deriveDeepCopy_19(dst.Logging, src.Logging) } dst.LogDriver = src.LogDriver if src.LogOpt != nil { dst.LogOpt = make(map[string]string, len(src.LogOpt)) - deriveDeepCopy_4(dst.LogOpt, src.LogOpt) + deriveDeepCopy_5(dst.LogOpt, src.LogOpt) } else { dst.LogOpt = nil } @@ -551,11 +557,17 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.MemSwapLimit = src.MemSwapLimit dst.MemSwappiness = src.MemSwappiness dst.MacAddress = src.MacAddress + if src.Models != nil { + dst.Models = make(map[string]*ServiceModelConfig, len(src.Models)) + deriveDeepCopy_20(dst.Models, src.Models) + } else { + dst.Models = nil + } dst.Net = src.Net dst.NetworkMode = src.NetworkMode if src.Networks != nil { dst.Networks = make(map[string]*ServiceNetworkConfig, len(src.Networks)) - deriveDeepCopy_19(dst.Networks, src.Networks) + deriveDeepCopy_21(dst.Networks, src.Networks) } else { dst.Networks = nil } @@ -580,7 +592,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.Ports = make([]ServicePortConfig, len(src.Ports)) } - deriveDeepCopy_20(dst.Ports, src.Ports) + deriveDeepCopy_22(dst.Ports, src.Ports) } dst.Privileged = src.Privileged dst.PullPolicy = src.PullPolicy @@ -609,7 +621,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.Secrets = make([]ServiceSecretConfig, len(src.Secrets)) } - deriveDeepCopy_21(dst.Secrets, src.Secrets) + deriveDeepCopy_23(dst.Secrets, src.Secrets) } if src.SecurityOpt == nil { dst.SecurityOpt = nil @@ -640,13 +652,13 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.StopSignal = src.StopSignal if src.StorageOpt != nil { dst.StorageOpt = make(map[string]string, len(src.StorageOpt)) - deriveDeepCopy_4(dst.StorageOpt, src.StorageOpt) + deriveDeepCopy_5(dst.StorageOpt, src.StorageOpt) } else { dst.StorageOpt = nil } if src.Sysctls != nil { dst.Sysctls = make(map[string]string, len(src.Sysctls)) - deriveDeepCopy_4(dst.Sysctls, src.Sysctls) + deriveDeepCopy_5(dst.Sysctls, src.Sysctls) } else { dst.Sysctls = nil } @@ -671,7 +683,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { dst.Tty = src.Tty if src.Ulimits != nil { dst.Ulimits = make(map[string]*UlimitsConfig, len(src.Ulimits)) - deriveDeepCopy_22(dst.Ulimits, src.Ulimits) + deriveDeepCopy_24(dst.Ulimits, src.Ulimits) } else { dst.Ulimits = nil } @@ -696,7 +708,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.Volumes = make([]ServiceVolumeConfig, len(src.Volumes)) } - deriveDeepCopy_23(dst.Volumes, src.Volumes) + deriveDeepCopy_25(dst.Volumes, src.Volumes) } if src.VolumesFrom == nil { dst.VolumesFrom = nil @@ -733,7 +745,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.PostStart = make([]ServiceHook, len(src.PostStart)) } - deriveDeepCopy_24(dst.PostStart, src.PostStart) + deriveDeepCopy_26(dst.PostStart, src.PostStart) } if src.PreStop == nil { dst.PreStop = nil @@ -751,7 +763,7 @@ func deriveDeepCopyService(dst, src *ServiceConfig) { } else { dst.PreStop = make([]ServiceHook, len(src.PreStop)) } - deriveDeepCopy_24(dst.PreStop, src.PreStop) + deriveDeepCopy_26(dst.PreStop, src.PreStop) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -777,7 +789,7 @@ func deriveDeepCopy_(dst, src map[string]NetworkConfig) { for src_key, src_value := range src { func() { field := new(NetworkConfig) - deriveDeepCopy_25(field, &src_value) + deriveDeepCopy_27(field, &src_value) dst[src_key] = *field }() } @@ -788,7 +800,7 @@ func deriveDeepCopy_1(dst, src map[string]VolumeConfig) { for src_key, src_value := range src { func() { field := new(VolumeConfig) - deriveDeepCopy_26(field, &src_value) + deriveDeepCopy_28(field, &src_value) dst[src_key] = *field }() } @@ -799,7 +811,7 @@ func deriveDeepCopy_2(dst, src map[string]SecretConfig) { for src_key, src_value := range src { func() { field := new(SecretConfig) - deriveDeepCopy_27(field, &src_value) + deriveDeepCopy_29(field, &src_value) dst[src_key] = *field }() } @@ -810,21 +822,32 @@ func deriveDeepCopy_3(dst, src map[string]ConfigObjConfig) { for src_key, src_value := range src { func() { field := new(ConfigObjConfig) - deriveDeepCopy_28(field, &src_value) + deriveDeepCopy_30(field, &src_value) dst[src_key] = *field }() } } // deriveDeepCopy_4 recursively copies the contents of src into dst. -func deriveDeepCopy_4(dst, src map[string]string) { +func deriveDeepCopy_4(dst, src map[string]ModelConfig) { for src_key, src_value := range src { - dst[src_key] = src_value + func() { + field := new(ModelConfig) + deriveDeepCopy_31(field, &src_value) + dst[src_key] = *field + }() } } // deriveDeepCopy_5 recursively copies the contents of src into dst. -func deriveDeepCopy_5(dst, src *BuildConfig) { +func deriveDeepCopy_5(dst, src map[string]string) { + for src_key, src_value := range src { + dst[src_key] = src_value + } +} + +// deriveDeepCopy_6 recursively copies the contents of src into dst. +func deriveDeepCopy_6(dst, src *BuildConfig) { dst.Context = src.Context dst.Dockerfile = src.Dockerfile dst.DockerfileInline = src.DockerfileInline @@ -848,7 +871,7 @@ func deriveDeepCopy_5(dst, src *BuildConfig) { } if src.Args != nil { dst.Args = make(map[string]*string, len(src.Args)) - deriveDeepCopy_14(dst.Args, src.Args) + deriveDeepCopy_15(dst.Args, src.Args) } else { dst.Args = nil } @@ -872,7 +895,7 @@ func deriveDeepCopy_5(dst, src *BuildConfig) { } if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } @@ -915,14 +938,14 @@ func deriveDeepCopy_5(dst, src *BuildConfig) { dst.NoCache = src.NoCache if src.AdditionalContexts != nil { dst.AdditionalContexts = make(map[string]string, len(src.AdditionalContexts)) - deriveDeepCopy_4(dst.AdditionalContexts, src.AdditionalContexts) + deriveDeepCopy_5(dst.AdditionalContexts, src.AdditionalContexts) } else { dst.AdditionalContexts = nil } dst.Pull = src.Pull if src.ExtraHosts != nil { dst.ExtraHosts = make(map[string][]string, len(src.ExtraHosts)) - deriveDeepCopy_15(dst.ExtraHosts, src.ExtraHosts) + deriveDeepCopy_16(dst.ExtraHosts, src.ExtraHosts) } else { dst.ExtraHosts = nil } @@ -945,7 +968,7 @@ func deriveDeepCopy_5(dst, src *BuildConfig) { } else { dst.Secrets = make([]ServiceSecretConfig, len(src.Secrets)) } - deriveDeepCopy_21(dst.Secrets, src.Secrets) + deriveDeepCopy_23(dst.Secrets, src.Secrets) } dst.ShmSize = src.ShmSize if src.Tags == nil { @@ -968,7 +991,7 @@ func deriveDeepCopy_5(dst, src *BuildConfig) { } if src.Ulimits != nil { dst.Ulimits = make(map[string]*UlimitsConfig, len(src.Ulimits)) - deriveDeepCopy_22(dst.Ulimits, src.Ulimits) + deriveDeepCopy_24(dst.Ulimits, src.Ulimits) } else { dst.Ulimits = nil } @@ -999,8 +1022,8 @@ func deriveDeepCopy_5(dst, src *BuildConfig) { } } -// deriveDeepCopy_6 recursively copies the contents of src into dst. -func deriveDeepCopy_6(dst, src *DevelopConfig) { +// deriveDeepCopy_7 recursively copies the contents of src into dst. +func deriveDeepCopy_7(dst, src *DevelopConfig) { if src.Watch == nil { dst.Watch = nil } else { @@ -1017,7 +1040,7 @@ func deriveDeepCopy_6(dst, src *DevelopConfig) { } else { dst.Watch = make([]Trigger, len(src.Watch)) } - deriveDeepCopy_29(dst.Watch, src.Watch) + deriveDeepCopy_32(dst.Watch, src.Watch) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -1027,8 +1050,8 @@ func deriveDeepCopy_6(dst, src *DevelopConfig) { } } -// deriveDeepCopy_7 recursively copies the contents of src into dst. -func deriveDeepCopy_7(dst, src *BlkioConfig) { +// deriveDeepCopy_8 recursively copies the contents of src into dst. +func deriveDeepCopy_8(dst, src *BlkioConfig) { dst.Weight = src.Weight if src.WeightDevice == nil { dst.WeightDevice = nil @@ -1046,7 +1069,7 @@ func deriveDeepCopy_7(dst, src *BlkioConfig) { } else { dst.WeightDevice = make([]WeightDevice, len(src.WeightDevice)) } - deriveDeepCopy_30(dst.WeightDevice, src.WeightDevice) + deriveDeepCopy_33(dst.WeightDevice, src.WeightDevice) } if src.DeviceReadBps == nil { dst.DeviceReadBps = nil @@ -1064,7 +1087,7 @@ func deriveDeepCopy_7(dst, src *BlkioConfig) { } else { dst.DeviceReadBps = make([]ThrottleDevice, len(src.DeviceReadBps)) } - deriveDeepCopy_31(dst.DeviceReadBps, src.DeviceReadBps) + deriveDeepCopy_34(dst.DeviceReadBps, src.DeviceReadBps) } if src.DeviceReadIOps == nil { dst.DeviceReadIOps = nil @@ -1082,7 +1105,7 @@ func deriveDeepCopy_7(dst, src *BlkioConfig) { } else { dst.DeviceReadIOps = make([]ThrottleDevice, len(src.DeviceReadIOps)) } - deriveDeepCopy_31(dst.DeviceReadIOps, src.DeviceReadIOps) + deriveDeepCopy_34(dst.DeviceReadIOps, src.DeviceReadIOps) } if src.DeviceWriteBps == nil { dst.DeviceWriteBps = nil @@ -1100,7 +1123,7 @@ func deriveDeepCopy_7(dst, src *BlkioConfig) { } else { dst.DeviceWriteBps = make([]ThrottleDevice, len(src.DeviceWriteBps)) } - deriveDeepCopy_31(dst.DeviceWriteBps, src.DeviceWriteBps) + deriveDeepCopy_34(dst.DeviceWriteBps, src.DeviceWriteBps) } if src.DeviceWriteIOps == nil { dst.DeviceWriteIOps = nil @@ -1118,7 +1141,7 @@ func deriveDeepCopy_7(dst, src *BlkioConfig) { } else { dst.DeviceWriteIOps = make([]ThrottleDevice, len(src.DeviceWriteIOps)) } - deriveDeepCopy_31(dst.DeviceWriteIOps, src.DeviceWriteIOps) + deriveDeepCopy_34(dst.DeviceWriteIOps, src.DeviceWriteIOps) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -1128,19 +1151,19 @@ func deriveDeepCopy_7(dst, src *BlkioConfig) { } } -// deriveDeepCopy_8 recursively copies the contents of src into dst. -func deriveDeepCopy_8(dst, src []ServiceConfigObjConfig) { +// deriveDeepCopy_9 recursively copies the contents of src into dst. +func deriveDeepCopy_9(dst, src []ServiceConfigObjConfig) { for src_i, src_value := range src { func() { field := new(ServiceConfigObjConfig) - deriveDeepCopy_32(field, &src_value) + deriveDeepCopy_35(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_9 recursively copies the contents of src into dst. -func deriveDeepCopy_9(dst, src *CredentialSpecConfig) { +// deriveDeepCopy_10 recursively copies the contents of src into dst. +func deriveDeepCopy_10(dst, src *CredentialSpecConfig) { dst.Config = src.Config dst.File = src.File dst.Registry = src.Registry @@ -1152,19 +1175,19 @@ func deriveDeepCopy_9(dst, src *CredentialSpecConfig) { } } -// deriveDeepCopy_10 recursively copies the contents of src into dst. -func deriveDeepCopy_10(dst, src map[string]ServiceDependency) { +// deriveDeepCopy_11 recursively copies the contents of src into dst. +func deriveDeepCopy_11(dst, src map[string]ServiceDependency) { for src_key, src_value := range src { func() { field := new(ServiceDependency) - deriveDeepCopy_33(field, &src_value) + deriveDeepCopy_36(field, &src_value) dst[src_key] = *field }() } } -// deriveDeepCopy_11 recursively copies the contents of src into dst. -func deriveDeepCopy_11(dst, src *DeployConfig) { +// deriveDeepCopy_12 recursively copies the contents of src into dst. +func deriveDeepCopy_12(dst, src *DeployConfig) { dst.Mode = src.Mode if src.Replicas == nil { dst.Replicas = nil @@ -1174,7 +1197,7 @@ func deriveDeepCopy_11(dst, src *DeployConfig) { } if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } @@ -1182,28 +1205,28 @@ func deriveDeepCopy_11(dst, src *DeployConfig) { dst.UpdateConfig = nil } else { dst.UpdateConfig = new(UpdateConfig) - deriveDeepCopy_34(dst.UpdateConfig, src.UpdateConfig) + deriveDeepCopy_37(dst.UpdateConfig, src.UpdateConfig) } if src.RollbackConfig == nil { dst.RollbackConfig = nil } else { dst.RollbackConfig = new(UpdateConfig) - deriveDeepCopy_34(dst.RollbackConfig, src.RollbackConfig) + deriveDeepCopy_37(dst.RollbackConfig, src.RollbackConfig) } func() { field := new(Resources) - deriveDeepCopy_35(field, &src.Resources) + deriveDeepCopy_38(field, &src.Resources) dst.Resources = *field }() if src.RestartPolicy == nil { dst.RestartPolicy = nil } else { dst.RestartPolicy = new(RestartPolicy) - deriveDeepCopy_36(dst.RestartPolicy, src.RestartPolicy) + deriveDeepCopy_39(dst.RestartPolicy, src.RestartPolicy) } func() { field := new(Placement) - deriveDeepCopy_37(field, &src.Placement) + deriveDeepCopy_40(field, &src.Placement) dst.Placement = *field }() dst.EndpointMode = src.EndpointMode @@ -1215,23 +1238,23 @@ func deriveDeepCopy_11(dst, src *DeployConfig) { } } -// deriveDeepCopy_12 recursively copies the contents of src into dst. -func deriveDeepCopy_12(dst, src []DeviceMapping) { +// deriveDeepCopy_13 recursively copies the contents of src into dst. +func deriveDeepCopy_13(dst, src []DeviceMapping) { for src_i, src_value := range src { func() { field := new(DeviceMapping) - deriveDeepCopy_38(field, &src_value) + deriveDeepCopy_41(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_13 recursively copies the contents of src into dst. -func deriveDeepCopy_13(dst, src *ServiceProviderConfig) { +// deriveDeepCopy_14 recursively copies the contents of src into dst. +func deriveDeepCopy_14(dst, src *ServiceProviderConfig) { dst.Type = src.Type if src.Options != nil { dst.Options = make(map[string][]string, len(src.Options)) - deriveDeepCopy_15(dst.Options, src.Options) + deriveDeepCopy_16(dst.Options, src.Options) } else { dst.Options = nil } @@ -1243,8 +1266,8 @@ func deriveDeepCopy_13(dst, src *ServiceProviderConfig) { } } -// deriveDeepCopy_14 recursively copies the contents of src into dst. -func deriveDeepCopy_14(dst, src map[string]*string) { +// deriveDeepCopy_15 recursively copies the contents of src into dst. +func deriveDeepCopy_15(dst, src map[string]*string) { for src_key, src_value := range src { if src_value == nil { dst[src_key] = nil @@ -1258,8 +1281,8 @@ func deriveDeepCopy_14(dst, src map[string]*string) { } } -// deriveDeepCopy_15 recursively copies the contents of src into dst. -func deriveDeepCopy_15(dst, src map[string][]string) { +// deriveDeepCopy_16 recursively copies the contents of src into dst. +func deriveDeepCopy_16(dst, src map[string][]string) { for src_key, src_value := range src { if src_value == nil { dst[src_key] = nil @@ -1285,19 +1308,19 @@ func deriveDeepCopy_15(dst, src map[string][]string) { } } -// deriveDeepCopy_16 recursively copies the contents of src into dst. -func deriveDeepCopy_16(dst, src []DeviceRequest) { +// deriveDeepCopy_17 recursively copies the contents of src into dst. +func deriveDeepCopy_17(dst, src []DeviceRequest) { for src_i, src_value := range src { func() { field := new(DeviceRequest) - deriveDeepCopy_39(field, &src_value) + deriveDeepCopy_42(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_17 recursively copies the contents of src into dst. -func deriveDeepCopy_17(dst, src *HealthCheckConfig) { +// deriveDeepCopy_18 recursively copies the contents of src into dst. +func deriveDeepCopy_18(dst, src *HealthCheckConfig) { if src.Test == nil { dst.Test = nil } else { @@ -1355,12 +1378,12 @@ func deriveDeepCopy_17(dst, src *HealthCheckConfig) { } } -// deriveDeepCopy_18 recursively copies the contents of src into dst. -func deriveDeepCopy_18(dst, src *LoggingConfig) { +// deriveDeepCopy_19 recursively copies the contents of src into dst. +func deriveDeepCopy_19(dst, src *LoggingConfig) { dst.Driver = src.Driver if src.Options != nil { dst.Options = make(map[string]string, len(src.Options)) - deriveDeepCopy_4(dst.Options, src.Options) + deriveDeepCopy_5(dst.Options, src.Options) } else { dst.Options = nil } @@ -1372,8 +1395,23 @@ func deriveDeepCopy_18(dst, src *LoggingConfig) { } } -// deriveDeepCopy_19 recursively copies the contents of src into dst. -func deriveDeepCopy_19(dst, src map[string]*ServiceNetworkConfig) { +// deriveDeepCopy_20 recursively copies the contents of src into dst. +func deriveDeepCopy_20(dst, src map[string]*ServiceModelConfig) { + for src_key, src_value := range src { + if src_value == nil { + dst[src_key] = nil + } + if src_value == nil { + dst[src_key] = nil + } else { + dst[src_key] = new(ServiceModelConfig) + deriveDeepCopy_43(dst[src_key], src_value) + } + } +} + +// deriveDeepCopy_21 recursively copies the contents of src into dst. +func deriveDeepCopy_21(dst, src map[string]*ServiceNetworkConfig) { for src_key, src_value := range src { if src_value == nil { dst[src_key] = nil @@ -1382,35 +1420,35 @@ func deriveDeepCopy_19(dst, src map[string]*ServiceNetworkConfig) { dst[src_key] = nil } else { dst[src_key] = new(ServiceNetworkConfig) - deriveDeepCopy_40(dst[src_key], src_value) + deriveDeepCopy_44(dst[src_key], src_value) } } } -// deriveDeepCopy_20 recursively copies the contents of src into dst. -func deriveDeepCopy_20(dst, src []ServicePortConfig) { +// deriveDeepCopy_22 recursively copies the contents of src into dst. +func deriveDeepCopy_22(dst, src []ServicePortConfig) { for src_i, src_value := range src { func() { field := new(ServicePortConfig) - deriveDeepCopy_41(field, &src_value) + deriveDeepCopy_45(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_21 recursively copies the contents of src into dst. -func deriveDeepCopy_21(dst, src []ServiceSecretConfig) { +// deriveDeepCopy_23 recursively copies the contents of src into dst. +func deriveDeepCopy_23(dst, src []ServiceSecretConfig) { for src_i, src_value := range src { func() { field := new(ServiceSecretConfig) - deriveDeepCopy_42(field, &src_value) + deriveDeepCopy_46(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_22 recursively copies the contents of src into dst. -func deriveDeepCopy_22(dst, src map[string]*UlimitsConfig) { +// deriveDeepCopy_24 recursively copies the contents of src into dst. +func deriveDeepCopy_24(dst, src map[string]*UlimitsConfig) { for src_key, src_value := range src { if src_value == nil { dst[src_key] = nil @@ -1419,46 +1457,46 @@ func deriveDeepCopy_22(dst, src map[string]*UlimitsConfig) { dst[src_key] = nil } else { dst[src_key] = new(UlimitsConfig) - deriveDeepCopy_43(dst[src_key], src_value) + deriveDeepCopy_47(dst[src_key], src_value) } } } -// deriveDeepCopy_23 recursively copies the contents of src into dst. -func deriveDeepCopy_23(dst, src []ServiceVolumeConfig) { +// deriveDeepCopy_25 recursively copies the contents of src into dst. +func deriveDeepCopy_25(dst, src []ServiceVolumeConfig) { for src_i, src_value := range src { func() { field := new(ServiceVolumeConfig) - deriveDeepCopy_44(field, &src_value) + deriveDeepCopy_48(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_24 recursively copies the contents of src into dst. -func deriveDeepCopy_24(dst, src []ServiceHook) { +// deriveDeepCopy_26 recursively copies the contents of src into dst. +func deriveDeepCopy_26(dst, src []ServiceHook) { for src_i, src_value := range src { func() { field := new(ServiceHook) - deriveDeepCopy_45(field, &src_value) + deriveDeepCopy_49(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_25 recursively copies the contents of src into dst. -func deriveDeepCopy_25(dst, src *NetworkConfig) { +// deriveDeepCopy_27 recursively copies the contents of src into dst. +func deriveDeepCopy_27(dst, src *NetworkConfig) { dst.Name = src.Name dst.Driver = src.Driver if src.DriverOpts != nil { dst.DriverOpts = make(map[string]string, len(src.DriverOpts)) - deriveDeepCopy_4(dst.DriverOpts, src.DriverOpts) + deriveDeepCopy_5(dst.DriverOpts, src.DriverOpts) } else { dst.DriverOpts = nil } func() { field := new(IPAMConfig) - deriveDeepCopy_46(field, &src.Ipam) + deriveDeepCopy_50(field, &src.Ipam) dst.Ipam = *field }() dst.External = src.External @@ -1466,13 +1504,13 @@ func deriveDeepCopy_25(dst, src *NetworkConfig) { dst.Attachable = src.Attachable if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } if src.CustomLabels != nil { dst.CustomLabels = make(map[string]string, len(src.CustomLabels)) - deriveDeepCopy_4(dst.CustomLabels, src.CustomLabels) + deriveDeepCopy_5(dst.CustomLabels, src.CustomLabels) } else { dst.CustomLabels = nil } @@ -1496,26 +1534,26 @@ func deriveDeepCopy_25(dst, src *NetworkConfig) { } } -// deriveDeepCopy_26 recursively copies the contents of src into dst. -func deriveDeepCopy_26(dst, src *VolumeConfig) { +// deriveDeepCopy_28 recursively copies the contents of src into dst. +func deriveDeepCopy_28(dst, src *VolumeConfig) { dst.Name = src.Name dst.Driver = src.Driver if src.DriverOpts != nil { dst.DriverOpts = make(map[string]string, len(src.DriverOpts)) - deriveDeepCopy_4(dst.DriverOpts, src.DriverOpts) + deriveDeepCopy_5(dst.DriverOpts, src.DriverOpts) } else { dst.DriverOpts = nil } dst.External = src.External if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } if src.CustomLabels != nil { dst.CustomLabels = make(map[string]string, len(src.CustomLabels)) - deriveDeepCopy_4(dst.CustomLabels, src.CustomLabels) + deriveDeepCopy_5(dst.CustomLabels, src.CustomLabels) } else { dst.CustomLabels = nil } @@ -1527,8 +1565,8 @@ func deriveDeepCopy_26(dst, src *VolumeConfig) { } } -// deriveDeepCopy_27 recursively copies the contents of src into dst. -func deriveDeepCopy_27(dst, src *SecretConfig) { +// deriveDeepCopy_29 recursively copies the contents of src into dst. +func deriveDeepCopy_29(dst, src *SecretConfig) { dst.Name = src.Name dst.File = src.File dst.Environment = src.Environment @@ -1537,14 +1575,14 @@ func deriveDeepCopy_27(dst, src *SecretConfig) { dst.External = src.External if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } dst.Driver = src.Driver if src.DriverOpts != nil { dst.DriverOpts = make(map[string]string, len(src.DriverOpts)) - deriveDeepCopy_4(dst.DriverOpts, src.DriverOpts) + deriveDeepCopy_5(dst.DriverOpts, src.DriverOpts) } else { dst.DriverOpts = nil } @@ -1557,8 +1595,8 @@ func deriveDeepCopy_27(dst, src *SecretConfig) { } } -// deriveDeepCopy_28 recursively copies the contents of src into dst. -func deriveDeepCopy_28(dst, src *ConfigObjConfig) { +// deriveDeepCopy_30 recursively copies the contents of src into dst. +func deriveDeepCopy_30(dst, src *ConfigObjConfig) { dst.Name = src.Name dst.File = src.File dst.Environment = src.Environment @@ -1567,14 +1605,14 @@ func deriveDeepCopy_28(dst, src *ConfigObjConfig) { dst.External = src.External if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } dst.Driver = src.Driver if src.DriverOpts != nil { dst.DriverOpts = make(map[string]string, len(src.DriverOpts)) - deriveDeepCopy_4(dst.DriverOpts, src.DriverOpts) + deriveDeepCopy_5(dst.DriverOpts, src.DriverOpts) } else { dst.DriverOpts = nil } @@ -1587,41 +1625,72 @@ func deriveDeepCopy_28(dst, src *ConfigObjConfig) { } } -// deriveDeepCopy_29 recursively copies the contents of src into dst. -func deriveDeepCopy_29(dst, src []Trigger) { +// deriveDeepCopy_31 recursively copies the contents of src into dst. +func deriveDeepCopy_31(dst, src *ModelConfig) { + dst.Name = src.Name + dst.Model = src.Model + dst.ContextSize = src.ContextSize + if src.RuntimeFlags == nil { + dst.RuntimeFlags = nil + } else { + if dst.RuntimeFlags != nil { + if len(src.RuntimeFlags) > len(dst.RuntimeFlags) { + if cap(dst.RuntimeFlags) >= len(src.RuntimeFlags) { + dst.RuntimeFlags = (dst.RuntimeFlags)[:len(src.RuntimeFlags)] + } else { + dst.RuntimeFlags = make([]string, len(src.RuntimeFlags)) + } + } else if len(src.RuntimeFlags) < len(dst.RuntimeFlags) { + dst.RuntimeFlags = (dst.RuntimeFlags)[:len(src.RuntimeFlags)] + } + } else { + dst.RuntimeFlags = make([]string, len(src.RuntimeFlags)) + } + copy(dst.RuntimeFlags, src.RuntimeFlags) + } + if src.Extensions != nil { + dst.Extensions = make(map[string]any, len(src.Extensions)) + src.Extensions.DeepCopy(dst.Extensions) + } else { + dst.Extensions = nil + } +} + +// deriveDeepCopy_32 recursively copies the contents of src into dst. +func deriveDeepCopy_32(dst, src []Trigger) { for src_i, src_value := range src { func() { field := new(Trigger) - deriveDeepCopy_47(field, &src_value) + deriveDeepCopy_51(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_30 recursively copies the contents of src into dst. -func deriveDeepCopy_30(dst, src []WeightDevice) { +// deriveDeepCopy_33 recursively copies the contents of src into dst. +func deriveDeepCopy_33(dst, src []WeightDevice) { for src_i, src_value := range src { func() { field := new(WeightDevice) - deriveDeepCopy_48(field, &src_value) + deriveDeepCopy_52(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_31 recursively copies the contents of src into dst. -func deriveDeepCopy_31(dst, src []ThrottleDevice) { +// deriveDeepCopy_34 recursively copies the contents of src into dst. +func deriveDeepCopy_34(dst, src []ThrottleDevice) { for src_i, src_value := range src { func() { field := new(ThrottleDevice) - deriveDeepCopy_49(field, &src_value) + deriveDeepCopy_53(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_32 recursively copies the contents of src into dst. -func deriveDeepCopy_32(dst, src *ServiceConfigObjConfig) { +// deriveDeepCopy_35 recursively copies the contents of src into dst. +func deriveDeepCopy_35(dst, src *ServiceConfigObjConfig) { dst.Source = src.Source dst.Target = src.Target dst.UID = src.UID @@ -1640,8 +1709,8 @@ func deriveDeepCopy_32(dst, src *ServiceConfigObjConfig) { } } -// deriveDeepCopy_33 recursively copies the contents of src into dst. -func deriveDeepCopy_33(dst, src *ServiceDependency) { +// deriveDeepCopy_36 recursively copies the contents of src into dst. +func deriveDeepCopy_36(dst, src *ServiceDependency) { dst.Condition = src.Condition dst.Restart = src.Restart if src.Extensions != nil { @@ -1653,8 +1722,8 @@ func deriveDeepCopy_33(dst, src *ServiceDependency) { dst.Required = src.Required } -// deriveDeepCopy_34 recursively copies the contents of src into dst. -func deriveDeepCopy_34(dst, src *UpdateConfig) { +// deriveDeepCopy_37 recursively copies the contents of src into dst. +func deriveDeepCopy_37(dst, src *UpdateConfig) { if src.Parallelism == nil { dst.Parallelism = nil } else { @@ -1674,19 +1743,19 @@ func deriveDeepCopy_34(dst, src *UpdateConfig) { } } -// deriveDeepCopy_35 recursively copies the contents of src into dst. -func deriveDeepCopy_35(dst, src *Resources) { +// deriveDeepCopy_38 recursively copies the contents of src into dst. +func deriveDeepCopy_38(dst, src *Resources) { if src.Limits == nil { dst.Limits = nil } else { dst.Limits = new(Resource) - deriveDeepCopy_50(dst.Limits, src.Limits) + deriveDeepCopy_54(dst.Limits, src.Limits) } if src.Reservations == nil { dst.Reservations = nil } else { dst.Reservations = new(Resource) - deriveDeepCopy_50(dst.Reservations, src.Reservations) + deriveDeepCopy_54(dst.Reservations, src.Reservations) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -1696,8 +1765,8 @@ func deriveDeepCopy_35(dst, src *Resources) { } } -// deriveDeepCopy_36 recursively copies the contents of src into dst. -func deriveDeepCopy_36(dst, src *RestartPolicy) { +// deriveDeepCopy_39 recursively copies the contents of src into dst. +func deriveDeepCopy_39(dst, src *RestartPolicy) { dst.Condition = src.Condition if src.Delay == nil { dst.Delay = nil @@ -1725,8 +1794,8 @@ func deriveDeepCopy_36(dst, src *RestartPolicy) { } } -// deriveDeepCopy_37 recursively copies the contents of src into dst. -func deriveDeepCopy_37(dst, src *Placement) { +// deriveDeepCopy_40 recursively copies the contents of src into dst. +func deriveDeepCopy_40(dst, src *Placement) { if src.Constraints == nil { dst.Constraints = nil } else { @@ -1761,7 +1830,7 @@ func deriveDeepCopy_37(dst, src *Placement) { } else { dst.Preferences = make([]PlacementPreferences, len(src.Preferences)) } - deriveDeepCopy_51(dst.Preferences, src.Preferences) + deriveDeepCopy_55(dst.Preferences, src.Preferences) } dst.MaxReplicas = src.MaxReplicas if src.Extensions != nil { @@ -1772,8 +1841,8 @@ func deriveDeepCopy_37(dst, src *Placement) { } } -// deriveDeepCopy_38 recursively copies the contents of src into dst. -func deriveDeepCopy_38(dst, src *DeviceMapping) { +// deriveDeepCopy_41 recursively copies the contents of src into dst. +func deriveDeepCopy_41(dst, src *DeviceMapping) { dst.Source = src.Source dst.Target = src.Target dst.Permissions = src.Permissions @@ -1785,8 +1854,8 @@ func deriveDeepCopy_38(dst, src *DeviceMapping) { } } -// deriveDeepCopy_39 recursively copies the contents of src into dst. -func deriveDeepCopy_39(dst, src *DeviceRequest) { +// deriveDeepCopy_42 recursively copies the contents of src into dst. +func deriveDeepCopy_42(dst, src *DeviceRequest) { if src.Capabilities == nil { dst.Capabilities = nil } else { @@ -1827,14 +1896,25 @@ func deriveDeepCopy_39(dst, src *DeviceRequest) { } if src.Options != nil { dst.Options = make(map[string]string, len(src.Options)) - deriveDeepCopy_4(dst.Options, src.Options) + deriveDeepCopy_5(dst.Options, src.Options) } else { dst.Options = nil } } -// deriveDeepCopy_40 recursively copies the contents of src into dst. -func deriveDeepCopy_40(dst, src *ServiceNetworkConfig) { +// deriveDeepCopy_43 recursively copies the contents of src into dst. +func deriveDeepCopy_43(dst, src *ServiceModelConfig) { + dst.EndpointVariable = src.EndpointVariable + if src.Extensions != nil { + dst.Extensions = make(map[string]any, len(src.Extensions)) + src.Extensions.DeepCopy(dst.Extensions) + } else { + dst.Extensions = nil + } +} + +// deriveDeepCopy_44 recursively copies the contents of src into dst. +func deriveDeepCopy_44(dst, src *ServiceNetworkConfig) { if src.Aliases == nil { dst.Aliases = nil } else { @@ -1855,7 +1935,7 @@ func deriveDeepCopy_40(dst, src *ServiceNetworkConfig) { } if src.DriverOpts != nil { dst.DriverOpts = make(map[string]string, len(src.DriverOpts)) - deriveDeepCopy_4(dst.DriverOpts, src.DriverOpts) + deriveDeepCopy_5(dst.DriverOpts, src.DriverOpts) } else { dst.DriverOpts = nil } @@ -1891,8 +1971,8 @@ func deriveDeepCopy_40(dst, src *ServiceNetworkConfig) { } } -// deriveDeepCopy_41 recursively copies the contents of src into dst. -func deriveDeepCopy_41(dst, src *ServicePortConfig) { +// deriveDeepCopy_45 recursively copies the contents of src into dst. +func deriveDeepCopy_45(dst, src *ServicePortConfig) { dst.Name = src.Name dst.Mode = src.Mode dst.HostIP = src.HostIP @@ -1908,8 +1988,8 @@ func deriveDeepCopy_41(dst, src *ServicePortConfig) { } } -// deriveDeepCopy_42 recursively copies the contents of src into dst. -func deriveDeepCopy_42(dst, src *ServiceSecretConfig) { +// deriveDeepCopy_46 recursively copies the contents of src into dst. +func deriveDeepCopy_46(dst, src *ServiceSecretConfig) { dst.Source = src.Source dst.Target = src.Target dst.UID = src.UID @@ -1928,8 +2008,8 @@ func deriveDeepCopy_42(dst, src *ServiceSecretConfig) { } } -// deriveDeepCopy_43 recursively copies the contents of src into dst. -func deriveDeepCopy_43(dst, src *UlimitsConfig) { +// deriveDeepCopy_47 recursively copies the contents of src into dst. +func deriveDeepCopy_47(dst, src *UlimitsConfig) { dst.Single = src.Single dst.Soft = src.Soft dst.Hard = src.Hard @@ -1941,8 +2021,8 @@ func deriveDeepCopy_43(dst, src *UlimitsConfig) { } } -// deriveDeepCopy_44 recursively copies the contents of src into dst. -func deriveDeepCopy_44(dst, src *ServiceVolumeConfig) { +// deriveDeepCopy_48 recursively copies the contents of src into dst. +func deriveDeepCopy_48(dst, src *ServiceVolumeConfig) { dst.Type = src.Type dst.Source = src.Source dst.Target = src.Target @@ -1952,25 +2032,25 @@ func deriveDeepCopy_44(dst, src *ServiceVolumeConfig) { dst.Bind = nil } else { dst.Bind = new(ServiceVolumeBind) - deriveDeepCopy_52(dst.Bind, src.Bind) + deriveDeepCopy_56(dst.Bind, src.Bind) } if src.Volume == nil { dst.Volume = nil } else { dst.Volume = new(ServiceVolumeVolume) - deriveDeepCopy_53(dst.Volume, src.Volume) + deriveDeepCopy_57(dst.Volume, src.Volume) } if src.Tmpfs == nil { dst.Tmpfs = nil } else { dst.Tmpfs = new(ServiceVolumeTmpfs) - deriveDeepCopy_54(dst.Tmpfs, src.Tmpfs) + deriveDeepCopy_58(dst.Tmpfs, src.Tmpfs) } if src.Image == nil { dst.Image = nil } else { dst.Image = new(ServiceVolumeImage) - deriveDeepCopy_55(dst.Image, src.Image) + deriveDeepCopy_59(dst.Image, src.Image) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -1980,8 +2060,8 @@ func deriveDeepCopy_44(dst, src *ServiceVolumeConfig) { } } -// deriveDeepCopy_45 recursively copies the contents of src into dst. -func deriveDeepCopy_45(dst, src *ServiceHook) { +// deriveDeepCopy_49 recursively copies the contents of src into dst. +func deriveDeepCopy_49(dst, src *ServiceHook) { if src.Command == nil { dst.Command = nil } else { @@ -2005,7 +2085,7 @@ func deriveDeepCopy_45(dst, src *ServiceHook) { dst.WorkingDir = src.WorkingDir if src.Environment != nil { dst.Environment = make(map[string]*string, len(src.Environment)) - deriveDeepCopy_14(dst.Environment, src.Environment) + deriveDeepCopy_15(dst.Environment, src.Environment) } else { dst.Environment = nil } @@ -2017,8 +2097,8 @@ func deriveDeepCopy_45(dst, src *ServiceHook) { } } -// deriveDeepCopy_46 recursively copies the contents of src into dst. -func deriveDeepCopy_46(dst, src *IPAMConfig) { +// deriveDeepCopy_50 recursively copies the contents of src into dst. +func deriveDeepCopy_50(dst, src *IPAMConfig) { dst.Driver = src.Driver if src.Config == nil { dst.Config = nil @@ -2036,7 +2116,7 @@ func deriveDeepCopy_46(dst, src *IPAMConfig) { } else { dst.Config = make([]*IPAMPool, len(src.Config)) } - deriveDeepCopy_56(dst.Config, src.Config) + deriveDeepCopy_60(dst.Config, src.Config) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -2046,14 +2126,14 @@ func deriveDeepCopy_46(dst, src *IPAMConfig) { } } -// deriveDeepCopy_47 recursively copies the contents of src into dst. -func deriveDeepCopy_47(dst, src *Trigger) { +// deriveDeepCopy_51 recursively copies the contents of src into dst. +func deriveDeepCopy_51(dst, src *Trigger) { dst.Path = src.Path dst.Action = src.Action dst.Target = src.Target func() { field := new(ServiceHook) - deriveDeepCopy_45(field, &src.Exec) + deriveDeepCopy_49(field, &src.Exec) dst.Exec = *field }() if src.Include == nil { @@ -2100,8 +2180,8 @@ func deriveDeepCopy_47(dst, src *Trigger) { } } -// deriveDeepCopy_48 recursively copies the contents of src into dst. -func deriveDeepCopy_48(dst, src *WeightDevice) { +// deriveDeepCopy_52 recursively copies the contents of src into dst. +func deriveDeepCopy_52(dst, src *WeightDevice) { dst.Path = src.Path dst.Weight = src.Weight if src.Extensions != nil { @@ -2112,8 +2192,8 @@ func deriveDeepCopy_48(dst, src *WeightDevice) { } } -// deriveDeepCopy_49 recursively copies the contents of src into dst. -func deriveDeepCopy_49(dst, src *ThrottleDevice) { +// deriveDeepCopy_53 recursively copies the contents of src into dst. +func deriveDeepCopy_53(dst, src *ThrottleDevice) { dst.Path = src.Path dst.Rate = src.Rate if src.Extensions != nil { @@ -2124,8 +2204,8 @@ func deriveDeepCopy_49(dst, src *ThrottleDevice) { } } -// deriveDeepCopy_50 recursively copies the contents of src into dst. -func deriveDeepCopy_50(dst, src *Resource) { +// deriveDeepCopy_54 recursively copies the contents of src into dst. +func deriveDeepCopy_54(dst, src *Resource) { dst.NanoCPUs = src.NanoCPUs dst.MemoryBytes = src.MemoryBytes dst.Pids = src.Pids @@ -2145,7 +2225,7 @@ func deriveDeepCopy_50(dst, src *Resource) { } else { dst.Devices = make([]DeviceRequest, len(src.Devices)) } - deriveDeepCopy_16(dst.Devices, src.Devices) + deriveDeepCopy_17(dst.Devices, src.Devices) } if src.GenericResources == nil { dst.GenericResources = nil @@ -2163,7 +2243,7 @@ func deriveDeepCopy_50(dst, src *Resource) { } else { dst.GenericResources = make([]GenericResource, len(src.GenericResources)) } - deriveDeepCopy_57(dst.GenericResources, src.GenericResources) + deriveDeepCopy_61(dst.GenericResources, src.GenericResources) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -2173,19 +2253,19 @@ func deriveDeepCopy_50(dst, src *Resource) { } } -// deriveDeepCopy_51 recursively copies the contents of src into dst. -func deriveDeepCopy_51(dst, src []PlacementPreferences) { +// deriveDeepCopy_55 recursively copies the contents of src into dst. +func deriveDeepCopy_55(dst, src []PlacementPreferences) { for src_i, src_value := range src { func() { field := new(PlacementPreferences) - deriveDeepCopy_58(field, &src_value) + deriveDeepCopy_62(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_52 recursively copies the contents of src into dst. -func deriveDeepCopy_52(dst, src *ServiceVolumeBind) { +// deriveDeepCopy_56 recursively copies the contents of src into dst. +func deriveDeepCopy_56(dst, src *ServiceVolumeBind) { dst.SELinux = src.SELinux dst.Propagation = src.Propagation dst.CreateHostPath = src.CreateHostPath @@ -2198,11 +2278,11 @@ func deriveDeepCopy_52(dst, src *ServiceVolumeBind) { } } -// deriveDeepCopy_53 recursively copies the contents of src into dst. -func deriveDeepCopy_53(dst, src *ServiceVolumeVolume) { +// deriveDeepCopy_57 recursively copies the contents of src into dst. +func deriveDeepCopy_57(dst, src *ServiceVolumeVolume) { if src.Labels != nil { dst.Labels = make(map[string]string, len(src.Labels)) - deriveDeepCopy_4(dst.Labels, src.Labels) + deriveDeepCopy_5(dst.Labels, src.Labels) } else { dst.Labels = nil } @@ -2216,8 +2296,8 @@ func deriveDeepCopy_53(dst, src *ServiceVolumeVolume) { } } -// deriveDeepCopy_54 recursively copies the contents of src into dst. -func deriveDeepCopy_54(dst, src *ServiceVolumeTmpfs) { +// deriveDeepCopy_58 recursively copies the contents of src into dst. +func deriveDeepCopy_58(dst, src *ServiceVolumeTmpfs) { dst.Size = src.Size dst.Mode = src.Mode if src.Extensions != nil { @@ -2228,8 +2308,8 @@ func deriveDeepCopy_54(dst, src *ServiceVolumeTmpfs) { } } -// deriveDeepCopy_55 recursively copies the contents of src into dst. -func deriveDeepCopy_55(dst, src *ServiceVolumeImage) { +// deriveDeepCopy_59 recursively copies the contents of src into dst. +func deriveDeepCopy_59(dst, src *ServiceVolumeImage) { dst.SubPath = src.SubPath if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -2239,31 +2319,31 @@ func deriveDeepCopy_55(dst, src *ServiceVolumeImage) { } } -// deriveDeepCopy_56 recursively copies the contents of src into dst. -func deriveDeepCopy_56(dst, src []*IPAMPool) { +// deriveDeepCopy_60 recursively copies the contents of src into dst. +func deriveDeepCopy_60(dst, src []*IPAMPool) { for src_i, src_value := range src { if src_value == nil { dst[src_i] = nil } else { dst[src_i] = new(IPAMPool) - deriveDeepCopy_59(dst[src_i], src_value) + deriveDeepCopy_63(dst[src_i], src_value) } } } -// deriveDeepCopy_57 recursively copies the contents of src into dst. -func deriveDeepCopy_57(dst, src []GenericResource) { +// deriveDeepCopy_61 recursively copies the contents of src into dst. +func deriveDeepCopy_61(dst, src []GenericResource) { for src_i, src_value := range src { func() { field := new(GenericResource) - deriveDeepCopy_60(field, &src_value) + deriveDeepCopy_64(field, &src_value) dst[src_i] = *field }() } } -// deriveDeepCopy_58 recursively copies the contents of src into dst. -func deriveDeepCopy_58(dst, src *PlacementPreferences) { +// deriveDeepCopy_62 recursively copies the contents of src into dst. +func deriveDeepCopy_62(dst, src *PlacementPreferences) { dst.Spread = src.Spread if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -2273,14 +2353,14 @@ func deriveDeepCopy_58(dst, src *PlacementPreferences) { } } -// deriveDeepCopy_59 recursively copies the contents of src into dst. -func deriveDeepCopy_59(dst, src *IPAMPool) { +// deriveDeepCopy_63 recursively copies the contents of src into dst. +func deriveDeepCopy_63(dst, src *IPAMPool) { dst.Subnet = src.Subnet dst.Gateway = src.Gateway dst.IPRange = src.IPRange if src.AuxiliaryAddresses != nil { dst.AuxiliaryAddresses = make(map[string]string, len(src.AuxiliaryAddresses)) - deriveDeepCopy_4(dst.AuxiliaryAddresses, src.AuxiliaryAddresses) + deriveDeepCopy_5(dst.AuxiliaryAddresses, src.AuxiliaryAddresses) } else { dst.AuxiliaryAddresses = nil } @@ -2292,13 +2372,13 @@ func deriveDeepCopy_59(dst, src *IPAMPool) { } } -// deriveDeepCopy_60 recursively copies the contents of src into dst. -func deriveDeepCopy_60(dst, src *GenericResource) { +// deriveDeepCopy_64 recursively copies the contents of src into dst. +func deriveDeepCopy_64(dst, src *GenericResource) { if src.DiscreteResourceSpec == nil { dst.DiscreteResourceSpec = nil } else { dst.DiscreteResourceSpec = new(DiscreteGenericResource) - deriveDeepCopy_61(dst.DiscreteResourceSpec, src.DiscreteResourceSpec) + deriveDeepCopy_65(dst.DiscreteResourceSpec, src.DiscreteResourceSpec) } if src.Extensions != nil { dst.Extensions = make(map[string]any, len(src.Extensions)) @@ -2308,8 +2388,8 @@ func deriveDeepCopy_60(dst, src *GenericResource) { } } -// deriveDeepCopy_61 recursively copies the contents of src into dst. -func deriveDeepCopy_61(dst, src *DiscreteGenericResource) { +// deriveDeepCopy_65 recursively copies the contents of src into dst. +func deriveDeepCopy_65(dst, src *DiscreteGenericResource) { dst.Kind = src.Kind dst.Value = src.Value if src.Extensions != nil { diff --git a/types/models.go b/types/models.go new file mode 100644 index 00000000..8ddc7f85 --- /dev/null +++ b/types/models.go @@ -0,0 +1,30 @@ +/* + Copyright 2020 The Compose Specification Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package types + +type ModelConfig struct { + Name string `yaml:"name,omitempty" json:"name,omitempty"` + Model string `yaml:"model,omitempty" json:"model,omitempty"` + ContextSize int `yaml:"context_size,omitempty" json:"context_size,omitempty"` + RuntimeFlags []string `yaml:"runtime_flags,omitempty" json:"runtime_flags,omitempty"` + Extensions Extensions `yaml:"#extensions,inline,omitempty" json:"-"` +} + +type ServiceModelConfig struct { + EndpointVariable string `yaml:"endpoint_var,omitempty" json:"endpoint_var,omitempty"` + Extensions Extensions `yaml:"#extensions,inline,omitempty" json:"-"` +} diff --git a/types/project.go b/types/project.go index b90cbbc1..eab046a8 100644 --- a/types/project.go +++ b/types/project.go @@ -47,6 +47,7 @@ type Project struct { Volumes Volumes `yaml:"volumes,omitempty" json:"volumes,omitempty"` Secrets Secrets `yaml:"secrets,omitempty" json:"secrets,omitempty"` Configs Configs `yaml:"configs,omitempty" json:"configs,omitempty"` + Models Models `yaml:"models,omitempty" json:"models,omitempty"` Extensions Extensions `yaml:"#extensions,inline,omitempty" json:"-"` // https://github.com/golang/go/issues/6213 ComposeFiles []string `yaml:"-" json:"-"` @@ -411,6 +412,7 @@ func (p *Project) WithoutUnnecessaryResources() *Project { requiredVolumes := map[string]struct{}{} requiredSecrets := map[string]struct{}{} requiredConfigs := map[string]struct{}{} + requiredModels := map[string]struct{}{} for _, s := range newProject.Services { for k := range s.Networks { requiredNetworks[k] = struct{}{} @@ -432,6 +434,9 @@ func (p *Project) WithoutUnnecessaryResources() *Project { for _, v := range s.Configs { requiredConfigs[v.Source] = struct{}{} } + for m := range s.Models { + requiredModels[m] = struct{}{} + } } networks := Networks{} @@ -465,6 +470,14 @@ func (p *Project) WithoutUnnecessaryResources() *Project { } } newProject.Configs = configs + + models := Models{} + for k := range requiredModels { + if value, ok := p.Models[k]; ok { + models[k] = value + } + } + newProject.Models = models return newProject } diff --git a/types/types.go b/types/types.go index db6a9672..e93d493e 100644 --- a/types/types.go +++ b/types/types.go @@ -103,6 +103,7 @@ type ServiceConfig struct { MemSwapLimit UnitBytes `yaml:"memswap_limit,omitempty" json:"memswap_limit,omitempty"` MemSwappiness UnitBytes `yaml:"mem_swappiness,omitempty" json:"mem_swappiness,omitempty"` MacAddress string `yaml:"mac_address,omitempty" json:"mac_address,omitempty"` + Models map[string]*ServiceModelConfig `yaml:"models,omitempty" json:"models,omitempty"` Net string `yaml:"net,omitempty" json:"net,omitempty"` NetworkMode string `yaml:"network_mode,omitempty" json:"network_mode,omitempty"` Networks map[string]*ServiceNetworkConfig `yaml:"networks,omitempty" json:"networks,omitempty"`