diff --git a/VERSION b/VERSION index 8f0916f..a918a2a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.0 +0.6.0 diff --git a/arkruntime/extra_body_external_test.go b/arkruntime/extra_body_external_test.go index d9c104f..4785214 100644 --- a/arkruntime/extra_body_external_test.go +++ b/arkruntime/extra_body_external_test.go @@ -36,7 +36,7 @@ func TestWithExtraBodyIsUsableByExternalCallers(t *testing.T) { ) request := &images.CreateImageGenerationRequest{ Model: "typed-model", - Prompt: "test prompt", + Prompt: images.NewOptString("test prompt"), } _, err := client.GenerateImages( diff --git a/arkruntime/model/images/oas_json_gen.go b/arkruntime/model/images/oas_json_gen.go index 9013235..22fad5c 100644 --- a/arkruntime/model/images/oas_json_gen.go +++ b/arkruntime/model/images/oas_json_gen.go @@ -14,6 +14,46 @@ import ( "github.com/volcengine/ark-runtime-go/arkruntime/internal/validate" ) +// Encode encodes Background as json. +func (s Background) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes Background from json. +func (s *Background) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode Background to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch Background(v) { + case BackgroundOpaque: + *s = BackgroundOpaque + case BackgroundTransparent: + *s = BackgroundTransparent + default: + *s = Background(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s Background) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *Background) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode implements json.Marshaler. func (s *BoundingBox) Encode(e *jx.Encoder) { e.ObjStart() @@ -134,17 +174,15 @@ func (s *CreateImageGenerationRequest) encodeFields(e *jx.Encoder) { e.Str(s.Model) } { - e.FieldStart("prompt") - e.Str(s.Prompt) + if s.Prompt.Set { + e.FieldStart("prompt") + s.Prompt.Encode(e) + } } { - if s.Image != nil { + if s.Image.Set { e.FieldStart("image") - e.ArrStart() - for _, elem := range s.Image { - e.Str(elem) - } - e.ArrEnd() + s.Image.Encode(e) } } { @@ -223,6 +261,12 @@ func (s *CreateImageGenerationRequest) encodeFields(e *jx.Encoder) { s.OutputFormat.Encode(e) } } + { + if s.Background.Set { + e.FieldStart("background") + s.Background.Encode(e) + } + } { if s.LayerDecomposition.Set { e.FieldStart("layer_decomposition") @@ -231,7 +275,7 @@ func (s *CreateImageGenerationRequest) encodeFields(e *jx.Encoder) { } } -var jsonFieldsNameOfCreateImageGenerationRequest = [16]string{ +var jsonFieldsNameOfCreateImageGenerationRequest = [17]string{ 0: "model", 1: "prompt", 2: "image", @@ -247,7 +291,8 @@ var jsonFieldsNameOfCreateImageGenerationRequest = [16]string{ 12: "optimize_prompt_options", 13: "tools", 14: "output_format", - 15: "layer_decomposition", + 15: "background", + 16: "layer_decomposition", } // Decode decodes CreateImageGenerationRequest from json. @@ -255,7 +300,7 @@ func (s *CreateImageGenerationRequest) Decode(d *jx.Decoder) error { if s == nil { return errors.New("invalid: unable to decode CreateImageGenerationRequest to nil") } - var requiredBitSet [2]uint8 + var requiredBitSet [3]uint8 if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { switch string(k) { @@ -272,11 +317,9 @@ func (s *CreateImageGenerationRequest) Decode(d *jx.Decoder) error { return errors.Wrap(err, "decode field \"model\"") } case "prompt": - requiredBitSet[0] |= 1 << 1 if err := func() error { - v, err := d.Str() - s.Prompt = string(v) - if err != nil { + s.Prompt.Reset() + if err := s.Prompt.Decode(d); err != nil { return err } return nil @@ -285,17 +328,8 @@ func (s *CreateImageGenerationRequest) Decode(d *jx.Decoder) error { } case "image": if err := func() error { - s.Image = make([]string, 0) - if err := d.Arr(func(d *jx.Decoder) error { - var elem string - v, err := d.Str() - elem = string(v) - if err != nil { - return err - } - s.Image = append(s.Image, elem) - return nil - }); err != nil { + s.Image.Reset() + if err := s.Image.Decode(d); err != nil { return err } return nil @@ -429,6 +463,16 @@ func (s *CreateImageGenerationRequest) Decode(d *jx.Decoder) error { }(); err != nil { return errors.Wrap(err, "decode field \"output_format\"") } + case "background": + if err := func() error { + s.Background.Reset() + if err := s.Background.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"background\"") + } case "layer_decomposition": if err := func() error { s.LayerDecomposition.Reset() @@ -448,8 +492,9 @@ func (s *CreateImageGenerationRequest) Decode(d *jx.Decoder) error { } // Validate required fields. var failures []validate.FieldError - for i, mask := range [2]uint8{ - 0b00000011, + for i, mask := range [3]uint8{ + 0b00000001, + 0b00000000, 0b00000000, } { if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { @@ -496,6 +541,68 @@ func (s *CreateImageGenerationRequest) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode encodes CreateImageGenerationRequestImage as json. +func (s CreateImageGenerationRequestImage) Encode(e *jx.Encoder) { + switch s.Type { + case StringCreateImageGenerationRequestImage: + e.Str(s.String) + case StringArrayCreateImageGenerationRequestImage: + e.ArrStart() + for _, elem := range s.StringArray { + e.Str(elem) + } + e.ArrEnd() + } +} + +// Decode decodes CreateImageGenerationRequestImage from json. +func (s *CreateImageGenerationRequestImage) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode CreateImageGenerationRequestImage to nil") + } + // Sum type type_discriminator. + switch t := d.Next(); t { + case jx.Array: + s.StringArray = make([]string, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem string + v, err := d.Str() + elem = string(v) + if err != nil { + return err + } + s.StringArray = append(s.StringArray, elem) + return nil + }); err != nil { + return err + } + s.Type = StringArrayCreateImageGenerationRequestImage + case jx.String: + v, err := d.Str() + s.String = string(v) + if err != nil { + return err + } + s.Type = StringCreateImageGenerationRequestImage + default: + return errors.Errorf("unexpected json type %q", t) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s CreateImageGenerationRequestImage) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *CreateImageGenerationRequestImage) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode implements json.Marshaler. func (s *ImageDataItem) Encode(e *jx.Encoder) { e.ObjStart() @@ -1312,6 +1419,39 @@ func (s *ImageGenerationStreamEventType) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode encodes Background as json. +func (o OptBackground) Encode(e *jx.Encoder) { + if !o.Set { + return + } + e.Str(string(o.Value)) +} + +// Decode decodes Background from json. +func (o *OptBackground) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptBackground to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptBackground) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptBackground) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes bool as json. func (o OptBool) Encode(e *jx.Encoder) { if !o.Set { @@ -1380,6 +1520,39 @@ func (s *OptBoundingBox) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode encodes CreateImageGenerationRequestImage as json. +func (o OptCreateImageGenerationRequestImage) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes CreateImageGenerationRequestImage from json. +func (o *OptCreateImageGenerationRequestImage) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptCreateImageGenerationRequestImage to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptCreateImageGenerationRequestImage) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptCreateImageGenerationRequestImage) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes float64 as json. func (o OptFloat64) Encode(e *jx.Encoder) { if !o.Set { diff --git a/arkruntime/model/images/oas_schemas_gen.go b/arkruntime/model/images/oas_schemas_gen.go index 2661329..896e33f 100644 --- a/arkruntime/model/images/oas_schemas_gen.go +++ b/arkruntime/model/images/oas_schemas_gen.go @@ -9,6 +9,49 @@ import ( "github.com/go-faster/errors" ) +// Background of the generated image. +// Ref: #/components/schemas/Background +type Background string + +const ( + BackgroundOpaque Background = "opaque" + BackgroundTransparent Background = "transparent" +) + +// AllValues returns all Background values. +func (Background) AllValues() []Background { + return []Background{ + BackgroundOpaque, + BackgroundTransparent, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s Background) MarshalText() ([]byte, error) { + switch s { + case BackgroundOpaque: + return []byte(s), nil + case BackgroundTransparent: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *Background) UnmarshalText(data []byte) error { + switch Background(data) { + case BackgroundOpaque: + *s = BackgroundOpaque + return nil + case BackgroundTransparent: + *s = BackgroundTransparent + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + // A layer's region in the base image, ordered as // `[left, top, right, bottom]`. // Ref: #/components/schemas/BoundingBox @@ -43,10 +86,11 @@ func (s *BoundingBox) SetNormalized(val []int32) { type CreateImageGenerationRequest struct { // The model identifier to use. Model string `json:"model"` - // Text prompt describing the desired image. - Prompt string `json:"prompt"` - // Reference / edit images. Each entry is a URL or a `data:` URI. - Image []string `json:"image"` + // Text prompt describing the desired image. Required for standard generation; may be omitted for + // automatic layer decomposition when `layer_decomposition=true`. + Prompt OptString `json:"prompt"` + // Reference / edit images, as a single URL or `data:` URI, or an array of them. + Image OptCreateImageGenerationRequestImage `json:"image"` // Stream partial images as they are generated (server-sent events). Stream OptBool `json:"stream"` // How generated image bytes are returned. Defaults to `url`. @@ -72,6 +116,9 @@ type CreateImageGenerationRequest struct { Tools []Tool `json:"tools"` // Container/codec for the generated image bytes. OutputFormat OptOutputFormat `json:"output_format"` + // Output background. Defaults to `opaque`. `transparent` requires exactly one PNG reference image + // with an alpha channel and PNG output. + Background OptBackground `json:"background"` // Decompose one reference image into a base image and independently // composable layers. Supported models return layer metadata in `data`. LayerDecomposition OptBool `json:"layer_decomposition"` @@ -83,12 +130,12 @@ func (s *CreateImageGenerationRequest) GetModel() string { } // GetPrompt returns the value of Prompt. -func (s *CreateImageGenerationRequest) GetPrompt() string { +func (s *CreateImageGenerationRequest) GetPrompt() OptString { return s.Prompt } // GetImage returns the value of Image. -func (s *CreateImageGenerationRequest) GetImage() []string { +func (s *CreateImageGenerationRequest) GetImage() OptCreateImageGenerationRequestImage { return s.Image } @@ -152,6 +199,11 @@ func (s *CreateImageGenerationRequest) GetOutputFormat() OptOutputFormat { return s.OutputFormat } +// GetBackground returns the value of Background. +func (s *CreateImageGenerationRequest) GetBackground() OptBackground { + return s.Background +} + // GetLayerDecomposition returns the value of LayerDecomposition. func (s *CreateImageGenerationRequest) GetLayerDecomposition() OptBool { return s.LayerDecomposition @@ -163,12 +215,12 @@ func (s *CreateImageGenerationRequest) SetModel(val string) { } // SetPrompt sets the value of Prompt. -func (s *CreateImageGenerationRequest) SetPrompt(val string) { +func (s *CreateImageGenerationRequest) SetPrompt(val OptString) { s.Prompt = val } // SetImage sets the value of Image. -func (s *CreateImageGenerationRequest) SetImage(val []string) { +func (s *CreateImageGenerationRequest) SetImage(val OptCreateImageGenerationRequestImage) { s.Image = val } @@ -232,11 +284,85 @@ func (s *CreateImageGenerationRequest) SetOutputFormat(val OptOutputFormat) { s.OutputFormat = val } +// SetBackground sets the value of Background. +func (s *CreateImageGenerationRequest) SetBackground(val OptBackground) { + s.Background = val +} + // SetLayerDecomposition sets the value of LayerDecomposition. func (s *CreateImageGenerationRequest) SetLayerDecomposition(val OptBool) { s.LayerDecomposition = val } +// Reference / edit images, as a single URL or `data:` URI, or an array of them. +// CreateImageGenerationRequestImage represents sum type. +type CreateImageGenerationRequestImage struct { + Type CreateImageGenerationRequestImageType // switch on this field + String string + StringArray []string +} + +// CreateImageGenerationRequestImageType is oneOf type of CreateImageGenerationRequestImage. +type CreateImageGenerationRequestImageType string + +// Possible values for CreateImageGenerationRequestImageType. +const ( + StringCreateImageGenerationRequestImage CreateImageGenerationRequestImageType = "string" + StringArrayCreateImageGenerationRequestImage CreateImageGenerationRequestImageType = "[]string" +) + +// IsString reports whether CreateImageGenerationRequestImage is string. +func (s CreateImageGenerationRequestImage) IsString() bool { + return s.Type == StringCreateImageGenerationRequestImage +} + +// IsStringArray reports whether CreateImageGenerationRequestImage is []string. +func (s CreateImageGenerationRequestImage) IsStringArray() bool { + return s.Type == StringArrayCreateImageGenerationRequestImage +} + +// SetString sets CreateImageGenerationRequestImage to string. +func (s *CreateImageGenerationRequestImage) SetString(v string) { + s.Type = StringCreateImageGenerationRequestImage + s.String = v +} + +// GetString returns string and true boolean if CreateImageGenerationRequestImage is string. +func (s CreateImageGenerationRequestImage) GetString() (v string, ok bool) { + if !s.IsString() { + return v, false + } + return s.String, true +} + +// NewStringCreateImageGenerationRequestImage returns new CreateImageGenerationRequestImage from string. +func NewStringCreateImageGenerationRequestImage(v string) CreateImageGenerationRequestImage { + var s CreateImageGenerationRequestImage + s.SetString(v) + return s +} + +// SetStringArray sets CreateImageGenerationRequestImage to []string. +func (s *CreateImageGenerationRequestImage) SetStringArray(v []string) { + s.Type = StringArrayCreateImageGenerationRequestImage + s.StringArray = v +} + +// GetStringArray returns []string and true boolean if CreateImageGenerationRequestImage is []string. +func (s CreateImageGenerationRequestImage) GetStringArray() (v []string, ok bool) { + if !s.IsStringArray() { + return v, false + } + return s.StringArray, true +} + +// NewStringArrayCreateImageGenerationRequestImage returns new CreateImageGenerationRequestImage from []string. +func NewStringArrayCreateImageGenerationRequestImage(v []string) CreateImageGenerationRequestImage { + var s CreateImageGenerationRequestImage + s.SetStringArray(v) + return s +} + // One generated image. Exactly one of `url` / `b64_json` is set, depending on the request // `response_format`. // Ref: #/components/schemas/ImageDataItem @@ -643,6 +769,52 @@ func (s *ImageGenerationStreamEventType) UnmarshalText(data []byte) error { } } +// NewOptBackground returns new OptBackground with value set to v. +func NewOptBackground(v Background) OptBackground { + return OptBackground{ + Value: v, + Set: true, + } +} + +// OptBackground is optional Background. +type OptBackground struct { + Value Background + Set bool +} + +// IsSet returns true if OptBackground was set. +func (o OptBackground) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptBackground) Reset() { + var v Background + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptBackground) SetTo(v Background) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptBackground) Get() (v Background, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptBackground) Or(d Background) Background { + if v, ok := o.Get(); ok { + return v + } + return d +} + // NewOptBool returns new OptBool with value set to v. func NewOptBool(v bool) OptBool { return OptBool{ @@ -735,6 +907,52 @@ func (o OptBoundingBox) Or(d BoundingBox) BoundingBox { return d } +// NewOptCreateImageGenerationRequestImage returns new OptCreateImageGenerationRequestImage with value set to v. +func NewOptCreateImageGenerationRequestImage(v CreateImageGenerationRequestImage) OptCreateImageGenerationRequestImage { + return OptCreateImageGenerationRequestImage{ + Value: v, + Set: true, + } +} + +// OptCreateImageGenerationRequestImage is optional CreateImageGenerationRequestImage. +type OptCreateImageGenerationRequestImage struct { + Value CreateImageGenerationRequestImage + Set bool +} + +// IsSet returns true if OptCreateImageGenerationRequestImage was set. +func (o OptCreateImageGenerationRequestImage) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptCreateImageGenerationRequestImage) Reset() { + var v CreateImageGenerationRequestImage + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptCreateImageGenerationRequestImage) SetTo(v CreateImageGenerationRequestImage) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptCreateImageGenerationRequestImage) Get() (v CreateImageGenerationRequestImage, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptCreateImageGenerationRequestImage) Or(d CreateImageGenerationRequestImage) CreateImageGenerationRequestImage { + if v, ok := o.Get(); ok { + return v + } + return d +} + // NewOptFloat64 returns new OptFloat64 with value set to v. func NewOptFloat64(v float64) OptFloat64 { return OptFloat64{ diff --git a/arkruntime/model/images/oas_validators_gen.go b/arkruntime/model/images/oas_validators_gen.go index f560771..d4cbec4 100644 --- a/arkruntime/model/images/oas_validators_gen.go +++ b/arkruntime/model/images/oas_validators_gen.go @@ -12,12 +12,41 @@ import ( "github.com/volcengine/ark-runtime-go/arkruntime/internal/validate" ) +func (s Background) Validate() error { + switch s { + case "opaque": + return nil + case "transparent": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + func (s *CreateImageGenerationRequest) Validate() error { if s == nil { return validate.ErrNilPointer } var failures []validate.FieldError + if err := func() error { + if value, ok := s.Image.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "image", + Error: err, + }) + } if err := func() error { if value, ok := s.ResponseFormat.Get(); ok { if err := func() error { @@ -151,12 +180,44 @@ func (s *CreateImageGenerationRequest) Validate() error { Error: err, }) } + if err := func() error { + if value, ok := s.Background.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "background", + Error: err, + }) + } if len(failures) > 0 { return &validate.Error{Fields: failures} } return nil } +func (s CreateImageGenerationRequestImage) Validate() error { + switch s.Type { + case StringCreateImageGenerationRequestImage: + return nil // no validation needed + case StringArrayCreateImageGenerationRequestImage: + if s.StringArray == nil { + return errors.New("nil is invalid value") + } + return nil + default: + return errors.Errorf("invalid type %q", s.Type) + } +} + func (s *ImageDataItem) Validate() error { if s == nil { return validate.ErrNilPointer diff --git a/arkruntime/model/session/oas_json_gen.go b/arkruntime/model/session/oas_json_gen.go index bf4b1ac..d3e399f 100644 --- a/arkruntime/model/session/oas_json_gen.go +++ b/arkruntime/model/session/oas_json_gen.go @@ -577,6 +577,557 @@ func (s *AgentRefToolsItem) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode implements json.Marshaler. +func (s *AgentWithUpgrades) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *AgentWithUpgrades) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + if s.Version.Set { + e.FieldStart("version") + s.Version.Encode(e) + } + } + { + if s.Model.Set { + e.FieldStart("model") + s.Model.Encode(e) + } + } + { + if s.System.Set { + e.FieldStart("system") + s.System.Encode(e) + } + } + { + if s.Tools != nil { + e.FieldStart("tools") + e.ArrStart() + for _, elem := range s.Tools { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.McpServers != nil { + e.FieldStart("mcp_servers") + e.ArrStart() + for _, elem := range s.McpServers { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Skills != nil { + e.FieldStart("skills") + e.ArrStart() + for _, elem := range s.Skills { + elem.Encode(e) + } + e.ArrEnd() + } + } + { + if s.Multiagent.Set { + e.FieldStart("multiagent") + s.Multiagent.Encode(e) + } + } + { + if s.DisplayName.Set { + e.FieldStart("display_name") + s.DisplayName.Encode(e) + } + } +} + +var jsonFieldsNameOfAgentWithUpgrades = [10]string{ + 0: "type", + 1: "id", + 2: "version", + 3: "model", + 4: "system", + 5: "tools", + 6: "mcp_servers", + 7: "skills", + 8: "multiagent", + 9: "display_name", +} + +// Decode decodes AgentWithUpgrades from json. +func (s *AgentWithUpgrades) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AgentWithUpgrades to nil") + } + var requiredBitSet [2]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "version": + if err := func() error { + s.Version.Reset() + if err := s.Version.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"version\"") + } + case "model": + if err := func() error { + s.Model.Reset() + if err := s.Model.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"model\"") + } + case "system": + if err := func() error { + s.System.Reset() + if err := s.System.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"system\"") + } + case "tools": + if err := func() error { + s.Tools = make([]AgentWithUpgradesToolsItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AgentWithUpgradesToolsItem + if err := elem.Decode(d); err != nil { + return err + } + s.Tools = append(s.Tools, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"tools\"") + } + case "mcp_servers": + if err := func() error { + s.McpServers = make([]AgentWithUpgradesMcpServersItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AgentWithUpgradesMcpServersItem + if err := elem.Decode(d); err != nil { + return err + } + s.McpServers = append(s.McpServers, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"mcp_servers\"") + } + case "skills": + if err := func() error { + s.Skills = make([]AgentWithUpgradesSkillsItem, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem AgentWithUpgradesSkillsItem + if err := elem.Decode(d); err != nil { + return err + } + s.Skills = append(s.Skills, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"skills\"") + } + case "multiagent": + if err := func() error { + s.Multiagent.Reset() + if err := s.Multiagent.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"multiagent\"") + } + case "display_name": + if err := func() error { + s.DisplayName.Reset() + if err := s.DisplayName.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"display_name\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode AgentWithUpgrades") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [2]uint8{ + 0b00000011, + 0b00000000, + } { + if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { + // Mask only required fields and check equality to mask using XOR. + // + // If XOR result is not zero, result is not equal to expected, so some fields are missed. + // Bits of fields which would be set are actually bits of missed fields. + missed := bits.OnesCount8(result) + for bitN := 0; bitN < missed; bitN++ { + bitIdx := bits.TrailingZeros8(result) + fieldIdx := i*8 + bitIdx + var name string + if fieldIdx < len(jsonFieldsNameOfAgentWithUpgrades) { + name = jsonFieldsNameOfAgentWithUpgrades[fieldIdx] + } else { + name = strconv.Itoa(fieldIdx) + } + failures = append(failures, validate.FieldError{ + Name: name, + Error: validate.ErrFieldRequired, + }) + // Reset bit. + result &^= 1 << bitIdx + } + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *AgentWithUpgrades) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AgentWithUpgrades) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s AgentWithUpgradesMcpServersItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields implements json.Marshaler. +func (s AgentWithUpgradesMcpServersItem) encodeFields(e *jx.Encoder) { + for k, elem := range s { + e.FieldStart(k) + + if len(elem) != 0 { + e.Raw(elem) + } + } +} + +// Decode decodes AgentWithUpgradesMcpServersItem from json. +func (s *AgentWithUpgradesMcpServersItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AgentWithUpgradesMcpServersItem to nil") + } + m := s.init() + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + var elem jx.Raw + if err := func() error { + v, err := d.RawAppend(nil) + elem = jx.Raw(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrapf(err, "decode field %q", k) + } + m[string(k)] = elem + return nil + }); err != nil { + return errors.Wrap(err, "decode AgentWithUpgradesMcpServersItem") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s AgentWithUpgradesMcpServersItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AgentWithUpgradesMcpServersItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s AgentWithUpgradesMultiagent) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields implements json.Marshaler. +func (s AgentWithUpgradesMultiagent) encodeFields(e *jx.Encoder) { + for k, elem := range s { + e.FieldStart(k) + + if len(elem) != 0 { + e.Raw(elem) + } + } +} + +// Decode decodes AgentWithUpgradesMultiagent from json. +func (s *AgentWithUpgradesMultiagent) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AgentWithUpgradesMultiagent to nil") + } + m := s.init() + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + var elem jx.Raw + if err := func() error { + v, err := d.RawAppend(nil) + elem = jx.Raw(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrapf(err, "decode field %q", k) + } + m[string(k)] = elem + return nil + }); err != nil { + return errors.Wrap(err, "decode AgentWithUpgradesMultiagent") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s AgentWithUpgradesMultiagent) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AgentWithUpgradesMultiagent) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s AgentWithUpgradesSkillsItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields implements json.Marshaler. +func (s AgentWithUpgradesSkillsItem) encodeFields(e *jx.Encoder) { + for k, elem := range s { + e.FieldStart(k) + + if len(elem) != 0 { + e.Raw(elem) + } + } +} + +// Decode decodes AgentWithUpgradesSkillsItem from json. +func (s *AgentWithUpgradesSkillsItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AgentWithUpgradesSkillsItem to nil") + } + m := s.init() + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + var elem jx.Raw + if err := func() error { + v, err := d.RawAppend(nil) + elem = jx.Raw(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrapf(err, "decode field %q", k) + } + m[string(k)] = elem + return nil + }); err != nil { + return errors.Wrap(err, "decode AgentWithUpgradesSkillsItem") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s AgentWithUpgradesSkillsItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AgentWithUpgradesSkillsItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s AgentWithUpgradesToolsItem) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields implements json.Marshaler. +func (s AgentWithUpgradesToolsItem) encodeFields(e *jx.Encoder) { + for k, elem := range s { + e.FieldStart(k) + + if len(elem) != 0 { + e.Raw(elem) + } + } +} + +// Decode decodes AgentWithUpgradesToolsItem from json. +func (s *AgentWithUpgradesToolsItem) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AgentWithUpgradesToolsItem to nil") + } + m := s.init() + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + var elem jx.Raw + if err := func() error { + v, err := d.RawAppend(nil) + elem = jx.Raw(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrapf(err, "decode field %q", k) + } + m[string(k)] = elem + return nil + }); err != nil { + return errors.Wrap(err, "decode AgentWithUpgradesToolsItem") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s AgentWithUpgradesToolsItem) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AgentWithUpgradesToolsItem) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes AgentWithUpgradesType as json. +func (s AgentWithUpgradesType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes AgentWithUpgradesType from json. +func (s *AgentWithUpgradesType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode AgentWithUpgradesType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch AgentWithUpgradesType(v) { + case AgentWithUpgradesTypeAgentWithUpgrades: + *s = AgentWithUpgradesTypeAgentWithUpgrades + default: + *s = AgentWithUpgradesType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s AgentWithUpgradesType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *AgentWithUpgradesType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode implements json.Marshaler. func (s *Base64DocumentSource) Encode(e *jx.Encoder) { e.ObjStart() @@ -1155,110 +1706,248 @@ func (s *CreateSessionResourceRequest) Decode(d *jx.Decoder) error { } return nil }(); err != nil { - return errors.Wrap(err, "decode field \"type\"") + return errors.Wrap(err, "decode field \"type\"") + } + case "file_id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.FileID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"file_id\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode CreateSessionResourceRequest") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { + // Mask only required fields and check equality to mask using XOR. + // + // If XOR result is not zero, result is not equal to expected, so some fields are missed. + // Bits of fields which would be set are actually bits of missed fields. + missed := bits.OnesCount8(result) + for bitN := 0; bitN < missed; bitN++ { + bitIdx := bits.TrailingZeros8(result) + fieldIdx := i*8 + bitIdx + var name string + if fieldIdx < len(jsonFieldsNameOfCreateSessionResourceRequest) { + name = jsonFieldsNameOfCreateSessionResourceRequest[fieldIdx] + } else { + name = strconv.Itoa(fieldIdx) + } + failures = append(failures, validate.FieldError{ + Name: name, + Error: validate.ErrFieldRequired, + }) + // Reset bit. + result &^= 1 << bitIdx + } + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *CreateSessionResourceRequest) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *CreateSessionResourceRequest) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes CreateSessionResourceRequestType as json. +func (s CreateSessionResourceRequestType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes CreateSessionResourceRequestType from json. +func (s *CreateSessionResourceRequestType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode CreateSessionResourceRequestType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch CreateSessionResourceRequestType(v) { + case CreateSessionResourceRequestTypeFile: + *s = CreateSessionResourceRequestTypeFile + default: + *s = CreateSessionResourceRequestType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s CreateSessionResourceRequestType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *CreateSessionResourceRequestType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *CreateSessionUpgradeRequest) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *CreateSessionUpgradeRequest) encodeFields(e *jx.Encoder) { + { + if s.Agent.Set { + e.FieldStart("agent") + s.Agent.Encode(e) + } + } + { + if s.Environment.Set { + e.FieldStart("environment") + s.Environment.Encode(e) + } + } + { + if s.VaultIds != nil { + e.FieldStart("vault_ids") + e.ArrStart() + for _, elem := range s.VaultIds { + e.Str(elem) + } + e.ArrEnd() + } + } + { + if s.InitialEvents != nil { + e.FieldStart("initial_events") + e.ArrStart() + for _, elem := range s.InitialEvents { + elem.Encode(e) + } + e.ArrEnd() + } + } +} + +var jsonFieldsNameOfCreateSessionUpgradeRequest = [4]string{ + 0: "agent", + 1: "environment", + 2: "vault_ids", + 3: "initial_events", +} + +// Decode decodes CreateSessionUpgradeRequest from json. +func (s *CreateSessionUpgradeRequest) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode CreateSessionUpgradeRequest to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "agent": + if err := func() error { + s.Agent.Reset() + if err := s.Agent.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"agent\"") + } + case "environment": + if err := func() error { + s.Environment.Reset() + if err := s.Environment.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"environment\"") + } + case "vault_ids": + if err := func() error { + s.VaultIds = make([]string, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem string + v, err := d.Str() + elem = string(v) + if err != nil { + return err + } + s.VaultIds = append(s.VaultIds, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"vault_ids\"") } - case "file_id": - requiredBitSet[0] |= 1 << 1 + case "initial_events": if err := func() error { - v, err := d.Str() - s.FileID = string(v) - if err != nil { + s.InitialEvents = make([]ManagedAgentsEventParams, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ManagedAgentsEventParams + if err := elem.Decode(d); err != nil { + return err + } + s.InitialEvents = append(s.InitialEvents, elem) + return nil + }); err != nil { return err } return nil }(); err != nil { - return errors.Wrap(err, "decode field \"file_id\"") + return errors.Wrap(err, "decode field \"initial_events\"") } default: return d.Skip() } return nil }); err != nil { - return errors.Wrap(err, "decode CreateSessionResourceRequest") - } - // Validate required fields. - var failures []validate.FieldError - for i, mask := range [1]uint8{ - 0b00000011, - } { - if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { - // Mask only required fields and check equality to mask using XOR. - // - // If XOR result is not zero, result is not equal to expected, so some fields are missed. - // Bits of fields which would be set are actually bits of missed fields. - missed := bits.OnesCount8(result) - for bitN := 0; bitN < missed; bitN++ { - bitIdx := bits.TrailingZeros8(result) - fieldIdx := i*8 + bitIdx - var name string - if fieldIdx < len(jsonFieldsNameOfCreateSessionResourceRequest) { - name = jsonFieldsNameOfCreateSessionResourceRequest[fieldIdx] - } else { - name = strconv.Itoa(fieldIdx) - } - failures = append(failures, validate.FieldError{ - Name: name, - Error: validate.ErrFieldRequired, - }) - // Reset bit. - result &^= 1 << bitIdx - } - } - } - if len(failures) > 0 { - return &validate.Error{Fields: failures} - } - - return nil -} - -// MarshalJSON implements stdjson.Marshaler. -func (s *CreateSessionResourceRequest) MarshalJSON() ([]byte, error) { - e := jx.Encoder{} - s.Encode(&e) - return e.Bytes(), nil -} - -// UnmarshalJSON implements stdjson.Unmarshaler. -func (s *CreateSessionResourceRequest) UnmarshalJSON(data []byte) error { - d := jx.DecodeBytes(data) - return s.Decode(d) -} - -// Encode encodes CreateSessionResourceRequestType as json. -func (s CreateSessionResourceRequestType) Encode(e *jx.Encoder) { - e.Str(string(s)) -} - -// Decode decodes CreateSessionResourceRequestType from json. -func (s *CreateSessionResourceRequestType) Decode(d *jx.Decoder) error { - if s == nil { - return errors.New("invalid: unable to decode CreateSessionResourceRequestType to nil") - } - v, err := d.StrBytes() - if err != nil { - return err - } - // Try to use constant string. - switch CreateSessionResourceRequestType(v) { - case CreateSessionResourceRequestTypeFile: - *s = CreateSessionResourceRequestTypeFile - default: - *s = CreateSessionResourceRequestType(v) + return errors.Wrap(err, "decode CreateSessionUpgradeRequest") } return nil } // MarshalJSON implements stdjson.Marshaler. -func (s CreateSessionResourceRequestType) MarshalJSON() ([]byte, error) { +func (s *CreateSessionUpgradeRequest) MarshalJSON() ([]byte, error) { e := jx.Encoder{} s.Encode(&e) return e.Bytes(), nil } // UnmarshalJSON implements stdjson.Unmarshaler. -func (s *CreateSessionResourceRequestType) UnmarshalJSON(data []byte) error { +func (s *CreateSessionUpgradeRequest) UnmarshalJSON(data []byte) error { d := jx.DecodeBytes(data) return s.Decode(d) } @@ -2422,8 +3111,174 @@ func (s *EnvironmentWithOverrides) Decode(d *jx.Decoder) error { bitIdx := bits.TrailingZeros8(result) fieldIdx := i*8 + bitIdx var name string - if fieldIdx < len(jsonFieldsNameOfEnvironmentWithOverrides) { - name = jsonFieldsNameOfEnvironmentWithOverrides[fieldIdx] + if fieldIdx < len(jsonFieldsNameOfEnvironmentWithOverrides) { + name = jsonFieldsNameOfEnvironmentWithOverrides[fieldIdx] + } else { + name = strconv.Itoa(fieldIdx) + } + failures = append(failures, validate.FieldError{ + Name: name, + Error: validate.ErrFieldRequired, + }) + // Reset bit. + result &^= 1 << bitIdx + } + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *EnvironmentWithOverrides) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *EnvironmentWithOverrides) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes EnvironmentWithOverridesType as json. +func (s EnvironmentWithOverridesType) Encode(e *jx.Encoder) { + e.Str(string(s)) +} + +// Decode decodes EnvironmentWithOverridesType from json. +func (s *EnvironmentWithOverridesType) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode EnvironmentWithOverridesType to nil") + } + v, err := d.StrBytes() + if err != nil { + return err + } + // Try to use constant string. + switch EnvironmentWithOverridesType(v) { + case EnvironmentWithOverridesTypeEnvironmentWithOverrides: + *s = EnvironmentWithOverridesTypeEnvironmentWithOverrides + default: + *s = EnvironmentWithOverridesType(v) + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s EnvironmentWithOverridesType) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *EnvironmentWithOverridesType) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode implements json.Marshaler. +func (s *EnvironmentWithUpgrades) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *EnvironmentWithUpgrades) encodeFields(e *jx.Encoder) { + { + e.FieldStart("type") + s.Type.Encode(e) + } + { + e.FieldStart("id") + e.Str(s.ID) + } + { + if s.Config.Set { + e.FieldStart("config") + s.Config.Encode(e) + } + } +} + +var jsonFieldsNameOfEnvironmentWithUpgrades = [3]string{ + 0: "type", + 1: "id", + 2: "config", +} + +// Decode decodes EnvironmentWithUpgrades from json. +func (s *EnvironmentWithUpgrades) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode EnvironmentWithUpgrades to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "type": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + if err := s.Type.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"type\"") + } + case "id": + requiredBitSet[0] |= 1 << 1 + if err := func() error { + v, err := d.Str() + s.ID = string(v) + if err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "config": + if err := func() error { + s.Config.Reset() + if err := s.Config.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"config\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode EnvironmentWithUpgrades") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000011, + } { + if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { + // Mask only required fields and check equality to mask using XOR. + // + // If XOR result is not zero, result is not equal to expected, so some fields are missed. + // Bits of fields which would be set are actually bits of missed fields. + missed := bits.OnesCount8(result) + for bitN := 0; bitN < missed; bitN++ { + bitIdx := bits.TrailingZeros8(result) + fieldIdx := i*8 + bitIdx + var name string + if fieldIdx < len(jsonFieldsNameOfEnvironmentWithUpgrades) { + name = jsonFieldsNameOfEnvironmentWithUpgrades[fieldIdx] } else { name = strconv.Itoa(fieldIdx) } @@ -2444,52 +3299,52 @@ func (s *EnvironmentWithOverrides) Decode(d *jx.Decoder) error { } // MarshalJSON implements stdjson.Marshaler. -func (s *EnvironmentWithOverrides) MarshalJSON() ([]byte, error) { +func (s *EnvironmentWithUpgrades) MarshalJSON() ([]byte, error) { e := jx.Encoder{} s.Encode(&e) return e.Bytes(), nil } // UnmarshalJSON implements stdjson.Unmarshaler. -func (s *EnvironmentWithOverrides) UnmarshalJSON(data []byte) error { +func (s *EnvironmentWithUpgrades) UnmarshalJSON(data []byte) error { d := jx.DecodeBytes(data) return s.Decode(d) } -// Encode encodes EnvironmentWithOverridesType as json. -func (s EnvironmentWithOverridesType) Encode(e *jx.Encoder) { +// Encode encodes EnvironmentWithUpgradesType as json. +func (s EnvironmentWithUpgradesType) Encode(e *jx.Encoder) { e.Str(string(s)) } -// Decode decodes EnvironmentWithOverridesType from json. -func (s *EnvironmentWithOverridesType) Decode(d *jx.Decoder) error { +// Decode decodes EnvironmentWithUpgradesType from json. +func (s *EnvironmentWithUpgradesType) Decode(d *jx.Decoder) error { if s == nil { - return errors.New("invalid: unable to decode EnvironmentWithOverridesType to nil") + return errors.New("invalid: unable to decode EnvironmentWithUpgradesType to nil") } v, err := d.StrBytes() if err != nil { return err } // Try to use constant string. - switch EnvironmentWithOverridesType(v) { - case EnvironmentWithOverridesTypeEnvironmentWithOverrides: - *s = EnvironmentWithOverridesTypeEnvironmentWithOverrides + switch EnvironmentWithUpgradesType(v) { + case EnvironmentWithUpgradesTypeEnvironmentWithUpgrades: + *s = EnvironmentWithUpgradesTypeEnvironmentWithUpgrades default: - *s = EnvironmentWithOverridesType(v) + *s = EnvironmentWithUpgradesType(v) } return nil } // MarshalJSON implements stdjson.Marshaler. -func (s EnvironmentWithOverridesType) MarshalJSON() ([]byte, error) { +func (s EnvironmentWithUpgradesType) MarshalJSON() ([]byte, error) { e := jx.Encoder{} s.Encode(&e) return e.Bytes(), nil } // UnmarshalJSON implements stdjson.Unmarshaler. -func (s *EnvironmentWithOverridesType) UnmarshalJSON(data []byte) error { +func (s *EnvironmentWithUpgradesType) UnmarshalJSON(data []byte) error { d := jx.DecodeBytes(data) return s.Decode(d) } @@ -6122,6 +6977,12 @@ func (s *ModelOverrides) Encode(e *jx.Encoder) { // encodeFields encodes fields. func (s *ModelOverrides) encodeFields(e *jx.Encoder) { + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } { if s.Speed.Set { e.FieldStart("speed") @@ -6140,12 +7001,20 @@ func (s *ModelOverrides) encodeFields(e *jx.Encoder) { s.ReasoningEffort.Encode(e) } } + { + if s.ServiceTier.Set { + e.FieldStart("service_tier") + s.ServiceTier.Encode(e) + } + } } -var jsonFieldsNameOfModelOverrides = [3]string{ - 0: "speed", - 1: "thinking", - 2: "reasoning_effort", +var jsonFieldsNameOfModelOverrides = [5]string{ + 0: "id", + 1: "speed", + 2: "thinking", + 3: "reasoning_effort", + 4: "service_tier", } // Decode decodes ModelOverrides from json. @@ -6156,6 +7025,16 @@ func (s *ModelOverrides) Decode(d *jx.Decoder) error { if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { switch string(k) { + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } case "speed": if err := func() error { s.Speed.Reset() @@ -6186,6 +7065,16 @@ func (s *ModelOverrides) Decode(d *jx.Decoder) error { }(); err != nil { return errors.Wrap(err, "decode field \"reasoning_effort\"") } + case "service_tier": + if err := func() error { + s.ServiceTier.Reset() + if err := s.ServiceTier.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"service_tier\"") + } default: return d.Skip() } @@ -6210,6 +7099,137 @@ func (s *ModelOverrides) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode implements json.Marshaler. +func (s *ModelUpgrades) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *ModelUpgrades) encodeFields(e *jx.Encoder) { + { + if s.ID.Set { + e.FieldStart("id") + s.ID.Encode(e) + } + } + { + if s.Speed.Set { + e.FieldStart("speed") + s.Speed.Encode(e) + } + } + { + if s.Thinking.Set { + e.FieldStart("thinking") + s.Thinking.Encode(e) + } + } + { + if s.ReasoningEffort.Set { + e.FieldStart("reasoning_effort") + s.ReasoningEffort.Encode(e) + } + } + { + if s.ServiceTier.Set { + e.FieldStart("service_tier") + s.ServiceTier.Encode(e) + } + } +} + +var jsonFieldsNameOfModelUpgrades = [5]string{ + 0: "id", + 1: "speed", + 2: "thinking", + 3: "reasoning_effort", + 4: "service_tier", +} + +// Decode decodes ModelUpgrades from json. +func (s *ModelUpgrades) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ModelUpgrades to nil") + } + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "id": + if err := func() error { + s.ID.Reset() + if err := s.ID.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"id\"") + } + case "speed": + if err := func() error { + s.Speed.Reset() + if err := s.Speed.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"speed\"") + } + case "thinking": + if err := func() error { + s.Thinking.Reset() + if err := s.Thinking.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"thinking\"") + } + case "reasoning_effort": + if err := func() error { + s.ReasoningEffort.Reset() + if err := s.ReasoningEffort.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"reasoning_effort\"") + } + case "service_tier": + if err := func() error { + s.ServiceTier.Reset() + if err := s.ServiceTier.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"service_tier\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode ModelUpgrades") + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *ModelUpgrades) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ModelUpgrades) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes AgentRefMultiagent as json. func (o OptAgentRefMultiagent) Encode(e *jx.Encoder) { if !o.Set { @@ -6244,6 +7264,73 @@ func (s *OptAgentRefMultiagent) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode encodes AgentWithUpgrades as json. +func (o OptAgentWithUpgrades) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes AgentWithUpgrades from json. +func (o *OptAgentWithUpgrades) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptAgentWithUpgrades to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptAgentWithUpgrades) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptAgentWithUpgrades) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + +// Encode encodes AgentWithUpgradesMultiagent as json. +func (o OptAgentWithUpgradesMultiagent) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes AgentWithUpgradesMultiagent from json. +func (o *OptAgentWithUpgradesMultiagent) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptAgentWithUpgradesMultiagent to nil") + } + o.Set = true + o.Value = make(AgentWithUpgradesMultiagent) + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptAgentWithUpgradesMultiagent) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptAgentWithUpgradesMultiagent) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes bool as json. func (o OptBool) Encode(e *jx.Encoder) { if !o.Set { @@ -6544,6 +7631,39 @@ func (s *OptEnvironmentWithOverrides) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode encodes EnvironmentWithUpgrades as json. +func (o OptEnvironmentWithUpgrades) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes EnvironmentWithUpgrades from json. +func (o *OptEnvironmentWithUpgrades) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptEnvironmentWithUpgrades to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptEnvironmentWithUpgrades) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptEnvironmentWithUpgrades) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes int32 as json. func (o OptInt32) Encode(e *jx.Encoder) { if !o.Set { @@ -6647,6 +7767,39 @@ func (s *OptModelOverrides) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode encodes ModelUpgrades as json. +func (o OptModelUpgrades) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes ModelUpgrades from json. +func (o *OptModelUpgrades) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptModelUpgrades to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptModelUpgrades) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptModelUpgrades) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes SessionEnvironment as json. func (o OptNilSessionEnvironment) Encode(e *jx.Encoder) { if !o.Set { @@ -8424,6 +9577,12 @@ func (s *SessionStatus) Decode(d *jx.Decoder) error { *s = SessionStatusTerminated case SessionStatusRescheduling: *s = SessionStatusRescheduling + case SessionStatusInitializing: + *s = SessionStatusInitializing + case SessionStatusFailed: + *s = SessionStatusFailed + case SessionStatusUpgrading: + *s = SessionStatusUpgrading default: *s = SessionStatus(v) } diff --git a/arkruntime/model/session/oas_parameters_gen.go b/arkruntime/model/session/oas_parameters_gen.go index d1f53d3..ade9c5e 100644 --- a/arkruntime/model/session/oas_parameters_gen.go +++ b/arkruntime/model/session/oas_parameters_gen.go @@ -95,6 +95,11 @@ type SessionThreadsStreamEventsParams struct { EventDeltas []string `json:",omitempty" query:"event_deltas,repeat"` } +// SessionUpgradesCreateParams is parameters of SessionUpgrades_create operation. +type SessionUpgradesCreateParams struct { + SessionId string +} + // SessionsListParams is parameters of Sessions_list operation. type SessionsListParams struct { // 按 agent_id 精确过滤。. diff --git a/arkruntime/model/session/oas_schemas_gen.go b/arkruntime/model/session/oas_schemas_gen.go index 2b3c747..a7c032c 100644 --- a/arkruntime/model/session/oas_schemas_gen.go +++ b/arkruntime/model/session/oas_schemas_gen.go @@ -248,6 +248,222 @@ func (s *AgentRefToolsItem) init() AgentRefToolsItem { return m } +// Session upgrade 的目标 Agent 运行配置。 +// `id` 必须等于当前 Session 的 Agent ID —— upgrade 不支持换绑到另一个 +// Agent,不一致返回 403 `AgentMismatch`。 +// 数组字段(`tools` / `mcp_servers` / `skills`)是**整组替换**语义:省略 +// 表示保留原值,显式传 `[]` 表示清空。两者在 wire 上必须可区分,SDK 不能 +// 把空数组优化成省略字段。. +// Ref: #/components/schemas/AgentWithUpgrades +type AgentWithUpgrades struct { + // 固定 `"agent_with_upgrades"`。. + Type AgentWithUpgradesType `json:"type"` + // Agent ID;必须与当前 Session 的 Agent ID 一致。. + ID string `json:"id"` + // 目标 Agent 版本号。 + // 省略或传 `0` 表示**不锁版本、沿用 Session 当前的 Agent 快照**(注意与创建 + // 期不同:这里不是"走最新版")。传正整数则以该版本的 payload 为基线物化 + // ——`system` / `tools` / `mcp_servers` / `skills` / `multiagent` / `model` + // 整组跟着版本走,本次请求里的同名字段再叠加其上;版本不存在返回 + // 404。 + // 传负数返回 400。. + Version OptInt32 `json:"version"` + // 模型运行参数升级。. + Model OptModelUpgrades `json:"model"` + // System prompt。. + System OptString `json:"system"` + // 工具配置(整组替换)。. + Tools []AgentWithUpgradesToolsItem `json:"tools"` + // MCP server 配置(整组替换)。. + McpServers []AgentWithUpgradesMcpServersItem `json:"mcp_servers"` + // Skill 配置(整组替换)。. + Skills []AgentWithUpgradesSkillsItem `json:"skills"` + // 多 Agent 配置。. + Multiagent OptAgentWithUpgradesMultiagent `json:"multiagent"` + // Agent 展示名。. + DisplayName OptString `json:"display_name"` +} + +// GetType returns the value of Type. +func (s *AgentWithUpgrades) GetType() AgentWithUpgradesType { + return s.Type +} + +// GetID returns the value of ID. +func (s *AgentWithUpgrades) GetID() string { + return s.ID +} + +// GetVersion returns the value of Version. +func (s *AgentWithUpgrades) GetVersion() OptInt32 { + return s.Version +} + +// GetModel returns the value of Model. +func (s *AgentWithUpgrades) GetModel() OptModelUpgrades { + return s.Model +} + +// GetSystem returns the value of System. +func (s *AgentWithUpgrades) GetSystem() OptString { + return s.System +} + +// GetTools returns the value of Tools. +func (s *AgentWithUpgrades) GetTools() []AgentWithUpgradesToolsItem { + return s.Tools +} + +// GetMcpServers returns the value of McpServers. +func (s *AgentWithUpgrades) GetMcpServers() []AgentWithUpgradesMcpServersItem { + return s.McpServers +} + +// GetSkills returns the value of Skills. +func (s *AgentWithUpgrades) GetSkills() []AgentWithUpgradesSkillsItem { + return s.Skills +} + +// GetMultiagent returns the value of Multiagent. +func (s *AgentWithUpgrades) GetMultiagent() OptAgentWithUpgradesMultiagent { + return s.Multiagent +} + +// GetDisplayName returns the value of DisplayName. +func (s *AgentWithUpgrades) GetDisplayName() OptString { + return s.DisplayName +} + +// SetType sets the value of Type. +func (s *AgentWithUpgrades) SetType(val AgentWithUpgradesType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *AgentWithUpgrades) SetID(val string) { + s.ID = val +} + +// SetVersion sets the value of Version. +func (s *AgentWithUpgrades) SetVersion(val OptInt32) { + s.Version = val +} + +// SetModel sets the value of Model. +func (s *AgentWithUpgrades) SetModel(val OptModelUpgrades) { + s.Model = val +} + +// SetSystem sets the value of System. +func (s *AgentWithUpgrades) SetSystem(val OptString) { + s.System = val +} + +// SetTools sets the value of Tools. +func (s *AgentWithUpgrades) SetTools(val []AgentWithUpgradesToolsItem) { + s.Tools = val +} + +// SetMcpServers sets the value of McpServers. +func (s *AgentWithUpgrades) SetMcpServers(val []AgentWithUpgradesMcpServersItem) { + s.McpServers = val +} + +// SetSkills sets the value of Skills. +func (s *AgentWithUpgrades) SetSkills(val []AgentWithUpgradesSkillsItem) { + s.Skills = val +} + +// SetMultiagent sets the value of Multiagent. +func (s *AgentWithUpgrades) SetMultiagent(val OptAgentWithUpgradesMultiagent) { + s.Multiagent = val +} + +// SetDisplayName sets the value of DisplayName. +func (s *AgentWithUpgrades) SetDisplayName(val OptString) { + s.DisplayName = val +} + +type AgentWithUpgradesMcpServersItem map[string]jx.Raw + +func (s *AgentWithUpgradesMcpServersItem) init() AgentWithUpgradesMcpServersItem { + m := *s + if m == nil { + m = map[string]jx.Raw{} + *s = m + } + return m +} + +// 多 Agent 配置。. +type AgentWithUpgradesMultiagent map[string]jx.Raw + +func (s *AgentWithUpgradesMultiagent) init() AgentWithUpgradesMultiagent { + m := *s + if m == nil { + m = map[string]jx.Raw{} + *s = m + } + return m +} + +type AgentWithUpgradesSkillsItem map[string]jx.Raw + +func (s *AgentWithUpgradesSkillsItem) init() AgentWithUpgradesSkillsItem { + m := *s + if m == nil { + m = map[string]jx.Raw{} + *s = m + } + return m +} + +type AgentWithUpgradesToolsItem map[string]jx.Raw + +func (s *AgentWithUpgradesToolsItem) init() AgentWithUpgradesToolsItem { + m := *s + if m == nil { + m = map[string]jx.Raw{} + *s = m + } + return m +} + +// 固定 `"agent_with_upgrades"`。. +type AgentWithUpgradesType string + +const ( + AgentWithUpgradesTypeAgentWithUpgrades AgentWithUpgradesType = "agent_with_upgrades" +) + +// AllValues returns all AgentWithUpgradesType values. +func (AgentWithUpgradesType) AllValues() []AgentWithUpgradesType { + return []AgentWithUpgradesType{ + AgentWithUpgradesTypeAgentWithUpgrades, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s AgentWithUpgradesType) MarshalText() ([]byte, error) { + switch s { + case AgentWithUpgradesTypeAgentWithUpgrades: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *AgentWithUpgradesType) UnmarshalText(data []byte) error { + switch AgentWithUpgradesType(data) { + case AgentWithUpgradesTypeAgentWithUpgrades: + *s = AgentWithUpgradesTypeAgentWithUpgrades + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + // 直接以 base64 携带的文档数据。. // Ref: #/components/schemas/Base64DocumentSource type Base64DocumentSource struct { @@ -493,6 +709,72 @@ func (s *CreateSessionResourceRequestType) UnmarshalText(data []byte) error { } } +// 发起一次已有 Session 的运行配置升级。 +// `agent` / `environment` / `vault_ids` 至少提供一个作为升级目标,全部省略 +// 返回 400 `MissingUpgradeTarget`(只传 `initial_events` 不算升级目标)。 +// Session 必须处于 `idle` 且上一轮 turn 以 `end_turn` 收尾,否则返回 403 +// `SessionNotIdle` / `SessionNotEndTurn`;同一 Session 上一次升级尚未收敛时 +// 返回 403 `UpgradeInProgress`。. +// Ref: #/components/schemas/CreateSessionUpgradeRequest +type CreateSessionUpgradeRequest struct { + // 目标 Agent 运行配置。. + Agent OptAgentWithUpgrades `json:"agent"` + // 目标 Environment 运行配置。. + Environment OptEnvironmentWithUpgrades `json:"environment"` + // Session 绑定的 Vault 列表。 + // 只能用来**刷新已绑定 Vault 的内容**,不能改变绑定集合:传入集合必须与 + // 当前 Session 的 `vault_ids` 相等(忽略顺序与重复),否则返回 403 + // `VaultMismatch`。显式传 `[]` 表示声明空集,仅当当前 Session 本身没有 + // Vault 绑定时通过 —— 因此省略与 `[]` 在 wire 上必须可区分,SDK 不能把 + // 空数组优化成省略字段。. + VaultIds []string `json:"vault_ids"` + // 配置切换收敛后由服务端补投的事件。当前只接受**恰好一个** `user.message` + // 事件,且 content 为单个 text block、内容是 `/compact` 命令 XML;不满足 + // 返回 400 `InvalidInitialEvents` / `InvalidCompactCommand`。省略或传 `[]` + // 表示本次不投递事件。. + InitialEvents []ManagedAgentsEventParams `json:"initial_events"` +} + +// GetAgent returns the value of Agent. +func (s *CreateSessionUpgradeRequest) GetAgent() OptAgentWithUpgrades { + return s.Agent +} + +// GetEnvironment returns the value of Environment. +func (s *CreateSessionUpgradeRequest) GetEnvironment() OptEnvironmentWithUpgrades { + return s.Environment +} + +// GetVaultIds returns the value of VaultIds. +func (s *CreateSessionUpgradeRequest) GetVaultIds() []string { + return s.VaultIds +} + +// GetInitialEvents returns the value of InitialEvents. +func (s *CreateSessionUpgradeRequest) GetInitialEvents() []ManagedAgentsEventParams { + return s.InitialEvents +} + +// SetAgent sets the value of Agent. +func (s *CreateSessionUpgradeRequest) SetAgent(val OptAgentWithUpgrades) { + s.Agent = val +} + +// SetEnvironment sets the value of Environment. +func (s *CreateSessionUpgradeRequest) SetEnvironment(val OptEnvironmentWithUpgrades) { + s.Environment = val +} + +// SetVaultIds sets the value of VaultIds. +func (s *CreateSessionUpgradeRequest) SetVaultIds(val []string) { + s.VaultIds = val +} + +// SetInitialEvents sets the value of InitialEvents. +func (s *CreateSessionUpgradeRequest) SetInitialEvents(val []ManagedAgentsEventParams) { + s.InitialEvents = val +} + // Delete Session 响应体。. // Ref: #/components/schemas/DeleteSessionResponse type DeleteSessionResponse struct { @@ -1034,6 +1316,91 @@ func (s *EnvironmentWithOverridesType) UnmarshalText(data []byte) error { } } +// Session upgrade 的目标 Environment 运行配置。 +// `id` 必须等于当前 Session 的 Environment ID —— upgrade 不支持换绑到另一个 +// Environment,不一致返回 403 `EnvironmentMismatch`;`config.type` 也必须与 +// 当前 Session 的环境类型一致(不支持 cloud ↔ self_hosted 互切),不一致 +// 返回 403 `EnvironmentTypeMismatch`。 +// cloud 环境开放 `networking` / `packages` / `env` / `setup_script` 升级, +// 在当前 Sandbox 上原地生效,不更换 Sandbox 实例。self_hosted 沙箱由用户 +// 自建,除 `config.type` 外不接受任何运行时字段(这类 Session 仍可升级 +// agent 并投递 `initial_events`);`tos` 一律拒绝,返回 400 +// `TosUpgradeNotSupported`。. +// Ref: #/components/schemas/EnvironmentWithUpgrades +type EnvironmentWithUpgrades struct { + // 固定 `"environment_with_upgrades"`。. + Type EnvironmentWithUpgradesType `json:"type"` + // Environment ID;必须与当前 Session 的 Environment ID 一致。. + ID string `json:"id"` + // 运行时配置升级。. + Config OptEnvironmentConfigOverride `json:"config"` +} + +// GetType returns the value of Type. +func (s *EnvironmentWithUpgrades) GetType() EnvironmentWithUpgradesType { + return s.Type +} + +// GetID returns the value of ID. +func (s *EnvironmentWithUpgrades) GetID() string { + return s.ID +} + +// GetConfig returns the value of Config. +func (s *EnvironmentWithUpgrades) GetConfig() OptEnvironmentConfigOverride { + return s.Config +} + +// SetType sets the value of Type. +func (s *EnvironmentWithUpgrades) SetType(val EnvironmentWithUpgradesType) { + s.Type = val +} + +// SetID sets the value of ID. +func (s *EnvironmentWithUpgrades) SetID(val string) { + s.ID = val +} + +// SetConfig sets the value of Config. +func (s *EnvironmentWithUpgrades) SetConfig(val OptEnvironmentConfigOverride) { + s.Config = val +} + +// 固定 `"environment_with_upgrades"`。. +type EnvironmentWithUpgradesType string + +const ( + EnvironmentWithUpgradesTypeEnvironmentWithUpgrades EnvironmentWithUpgradesType = "environment_with_upgrades" +) + +// AllValues returns all EnvironmentWithUpgradesType values. +func (EnvironmentWithUpgradesType) AllValues() []EnvironmentWithUpgradesType { + return []EnvironmentWithUpgradesType{ + EnvironmentWithUpgradesTypeEnvironmentWithUpgrades, + } +} + +// MarshalText implements encoding.TextMarshaler. +func (s EnvironmentWithUpgradesType) MarshalText() ([]byte, error) { + switch s { + case EnvironmentWithUpgradesTypeEnvironmentWithUpgrades: + return []byte(s), nil + default: + return nil, errors.Errorf("invalid value: %q", s) + } +} + +// UnmarshalText implements encoding.TextUnmarshaler. +func (s *EnvironmentWithUpgradesType) UnmarshalText(data []byte) error { + switch EnvironmentWithUpgradesType(data) { + case EnvironmentWithUpgradesTypeEnvironmentWithUpgrades: + *s = EnvironmentWithUpgradesTypeEnvironmentWithUpgrades + return nil + default: + return errors.Errorf("invalid value: %q", data) + } +} + // 通过 Files API 上传后引用的文档。. // Ref: #/components/schemas/FileDocumentSource type FileDocumentSource struct { @@ -2517,15 +2884,27 @@ func (s *ManagedAgentsUserToolResultEventParams) SetSessionThreadID(val OptStrin s.SessionThreadID = val } -// Session 创建时允许临时覆写的模型运行参数。. +// Session 创建时允许临时覆写的模型运行参数。 +// 内部字段省略表示继承 base Agent 的对应值。. // Ref: #/components/schemas/ModelOverrides type ModelOverrides struct { + // 模型 semantic 覆写,形如 `"doubao-seed-2-0-pro-260215"`;服务端按最右 + // 侧一个 `-` 拆成 (name, version) 冻结进本 Session 的 Agent 快照,不回写 + // base Agent。解析失败返回 400,模型未开通返回 403 `ModelNotOpen`。. + ID OptString `json:"id"` // 模型速度档位。. Speed OptString `json:"speed"` // Thinking 配置。. Thinking OptString `json:"thinking"` // 推理努力程度。. ReasoningEffort OptString `json:"reasoning_effort"` + // 服务档位。. + ServiceTier OptString `json:"service_tier"` +} + +// GetID returns the value of ID. +func (s *ModelOverrides) GetID() OptString { + return s.ID } // GetSpeed returns the value of Speed. @@ -2543,6 +2922,16 @@ func (s *ModelOverrides) GetReasoningEffort() OptString { return s.ReasoningEffort } +// GetServiceTier returns the value of ServiceTier. +func (s *ModelOverrides) GetServiceTier() OptString { + return s.ServiceTier +} + +// SetID sets the value of ID. +func (s *ModelOverrides) SetID(val OptString) { + s.ID = val +} + // SetSpeed sets the value of Speed. func (s *ModelOverrides) SetSpeed(val OptString) { s.Speed = val @@ -2558,6 +2947,87 @@ func (s *ModelOverrides) SetReasoningEffort(val OptString) { s.ReasoningEffort = val } +// SetServiceTier sets the value of ServiceTier. +func (s *ModelOverrides) SetServiceTier(val OptString) { + s.ServiceTier = val +} + +// Session upgrade 中允许调整的模型配置子集。 +// 与创建期的 `ModelOverrides` 的差别在于 `id`:upgrade 允许改模型身份, +// 服务端把它解析成完整 provider / protocol / endpoint 后冻结进 Session 的 +// Agent 快照。. +// Ref: #/components/schemas/ModelUpgrades +type ModelUpgrades struct { + // 目标模型标识,形如 `"doubao-seed-2-0-pro-260215"`。 + // 与创建期 `ModelOverrides.id` 的**解析路径不同**:此处服务端拿它当 + // endpoint 反查元数据来得到 (name, version),而不是按字符串拆分。因此 + // endpoint 不存在 / 已关闭 / 元信息缺失均返回 400;显式传空串也返回 400 + // (upgrade 不支持卸载底模)。模型未开通返回 403 `ModelNotOpen`;底模不支持 + // 作为 Agent 使用返回 400。 + // 换 `id` 时 `speed` / `thinking` / `reasoning_effort` / `service_tier` 会按 + // **新**底模重新校验取值:本次未显式提供的,沿用升级前的值参与校验,落在新 + // 底模白名单外返回 400。. + ID OptString `json:"id"` + // 模型速度档位。. + Speed OptString `json:"speed"` + // Thinking 配置。. + Thinking OptString `json:"thinking"` + // 推理努力程度。. + ReasoningEffort OptString `json:"reasoning_effort"` + // 服务档位。. + ServiceTier OptString `json:"service_tier"` +} + +// GetID returns the value of ID. +func (s *ModelUpgrades) GetID() OptString { + return s.ID +} + +// GetSpeed returns the value of Speed. +func (s *ModelUpgrades) GetSpeed() OptString { + return s.Speed +} + +// GetThinking returns the value of Thinking. +func (s *ModelUpgrades) GetThinking() OptString { + return s.Thinking +} + +// GetReasoningEffort returns the value of ReasoningEffort. +func (s *ModelUpgrades) GetReasoningEffort() OptString { + return s.ReasoningEffort +} + +// GetServiceTier returns the value of ServiceTier. +func (s *ModelUpgrades) GetServiceTier() OptString { + return s.ServiceTier +} + +// SetID sets the value of ID. +func (s *ModelUpgrades) SetID(val OptString) { + s.ID = val +} + +// SetSpeed sets the value of Speed. +func (s *ModelUpgrades) SetSpeed(val OptString) { + s.Speed = val +} + +// SetThinking sets the value of Thinking. +func (s *ModelUpgrades) SetThinking(val OptString) { + s.Thinking = val +} + +// SetReasoningEffort sets the value of ReasoningEffort. +func (s *ModelUpgrades) SetReasoningEffort(val OptString) { + s.ReasoningEffort = val +} + +// SetServiceTier sets the value of ServiceTier. +func (s *ModelUpgrades) SetServiceTier(val OptString) { + s.ServiceTier = val +} + // NewOptAgentRefMultiagent returns new OptAgentRefMultiagent with value set to v. func NewOptAgentRefMultiagent(v AgentRefMultiagent) OptAgentRefMultiagent { return OptAgentRefMultiagent{ @@ -2604,6 +3074,98 @@ func (o OptAgentRefMultiagent) Or(d AgentRefMultiagent) AgentRefMultiagent { return d } +// NewOptAgentWithUpgrades returns new OptAgentWithUpgrades with value set to v. +func NewOptAgentWithUpgrades(v AgentWithUpgrades) OptAgentWithUpgrades { + return OptAgentWithUpgrades{ + Value: v, + Set: true, + } +} + +// OptAgentWithUpgrades is optional AgentWithUpgrades. +type OptAgentWithUpgrades struct { + Value AgentWithUpgrades + Set bool +} + +// IsSet returns true if OptAgentWithUpgrades was set. +func (o OptAgentWithUpgrades) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptAgentWithUpgrades) Reset() { + var v AgentWithUpgrades + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptAgentWithUpgrades) SetTo(v AgentWithUpgrades) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptAgentWithUpgrades) Get() (v AgentWithUpgrades, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptAgentWithUpgrades) Or(d AgentWithUpgrades) AgentWithUpgrades { + if v, ok := o.Get(); ok { + return v + } + return d +} + +// NewOptAgentWithUpgradesMultiagent returns new OptAgentWithUpgradesMultiagent with value set to v. +func NewOptAgentWithUpgradesMultiagent(v AgentWithUpgradesMultiagent) OptAgentWithUpgradesMultiagent { + return OptAgentWithUpgradesMultiagent{ + Value: v, + Set: true, + } +} + +// OptAgentWithUpgradesMultiagent is optional AgentWithUpgradesMultiagent. +type OptAgentWithUpgradesMultiagent struct { + Value AgentWithUpgradesMultiagent + Set bool +} + +// IsSet returns true if OptAgentWithUpgradesMultiagent was set. +func (o OptAgentWithUpgradesMultiagent) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptAgentWithUpgradesMultiagent) Reset() { + var v AgentWithUpgradesMultiagent + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptAgentWithUpgradesMultiagent) SetTo(v AgentWithUpgradesMultiagent) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptAgentWithUpgradesMultiagent) Get() (v AgentWithUpgradesMultiagent, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptAgentWithUpgradesMultiagent) Or(d AgentWithUpgradesMultiagent) AgentWithUpgradesMultiagent { + if v, ok := o.Get(); ok { + return v + } + return d +} + // NewOptBool returns new OptBool with value set to v. func NewOptBool(v bool) OptBool { return OptBool{ @@ -3018,6 +3580,52 @@ func (o OptEnvironmentWithOverrides) Or(d EnvironmentWithOverrides) EnvironmentW return d } +// NewOptEnvironmentWithUpgrades returns new OptEnvironmentWithUpgrades with value set to v. +func NewOptEnvironmentWithUpgrades(v EnvironmentWithUpgrades) OptEnvironmentWithUpgrades { + return OptEnvironmentWithUpgrades{ + Value: v, + Set: true, + } +} + +// OptEnvironmentWithUpgrades is optional EnvironmentWithUpgrades. +type OptEnvironmentWithUpgrades struct { + Value EnvironmentWithUpgrades + Set bool +} + +// IsSet returns true if OptEnvironmentWithUpgrades was set. +func (o OptEnvironmentWithUpgrades) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptEnvironmentWithUpgrades) Reset() { + var v EnvironmentWithUpgrades + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptEnvironmentWithUpgrades) SetTo(v EnvironmentWithUpgrades) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptEnvironmentWithUpgrades) Get() (v EnvironmentWithUpgrades, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptEnvironmentWithUpgrades) Or(d EnvironmentWithUpgrades) EnvironmentWithUpgrades { + if v, ok := o.Get(); ok { + return v + } + return d +} + // NewOptInt32 returns new OptInt32 with value set to v. func NewOptInt32(v int32) OptInt32 { return OptInt32{ @@ -3202,6 +3810,52 @@ func (o OptModelOverrides) Or(d ModelOverrides) ModelOverrides { return d } +// NewOptModelUpgrades returns new OptModelUpgrades with value set to v. +func NewOptModelUpgrades(v ModelUpgrades) OptModelUpgrades { + return OptModelUpgrades{ + Value: v, + Set: true, + } +} + +// OptModelUpgrades is optional ModelUpgrades. +type OptModelUpgrades struct { + Value ModelUpgrades + Set bool +} + +// IsSet returns true if OptModelUpgrades was set. +func (o OptModelUpgrades) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptModelUpgrades) Reset() { + var v ModelUpgrades + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptModelUpgrades) SetTo(v ModelUpgrades) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptModelUpgrades) Get() (v ModelUpgrades, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptModelUpgrades) Or(d ModelUpgrades) ModelUpgrades { + if v, ok := o.Get(); ok { + return v + } + return d +} + // NewOptNilSessionEnvironment returns new OptNilSessionEnvironment with value set to v. func NewOptNilSessionEnvironment(v SessionEnvironment) OptNilSessionEnvironment { return OptNilSessionEnvironment{ @@ -4224,6 +4878,9 @@ const ( SessionStatusRunning SessionStatus = "running" SessionStatusTerminated SessionStatus = "terminated" SessionStatusRescheduling SessionStatus = "rescheduling" + SessionStatusInitializing SessionStatus = "initializing" + SessionStatusFailed SessionStatus = "failed" + SessionStatusUpgrading SessionStatus = "upgrading" ) // AllValues returns all SessionStatus values. @@ -4233,6 +4890,9 @@ func (SessionStatus) AllValues() []SessionStatus { SessionStatusRunning, SessionStatusTerminated, SessionStatusRescheduling, + SessionStatusInitializing, + SessionStatusFailed, + SessionStatusUpgrading, } } @@ -4247,6 +4907,12 @@ func (s SessionStatus) MarshalText() ([]byte, error) { return []byte(s), nil case SessionStatusRescheduling: return []byte(s), nil + case SessionStatusInitializing: + return []byte(s), nil + case SessionStatusFailed: + return []byte(s), nil + case SessionStatusUpgrading: + return []byte(s), nil default: return nil, errors.Errorf("invalid value: %q", s) } @@ -4267,6 +4933,15 @@ func (s *SessionStatus) UnmarshalText(data []byte) error { case SessionStatusRescheduling: *s = SessionStatusRescheduling return nil + case SessionStatusInitializing: + *s = SessionStatusInitializing + return nil + case SessionStatusFailed: + *s = SessionStatusFailed + return nil + case SessionStatusUpgrading: + *s = SessionStatusUpgrading + return nil default: return errors.Errorf("invalid value: %q", data) } diff --git a/arkruntime/model/session/oas_validators_gen.go b/arkruntime/model/session/oas_validators_gen.go index 6cbbccd..37be2b4 100644 --- a/arkruntime/model/session/oas_validators_gen.go +++ b/arkruntime/model/session/oas_validators_gen.go @@ -12,6 +12,38 @@ import ( "github.com/volcengine/ark-runtime-go/arkruntime/internal/validate" ) +func (s *AgentWithUpgrades) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s AgentWithUpgradesType) Validate() error { + switch s { + case "agent_with_upgrades": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + func (s *CreateSessionRequest) Validate() error { if s == nil { return validate.ErrNilPointer @@ -99,6 +131,79 @@ func (s CreateSessionResourceRequestType) Validate() error { } } +func (s *CreateSessionUpgradeRequest) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if value, ok := s.Agent.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "agent", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Environment.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "environment", + Error: err, + }) + } + if err := func() error { + var failures []validate.FieldError + for i, elem := range s.InitialEvents { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "initial_events", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + func (s *EnvironmentConfigOverride) Validate() error { if s == nil { return validate.ErrNilPointer @@ -218,6 +323,56 @@ func (s EnvironmentWithOverridesType) Validate() error { } } +func (s *EnvironmentWithUpgrades) Validate() error { + if s == nil { + return validate.ErrNilPointer + } + + var failures []validate.FieldError + if err := func() error { + if err := s.Type.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "type", + Error: err, + }) + } + if err := func() error { + if value, ok := s.Config.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "config", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + +func (s EnvironmentWithUpgradesType) Validate() error { + switch s { + case "environment_with_upgrades": + return nil + default: + return errors.Errorf("invalid value: %v", s) + } +} + func (s *ListSessionEventsResponseWire) Validate() error { if s == nil { return validate.ErrNilPointer @@ -829,6 +984,12 @@ func (s SessionStatus) Validate() error { return nil case "rescheduling": return nil + case "initializing": + return nil + case "failed": + return nil + case "upgrading": + return nil default: return errors.Errorf("invalid value: %v", s) } diff --git a/arkruntime/user_agent_test.go b/arkruntime/user_agent_test.go index d47c533..a19391e 100644 --- a/arkruntime/user_agent_test.go +++ b/arkruntime/user_agent_test.go @@ -40,7 +40,7 @@ func TestRequestUserAgent(t *testing.T) { defer server.Close() client := arkruntime.NewClientWithApiKey("test-key", arkruntime.WithBaseUrl(server.URL), arkruntime.WithRetryTimes(0)) - request := &images.CreateImageGenerationRequest{Model: "test-model", Prompt: "test"} + request := &images.CreateImageGenerationRequest{Model: "test-model", Prompt: images.NewOptString("test")} if test.custom { _, err = client.GenerateImages(context.Background(), request, arkruntime.WithCustomHeader("User-Agent", test.value)) diff --git a/examples/byteplus/images/main.go b/examples/byteplus/images/main.go index 1a442d1..425d303 100644 --- a/examples/byteplus/images/main.go +++ b/examples/byteplus/images/main.go @@ -27,7 +27,7 @@ func main() { fmt.Println("----- [Seedream] generate images (response format: url) -----") req := &images.CreateImageGenerationRequest{ Model: seedreamModel, - Prompt: "龙与地下城女骑士背景是起伏的平原,目光从镜头转向平原", + Prompt: images.NewOptString("龙与地下城女骑士背景是起伏的平原,目光从镜头转向平原"), ResponseFormat: images.NewOptResponseFormat(images.ResponseFormatURL), Seed: images.NewOptInt64(1234567890), Watermark: images.NewOptBool(true), diff --git a/examples/volc/images/main.go b/examples/volc/images/main.go index 7304a98..f2d3489 100644 --- a/examples/volc/images/main.go +++ b/examples/volc/images/main.go @@ -27,7 +27,7 @@ func main() { fmt.Println("----- [Seedream] generate images (response format: url) -----") req := &images.CreateImageGenerationRequest{ Model: seedreamModel, - Prompt: "龙与地下城女骑士背景是起伏的平原,目光从镜头转向平原", + Prompt: images.NewOptString("龙与地下城女骑士背景是起伏的平原,目光从镜头转向平原"), ResponseFormat: images.NewOptResponseFormat(images.ResponseFormatURL), Seed: images.NewOptInt64(1234567890), Watermark: images.NewOptBool(true),