diff --git a/backend/api/handler/coze/loop/apis/prompt_open_apiservice.go b/backend/api/handler/coze/loop/apis/prompt_open_apiservice.go index ac1b2a5c7..0cbcda2c7 100644 --- a/backend/api/handler/coze/loop/apis/prompt_open_apiservice.go +++ b/backend/api/handler/coze/loop/apis/prompt_open_apiservice.go @@ -7,9 +7,14 @@ package apis import ( "context" + "io" + "net/http" "github.com/cloudwego/hertz/pkg/app" + "github.com/cloudwego/hertz/pkg/protocol/consts" + "github.com/hertz-contrib/sse" + "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice" ) @@ -20,3 +25,47 @@ var promptOpenAPISvc promptopenapiservice.Client func BatchGetPromptByPromptKey(ctx context.Context, c *app.RequestContext) { invokeAndRender(ctx, c, promptOpenAPISvc.BatchGetPromptByPromptKey) } + +// Execute . +// @router /v1/loop/prompts/execute [POST] +func Execute(ctx context.Context, c *app.RequestContext) { + invokeAndRender(ctx, c, promptOpenAPISvc.Execute) +} + +// ExecuteStreaming . +// @router /v1/loop/prompts/execute_streaming [POST] +func ExecuteStreaming(ctx context.Context, c *app.RequestContext) { + var err error + var req openapi.ExecuteRequest + err = c.BindAndValidate(&req) + if err != nil { + c.String(consts.StatusBadRequest, err.Error()) + return + } + + c.SetStatusCode(http.StatusOK) + s := sse.NewStream(c) + stream, err := promptOpenAPISvc.ExecuteStreaming(ctx, &req) + if err != nil { + publishErrEvent(ctx, s, err) + return + } + if stream != nil { + for { + resp, err := stream.Recv(ctx) + if err == io.EOF { + return + } + if err != nil { + publishErrEvent(ctx, s, err) + return + } + // for streaming openapi, should get data from resp.GetData() + err = publishDataEvent(ctx, s, resp.GetData()) + if err != nil { + publishErrEvent(ctx, s, err) + return + } + } + } +} diff --git a/backend/api/router/coze/loop/apis/coze.loop.apis.go b/backend/api/router/coze/loop/apis/coze.loop.apis.go index 8213999a1..8d33a40fc 100644 --- a/backend/api/router/coze/loop/apis/coze.loop.apis.go +++ b/backend/api/router/coze/loop/apis/coze.loop.apis.go @@ -350,6 +350,8 @@ func Register(r *server.Hertz, handler *apis.APIHandler) { } { _prompts0 := _loop.Group("/prompts", _prompts0Mw(handler)...) + _prompts0.POST("/execute", append(_executeMw(handler), apis.Execute)...) + _prompts0.POST("/execute_streaming", append(_executestreamingMw(handler), apis.ExecuteStreaming)...) _prompts0.POST("/mget", append(_batchgetpromptbypromptkeyMw(handler), apis.BatchGetPromptByPromptKey)...) } { diff --git a/backend/api/router/coze/loop/apis/middleware.go b/backend/api/router/coze/loop/apis/middleware.go index 3c3bfcf32..05100a421 100644 --- a/backend/api/router/coze/loop/apis/middleware.go +++ b/backend/api/router/coze/loop/apis/middleware.go @@ -1256,6 +1256,16 @@ func _batchgetlabelMw(handler *apis.APIHandler) []app.HandlerFunc { return nil } +func _executeMw(handler *apis.APIHandler) []app.HandlerFunc { + // your code... + return nil +} + +func _executestreamingMw(handler *apis.APIHandler) []app.HandlerFunc { + // your code... + return nil +} + func _listtracesoapiMw(handler *apis.APIHandler) []app.HandlerFunc { // your code... return nil diff --git a/backend/go.mod b/backend/go.mod index 81a040368..e8546f646 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -14,6 +14,7 @@ require ( github.com/alitto/pond/v2 v2.3.4 github.com/apache/rocketmq-client-go/v2 v2.1.2 github.com/apache/thrift v0.19.0 + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 github.com/aws/aws-sdk-go v1.55.7 github.com/baidubce/bce-qianfan-sdk/go/qianfan v0.0.15 github.com/bytedance/gg v1.0.0 @@ -78,6 +79,7 @@ require ( github.com/spf13/viper v1.20.1 github.com/stretchr/testify v1.10.0 github.com/valyala/fasttemplate v1.2.2 + github.com/vincent-petithory/dataurl v1.0.0 github.com/volcengine/volcengine-go-sdk v1.1.4 github.com/xeipuuv/gojsonschema v1.2.0 go.opentelemetry.io/proto/otlp v1.7.1 @@ -249,7 +251,7 @@ require ( golang.org/x/tools v0.34.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250728155136-f173205681a0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 // indirect - google.golang.org/grpc v1.74.2 // indirect + google.golang.org/grpc v1.74.2 google.golang.org/protobuf v1.36.6 gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/src-d/go-errors.v1 v1.0.0 // indirect diff --git a/backend/go.sum b/backend/go.sum index cba7b541b..6abdd347e 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -102,6 +102,8 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= @@ -249,12 +251,14 @@ github.com/coocood/freecache v1.2.4/go.mod h1:RBUWa/Cy+OHdfTGFEhEuE1pMCMX51Ncizj github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coze-dev/cozeloop-go v0.1.9 h1:4mb1x+uP0WNRG/safwWrOwm65T+qQsWOt+W8ZrZEFUU= -github.com/coze-dev/cozeloop-go v0.1.9/go.mod h1:RMH0F6ZMwZm4ZL92IHLjTf4lmr8QHxYJVPCdz60ZbbI= github.com/coze-dev/cozeloop-go v0.1.10-0.20250901062520-61d3699b1e83 h1:7Jh4flr9XqvissJtafWhTcs1vcErUcsjNkkniH/szxY= github.com/coze-dev/cozeloop-go v0.1.10-0.20250901062520-61d3699b1e83/go.mod h1:RMH0F6ZMwZm4ZL92IHLjTf4lmr8QHxYJVPCdz60ZbbI= +github.com/coze-dev/cozeloop-go v0.1.10-0.20250908135219-177e3684e3b0 h1:RUeArwrJ2KN9Ts0CowFjRxmdQ1lYOjBObqZa6eWc0Pk= +github.com/coze-dev/cozeloop-go v0.1.10-0.20250908135219-177e3684e3b0/go.mod h1:HItWiKBuKWwFJEcQ8ysjLjH1s8DBSEZJ4bL9H7OLI2c= github.com/coze-dev/cozeloop-go/spec v0.1.4-0.20250829072213-3812ddbfb735 h1:qxAwjHy0SLQazDO3oGJ8D24vOeM2Oz2+n27bNPegBls= github.com/coze-dev/cozeloop-go/spec v0.1.4-0.20250829072213-3812ddbfb735/go.mod h1:/f3BrWehffwXIpd4b5rYIqktLd/v5dlLBw0h9F/LQIU= +github.com/coze-dev/cozeloop-go/spec v0.1.4-0.20250901062520-61d3699b1e83 h1:6eGUPoX88L56+5qlNuEcHuBijwcZKganDjx91d/AfH4= +github.com/coze-dev/cozeloop-go/spec v0.1.4-0.20250901062520-61d3699b1e83/go.mod h1:/f3BrWehffwXIpd4b5rYIqktLd/v5dlLBw0h9F/LQIU= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= @@ -918,6 +922,8 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vincent-petithory/dataurl v1.0.0 h1:cXw+kPto8NLuJtlMsI152irrVw9fRDX8AbShPRpg2CI= +github.com/vincent-petithory/dataurl v1.0.0/go.mod h1:FHafX5vmDzyP+1CQATJn7WFKc9CvnvxyvZy6I1MrG/U= github.com/volcengine/volc-sdk-golang v1.0.23/go.mod h1:AfG/PZRUkHJ9inETvbjNifTDgut25Wbkm2QoYBTbvyU= github.com/volcengine/volc-sdk-golang v1.0.172 h1:475eZM4pLPNtN2FIypdJ6lSj0lQsk1wfDwxUBqpNFY4= github.com/volcengine/volc-sdk-golang v1.0.172/go.mod h1:PA2CrkTf08dsmb1fLQbkF00/804nCPcPeMLqa7+FdTk= diff --git a/backend/infra/looptracer/mocks/cozeloop_span.go b/backend/infra/looptracer/mocks/cozeloop_span.go index d85089f94..684724495 100644 --- a/backend/infra/looptracer/mocks/cozeloop_span.go +++ b/backend/infra/looptracer/mocks/cozeloop_span.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/coze-dev/cozeloop-go (interfaces: Client) +// Source: github.com/coze-dev/cozeloop-go (interfaces: Span) // // Generated by this command: // -// mockgen -destination mocks/cozeloop_client.go -package mocks github.com/coze-dev/cozeloop-go Client +// mockgen -destination mocks/cozeloop_span.go -package mocks github.com/coze-dev/cozeloop-go Span // // Package mocks is a generated GoMock package. diff --git a/backend/kitex_gen/coze/loop/apis/promptopenapiservice/client.go b/backend/kitex_gen/coze/loop/apis/promptopenapiservice/client.go index f826f07a9..32724c2e7 100644 --- a/backend/kitex_gen/coze/loop/apis/promptopenapiservice/client.go +++ b/backend/kitex_gen/coze/loop/apis/promptopenapiservice/client.go @@ -6,19 +6,28 @@ import ( "context" client "github.com/cloudwego/kitex/client" callopt "github.com/cloudwego/kitex/client/callopt" + streamcall "github.com/cloudwego/kitex/client/callopt/streamcall" + streaming "github.com/cloudwego/kitex/pkg/streaming" + transport "github.com/cloudwego/kitex/transport" openapi "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" ) // Client is designed to provide IDL-compatible methods with call-option parameter for kitex framework. type Client interface { BatchGetPromptByPromptKey(ctx context.Context, req *openapi.BatchGetPromptByPromptKeyRequest, callOptions ...callopt.Option) (r *openapi.BatchGetPromptByPromptKeyResponse, err error) + Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (r *openapi.ExecuteResponse, err error) + ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream PromptOpenAPIService_ExecuteStreamingClient, err error) } +type PromptOpenAPIService_ExecuteStreamingClient streaming.ServerStreamingClient[openapi.ExecuteStreamingResponse] + // NewClient creates a client for the service defined in IDL. func NewClient(destService string, opts ...client.Option) (Client, error) { var options []client.Option options = append(options, client.WithDestService(destService)) + options = append(options, client.WithTransportProtocol(transport.TTHeaderStreaming)) + options = append(options, opts...) kc, err := client.NewClient(serviceInfo(), options...) @@ -47,3 +56,13 @@ func (p *kPromptOpenAPIServiceClient) BatchGetPromptByPromptKey(ctx context.Cont ctx = client.NewCtxWithCallOptions(ctx, callOptions) return p.kClient.BatchGetPromptByPromptKey(ctx, req) } + +func (p *kPromptOpenAPIServiceClient) Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (r *openapi.ExecuteResponse, err error) { + ctx = client.NewCtxWithCallOptions(ctx, callOptions) + return p.kClient.Execute(ctx, req) +} + +func (p *kPromptOpenAPIServiceClient) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream PromptOpenAPIService_ExecuteStreamingClient, err error) { + ctx = client.NewCtxWithCallOptions(ctx, streamcall.GetCallOptions(callOptions)) + return p.kClient.ExecuteStreaming(ctx, req) +} diff --git a/backend/kitex_gen/coze/loop/apis/promptopenapiservice/promptopenapiservice.go b/backend/kitex_gen/coze/loop/apis/promptopenapiservice/promptopenapiservice.go index 8281d6e96..89ad53ee5 100644 --- a/backend/kitex_gen/coze/loop/apis/promptopenapiservice/promptopenapiservice.go +++ b/backend/kitex_gen/coze/loop/apis/promptopenapiservice/promptopenapiservice.go @@ -7,6 +7,7 @@ import ( "errors" client "github.com/cloudwego/kitex/client" kitex "github.com/cloudwego/kitex/pkg/serviceinfo" + streaming "github.com/cloudwego/kitex/pkg/streaming" apis "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/apis" openapi "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" ) @@ -21,6 +22,20 @@ var serviceMethods = map[string]kitex.MethodInfo{ false, kitex.WithStreamingMode(kitex.StreamingNone), ), + "Execute": kitex.NewMethodInfo( + executeHandler, + newPromptOpenAPIServiceExecuteArgs, + newPromptOpenAPIServiceExecuteResult, + false, + kitex.WithStreamingMode(kitex.StreamingNone), + ), + "ExecuteStreaming": kitex.NewMethodInfo( + executeStreamingHandler, + newPromptOpenAPIServiceExecuteStreamingArgs, + newPromptOpenAPIServiceExecuteStreamingResult, + false, + kitex.WithStreamingMode(kitex.StreamingServer), + ), } var ( @@ -73,6 +88,46 @@ func newPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() interface{} { return openapi.NewPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() } +func executeHandler(ctx context.Context, handler interface{}, arg, result interface{}) error { + realArg := arg.(*openapi.PromptOpenAPIServiceExecuteArgs) + realResult := result.(*openapi.PromptOpenAPIServiceExecuteResult) + success, err := handler.(openapi.PromptOpenAPIService).Execute(ctx, realArg.Req) + if err != nil { + return err + } + realResult.Success = success + return nil +} + +func newPromptOpenAPIServiceExecuteArgs() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteArgs() +} + +func newPromptOpenAPIServiceExecuteResult() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteResult() +} + +func executeStreamingHandler(ctx context.Context, handler interface{}, arg, result interface{}) error { + st, err := streaming.GetServerStreamFromArg(arg) + if err != nil { + return err + } + stream := streaming.NewServerStreamingServer[openapi.ExecuteStreamingResponse](st) + req := new(openapi.ExecuteRequest) + if err := stream.RecvMsg(ctx, req); err != nil { + return err + } + return handler.(openapi.PromptOpenAPIService).ExecuteStreaming(ctx, req, stream) +} + +func newPromptOpenAPIServiceExecuteStreamingArgs() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteStreamingArgs() +} + +func newPromptOpenAPIServiceExecuteStreamingResult() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteStreamingResult() +} + type kClient struct { c client.Client sc client.Streaming @@ -94,3 +149,28 @@ func (p *kClient) BatchGetPromptByPromptKey(ctx context.Context, req *openapi.Ba } return _result.GetSuccess(), nil } + +func (p *kClient) Execute(ctx context.Context, req *openapi.ExecuteRequest) (r *openapi.ExecuteResponse, err error) { + var _args openapi.PromptOpenAPIServiceExecuteArgs + _args.Req = req + var _result openapi.PromptOpenAPIServiceExecuteResult + if err = p.c.Call(ctx, "Execute", &_args, &_result); err != nil { + return + } + return _result.GetSuccess(), nil +} + +func (p *kClient) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest) (PromptOpenAPIService_ExecuteStreamingClient, error) { + st, err := p.sc.StreamX(ctx, "ExecuteStreaming") + if err != nil { + return nil, err + } + stream := streaming.NewServerStreamingClient[openapi.ExecuteStreamingResponse](st) + if err := stream.SendMsg(ctx, req); err != nil { + return nil, err + } + if err := stream.CloseSend(ctx); err != nil { + return nil, err + } + return stream, nil +} diff --git a/backend/kitex_gen/coze/loop/llm/domain/common/common.go b/backend/kitex_gen/coze/loop/llm/domain/common/common.go index c275be10c..b829de225 100644 --- a/backend/kitex_gen/coze/loop/llm/domain/common/common.go +++ b/backend/kitex_gen/coze/loop/llm/domain/common/common.go @@ -9,6 +9,8 @@ const ( ScenarioPromptDebug = "prompt_debug" + ScenarioPromptAsAService = "prompt_as_a_service" + ScenarioEvalTarget = "eval_target" ScenarioEvaluator = "evaluator" diff --git a/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi.go b/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi.go index 4a841ccfd..f0ff648fe 100644 --- a/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi.go +++ b/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi.go @@ -6,6 +6,7 @@ import ( "context" "fmt" "github.com/apache/thrift/lib/go/thrift" + "github.com/cloudwego/kitex/pkg/streaming" "github.com/coze-dev/coze-loop/backend/kitex_gen/base" "strings" ) @@ -21,6 +22,10 @@ const ( ContentTypeText = "text" + ContentTypeImageURL = "image_url" + + ContentTypeBase64Data = "base64_data" + ContentTypeMultiPartVariable = "multi_part_variable" VariableTypeString = "string" @@ -1018,83 +1023,125 @@ func (p *PromptResultData) Field1DeepEqual(src []*PromptResult_) bool { return true } -type PromptQuery struct { - PromptKey *string `thrift:"prompt_key,1,optional" frugal:"1,optional,string" form:"prompt_key" json:"prompt_key,omitempty" query:"prompt_key"` - Version *string `thrift:"version,2,optional" frugal:"2,optional,string" form:"version" json:"version,omitempty" query:"version"` - Label *string `thrift:"label,3,optional" frugal:"3,optional,string" form:"label" json:"label,omitempty" query:"label"` +type ExecuteRequest struct { + WorkspaceID *int64 `thrift:"workspace_id,1,optional" frugal:"1,optional,i64" json:"workspace_id" form:"workspace_id" ` + PromptIdentifier *PromptQuery `thrift:"prompt_identifier,2,optional" frugal:"2,optional,PromptQuery" form:"prompt_identifier" json:"prompt_identifier,omitempty"` + VariableVals []*VariableVal `thrift:"variable_vals,10,optional" frugal:"10,optional,list" form:"variable_vals" json:"variable_vals,omitempty"` + Messages []*Message `thrift:"messages,11,optional" frugal:"11,optional,list" form:"messages" json:"messages,omitempty"` + Base *base.Base `thrift:"Base,255,optional" frugal:"255,optional,base.Base" form:"Base" json:"Base,omitempty" query:"Base"` } -func NewPromptQuery() *PromptQuery { - return &PromptQuery{} +func NewExecuteRequest() *ExecuteRequest { + return &ExecuteRequest{} } -func (p *PromptQuery) InitDefault() { +func (p *ExecuteRequest) InitDefault() { } -var PromptQuery_PromptKey_DEFAULT string +var ExecuteRequest_WorkspaceID_DEFAULT int64 -func (p *PromptQuery) GetPromptKey() (v string) { +func (p *ExecuteRequest) GetWorkspaceID() (v int64) { if p == nil { return } - if !p.IsSetPromptKey() { - return PromptQuery_PromptKey_DEFAULT + if !p.IsSetWorkspaceID() { + return ExecuteRequest_WorkspaceID_DEFAULT } - return *p.PromptKey + return *p.WorkspaceID } -var PromptQuery_Version_DEFAULT string +var ExecuteRequest_PromptIdentifier_DEFAULT *PromptQuery -func (p *PromptQuery) GetVersion() (v string) { +func (p *ExecuteRequest) GetPromptIdentifier() (v *PromptQuery) { if p == nil { return } - if !p.IsSetVersion() { - return PromptQuery_Version_DEFAULT + if !p.IsSetPromptIdentifier() { + return ExecuteRequest_PromptIdentifier_DEFAULT } - return *p.Version + return p.PromptIdentifier } -var PromptQuery_Label_DEFAULT string +var ExecuteRequest_VariableVals_DEFAULT []*VariableVal -func (p *PromptQuery) GetLabel() (v string) { +func (p *ExecuteRequest) GetVariableVals() (v []*VariableVal) { if p == nil { return } - if !p.IsSetLabel() { - return PromptQuery_Label_DEFAULT + if !p.IsSetVariableVals() { + return ExecuteRequest_VariableVals_DEFAULT } - return *p.Label + return p.VariableVals } -func (p *PromptQuery) SetPromptKey(val *string) { - p.PromptKey = val + +var ExecuteRequest_Messages_DEFAULT []*Message + +func (p *ExecuteRequest) GetMessages() (v []*Message) { + if p == nil { + return + } + if !p.IsSetMessages() { + return ExecuteRequest_Messages_DEFAULT + } + return p.Messages } -func (p *PromptQuery) SetVersion(val *string) { - p.Version = val + +var ExecuteRequest_Base_DEFAULT *base.Base + +func (p *ExecuteRequest) GetBase() (v *base.Base) { + if p == nil { + return + } + if !p.IsSetBase() { + return ExecuteRequest_Base_DEFAULT + } + return p.Base } -func (p *PromptQuery) SetLabel(val *string) { - p.Label = val +func (p *ExecuteRequest) SetWorkspaceID(val *int64) { + p.WorkspaceID = val +} +func (p *ExecuteRequest) SetPromptIdentifier(val *PromptQuery) { + p.PromptIdentifier = val +} +func (p *ExecuteRequest) SetVariableVals(val []*VariableVal) { + p.VariableVals = val +} +func (p *ExecuteRequest) SetMessages(val []*Message) { + p.Messages = val +} +func (p *ExecuteRequest) SetBase(val *base.Base) { + p.Base = val } -var fieldIDToName_PromptQuery = map[int16]string{ - 1: "prompt_key", - 2: "version", - 3: "label", +var fieldIDToName_ExecuteRequest = map[int16]string{ + 1: "workspace_id", + 2: "prompt_identifier", + 10: "variable_vals", + 11: "messages", + 255: "Base", } -func (p *PromptQuery) IsSetPromptKey() bool { - return p.PromptKey != nil +func (p *ExecuteRequest) IsSetWorkspaceID() bool { + return p.WorkspaceID != nil } -func (p *PromptQuery) IsSetVersion() bool { - return p.Version != nil +func (p *ExecuteRequest) IsSetPromptIdentifier() bool { + return p.PromptIdentifier != nil } -func (p *PromptQuery) IsSetLabel() bool { - return p.Label != nil +func (p *ExecuteRequest) IsSetVariableVals() bool { + return p.VariableVals != nil } -func (p *PromptQuery) Read(iprot thrift.TProtocol) (err error) { +func (p *ExecuteRequest) IsSetMessages() bool { + return p.Messages != nil +} + +func (p *ExecuteRequest) IsSetBase() bool { + return p.Base != nil +} + +func (p *ExecuteRequest) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -1113,7 +1160,7 @@ func (p *PromptQuery) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.I64 { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } @@ -1121,16 +1168,32 @@ func (p *PromptQuery) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 2: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.STRUCT { if err = p.ReadField2(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } - case 3: - if fieldTypeId == thrift.STRING { - if err = p.ReadField3(iprot); err != nil { + case 10: + if fieldTypeId == thrift.LIST { + if err = p.ReadField10(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 11: + if fieldTypeId == thrift.LIST { + if err = p.ReadField11(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 255: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField255(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { @@ -1155,7 +1218,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptQuery[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteRequest[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -1165,43 +1228,83 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *PromptQuery) ReadField1(iprot thrift.TProtocol) error { +func (p *ExecuteRequest) ReadField1(iprot thrift.TProtocol) error { - var _field *string - if v, err := iprot.ReadString(); err != nil { + var _field *int64 + if v, err := iprot.ReadI64(); err != nil { return err } else { _field = &v } - p.PromptKey = _field + p.WorkspaceID = _field return nil } -func (p *PromptQuery) ReadField2(iprot thrift.TProtocol) error { +func (p *ExecuteRequest) ReadField2(iprot thrift.TProtocol) error { + _field := NewPromptQuery() + if err := _field.Read(iprot); err != nil { + return err + } + p.PromptIdentifier = _field + return nil +} +func (p *ExecuteRequest) ReadField10(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*VariableVal, 0, size) + values := make([]VariableVal, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() - var _field *string - if v, err := iprot.ReadString(); err != nil { + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { return err - } else { - _field = &v } - p.Version = _field + p.VariableVals = _field return nil } -func (p *PromptQuery) ReadField3(iprot thrift.TProtocol) error { +func (p *ExecuteRequest) ReadField11(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*Message, 0, size) + values := make([]Message, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() - var _field *string - if v, err := iprot.ReadString(); err != nil { + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { return err - } else { - _field = &v } - p.Label = _field + p.Messages = _field + return nil +} +func (p *ExecuteRequest) ReadField255(iprot thrift.TProtocol) error { + _field := base.NewBase() + if err := _field.Read(iprot); err != nil { + return err + } + p.Base = _field return nil } -func (p *PromptQuery) Write(oprot thrift.TProtocol) (err error) { +func (p *ExecuteRequest) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("PromptQuery"); err != nil { + if err = oprot.WriteStructBegin("ExecuteRequest"); err != nil { goto WriteStructBeginError } if p != nil { @@ -1213,8 +1316,16 @@ func (p *PromptQuery) Write(oprot thrift.TProtocol) (err error) { fieldId = 2 goto WriteFieldError } - if err = p.writeField3(oprot); err != nil { - fieldId = 3 + if err = p.writeField10(oprot); err != nil { + fieldId = 10 + goto WriteFieldError + } + if err = p.writeField11(oprot); err != nil { + fieldId = 11 + goto WriteFieldError + } + if err = p.writeField255(oprot); err != nil { + fieldId = 255 goto WriteFieldError } } @@ -1235,12 +1346,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *PromptQuery) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetPromptKey() { - if err = oprot.WriteFieldBegin("prompt_key", thrift.STRING, 1); err != nil { +func (p *ExecuteRequest) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetWorkspaceID() { + if err = oprot.WriteFieldBegin("workspace_id", thrift.I64, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.PromptKey); err != nil { + if err := oprot.WriteI64(*p.WorkspaceID); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -1253,12 +1364,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *PromptQuery) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetVersion() { - if err = oprot.WriteFieldBegin("version", thrift.STRING, 2); err != nil { +func (p *ExecuteRequest) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetPromptIdentifier() { + if err = oprot.WriteFieldBegin("prompt_identifier", thrift.STRUCT, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Version); err != nil { + if err := p.PromptIdentifier.Write(oprot); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -1271,12 +1382,20 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } -func (p *PromptQuery) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetLabel() { - if err = oprot.WriteFieldBegin("label", thrift.STRING, 3); err != nil { +func (p *ExecuteRequest) writeField10(oprot thrift.TProtocol) (err error) { + if p.IsSetVariableVals() { + if err = oprot.WriteFieldBegin("variable_vals", thrift.LIST, 10); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Label); err != nil { + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.VariableVals)); err != nil { + return err + } + for _, v := range p.VariableVals { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -1285,130 +1404,238 @@ func (p *PromptQuery) writeField3(oprot thrift.TProtocol) (err error) { } return nil WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 10 begin error: ", p), err) WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 10 end error: ", p), err) +} +func (p *ExecuteRequest) writeField11(oprot thrift.TProtocol) (err error) { + if p.IsSetMessages() { + if err = oprot.WriteFieldBegin("messages", thrift.LIST, 11); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Messages)); err != nil { + return err + } + for _, v := range p.Messages { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 11 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 11 end error: ", p), err) +} +func (p *ExecuteRequest) writeField255(oprot thrift.TProtocol) (err error) { + if p.IsSetBase() { + if err = oprot.WriteFieldBegin("Base", thrift.STRUCT, 255); err != nil { + goto WriteFieldBeginError + } + if err := p.Base.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 255 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 255 end error: ", p), err) } -func (p *PromptQuery) String() string { +func (p *ExecuteRequest) String() string { if p == nil { return "" } - return fmt.Sprintf("PromptQuery(%+v)", *p) + return fmt.Sprintf("ExecuteRequest(%+v)", *p) } -func (p *PromptQuery) DeepEqual(ano *PromptQuery) bool { +func (p *ExecuteRequest) DeepEqual(ano *ExecuteRequest) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.PromptKey) { + if !p.Field1DeepEqual(ano.WorkspaceID) { return false } - if !p.Field2DeepEqual(ano.Version) { + if !p.Field2DeepEqual(ano.PromptIdentifier) { return false } - if !p.Field3DeepEqual(ano.Label) { + if !p.Field10DeepEqual(ano.VariableVals) { + return false + } + if !p.Field11DeepEqual(ano.Messages) { + return false + } + if !p.Field255DeepEqual(ano.Base) { return false } return true } -func (p *PromptQuery) Field1DeepEqual(src *string) bool { +func (p *ExecuteRequest) Field1DeepEqual(src *int64) bool { - if p.PromptKey == src { + if p.WorkspaceID == src { return true - } else if p.PromptKey == nil || src == nil { + } else if p.WorkspaceID == nil || src == nil { return false } - if strings.Compare(*p.PromptKey, *src) != 0 { + if *p.WorkspaceID != *src { return false } return true } -func (p *PromptQuery) Field2DeepEqual(src *string) bool { +func (p *ExecuteRequest) Field2DeepEqual(src *PromptQuery) bool { - if p.Version == src { - return true - } else if p.Version == nil || src == nil { + if !p.PromptIdentifier.DeepEqual(src) { return false } - if strings.Compare(*p.Version, *src) != 0 { + return true +} +func (p *ExecuteRequest) Field10DeepEqual(src []*VariableVal) bool { + + if len(p.VariableVals) != len(src) { return false } + for i, v := range p.VariableVals { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } return true } -func (p *PromptQuery) Field3DeepEqual(src *string) bool { +func (p *ExecuteRequest) Field11DeepEqual(src []*Message) bool { - if p.Label == src { - return true - } else if p.Label == nil || src == nil { + if len(p.Messages) != len(src) { return false } - if strings.Compare(*p.Label, *src) != 0 { + for i, v := range p.Messages { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } + return true +} +func (p *ExecuteRequest) Field255DeepEqual(src *base.Base) bool { + + if !p.Base.DeepEqual(src) { return false } return true } -type PromptResult_ struct { - Query *PromptQuery `thrift:"query,1,optional" frugal:"1,optional,PromptQuery" form:"query" json:"query,omitempty" query:"query"` - Prompt *Prompt `thrift:"prompt,2,optional" frugal:"2,optional,Prompt" form:"prompt" json:"prompt,omitempty" query:"prompt"` +type ExecuteResponse struct { + Code *int32 `thrift:"code,1,optional" frugal:"1,optional,i32" form:"code" json:"code,omitempty" query:"code"` + Msg *string `thrift:"msg,2,optional" frugal:"2,optional,string" form:"msg" json:"msg,omitempty" query:"msg"` + Data *ExecuteData `thrift:"data,3,optional" frugal:"3,optional,ExecuteData" form:"data" json:"data,omitempty" query:"data"` + BaseResp *base.BaseResp `thrift:"BaseResp,255,optional" frugal:"255,optional,base.BaseResp" form:"BaseResp" json:"BaseResp,omitempty" query:"BaseResp"` } -func NewPromptResult_() *PromptResult_ { - return &PromptResult_{} +func NewExecuteResponse() *ExecuteResponse { + return &ExecuteResponse{} } -func (p *PromptResult_) InitDefault() { +func (p *ExecuteResponse) InitDefault() { } -var PromptResult__Query_DEFAULT *PromptQuery +var ExecuteResponse_Code_DEFAULT int32 -func (p *PromptResult_) GetQuery() (v *PromptQuery) { +func (p *ExecuteResponse) GetCode() (v int32) { if p == nil { return } - if !p.IsSetQuery() { - return PromptResult__Query_DEFAULT + if !p.IsSetCode() { + return ExecuteResponse_Code_DEFAULT } - return p.Query + return *p.Code } -var PromptResult__Prompt_DEFAULT *Prompt +var ExecuteResponse_Msg_DEFAULT string -func (p *PromptResult_) GetPrompt() (v *Prompt) { +func (p *ExecuteResponse) GetMsg() (v string) { if p == nil { return } - if !p.IsSetPrompt() { - return PromptResult__Prompt_DEFAULT + if !p.IsSetMsg() { + return ExecuteResponse_Msg_DEFAULT } - return p.Prompt + return *p.Msg } -func (p *PromptResult_) SetQuery(val *PromptQuery) { - p.Query = val + +var ExecuteResponse_Data_DEFAULT *ExecuteData + +func (p *ExecuteResponse) GetData() (v *ExecuteData) { + if p == nil { + return + } + if !p.IsSetData() { + return ExecuteResponse_Data_DEFAULT + } + return p.Data } -func (p *PromptResult_) SetPrompt(val *Prompt) { - p.Prompt = val + +var ExecuteResponse_BaseResp_DEFAULT *base.BaseResp + +func (p *ExecuteResponse) GetBaseResp() (v *base.BaseResp) { + if p == nil { + return + } + if !p.IsSetBaseResp() { + return ExecuteResponse_BaseResp_DEFAULT + } + return p.BaseResp +} +func (p *ExecuteResponse) SetCode(val *int32) { + p.Code = val +} +func (p *ExecuteResponse) SetMsg(val *string) { + p.Msg = val +} +func (p *ExecuteResponse) SetData(val *ExecuteData) { + p.Data = val +} +func (p *ExecuteResponse) SetBaseResp(val *base.BaseResp) { + p.BaseResp = val } -var fieldIDToName_PromptResult_ = map[int16]string{ - 1: "query", - 2: "prompt", +var fieldIDToName_ExecuteResponse = map[int16]string{ + 1: "code", + 2: "msg", + 3: "data", + 255: "BaseResp", } -func (p *PromptResult_) IsSetQuery() bool { - return p.Query != nil +func (p *ExecuteResponse) IsSetCode() bool { + return p.Code != nil } -func (p *PromptResult_) IsSetPrompt() bool { - return p.Prompt != nil +func (p *ExecuteResponse) IsSetMsg() bool { + return p.Msg != nil } -func (p *PromptResult_) Read(iprot thrift.TProtocol) (err error) { +func (p *ExecuteResponse) IsSetData() bool { + return p.Data != nil +} + +func (p *ExecuteResponse) IsSetBaseResp() bool { + return p.BaseResp != nil +} + +func (p *ExecuteResponse) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -1427,7 +1654,7 @@ func (p *PromptResult_) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.STRUCT { + if fieldTypeId == thrift.I32 { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } @@ -1435,13 +1662,29 @@ func (p *PromptResult_) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 2: - if fieldTypeId == thrift.STRUCT { + if fieldTypeId == thrift.STRING { if err = p.ReadField2(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } + case 3: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 255: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField255(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -1461,7 +1704,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptResult_[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteResponse[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -1471,26 +1714,48 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *PromptResult_) ReadField1(iprot thrift.TProtocol) error { - _field := NewPromptQuery() +func (p *ExecuteResponse) ReadField1(iprot thrift.TProtocol) error { + + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = &v + } + p.Code = _field + return nil +} +func (p *ExecuteResponse) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Msg = _field + return nil +} +func (p *ExecuteResponse) ReadField3(iprot thrift.TProtocol) error { + _field := NewExecuteData() if err := _field.Read(iprot); err != nil { return err } - p.Query = _field + p.Data = _field return nil } -func (p *PromptResult_) ReadField2(iprot thrift.TProtocol) error { - _field := NewPrompt() +func (p *ExecuteResponse) ReadField255(iprot thrift.TProtocol) error { + _field := base.NewBaseResp() if err := _field.Read(iprot); err != nil { return err } - p.Prompt = _field + p.BaseResp = _field return nil } -func (p *PromptResult_) Write(oprot thrift.TProtocol) (err error) { +func (p *ExecuteResponse) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("PromptResult"); err != nil { + if err = oprot.WriteStructBegin("ExecuteResponse"); err != nil { goto WriteStructBeginError } if p != nil { @@ -1502,6 +1767,14 @@ func (p *PromptResult_) Write(oprot thrift.TProtocol) (err error) { fieldId = 2 goto WriteFieldError } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + if err = p.writeField255(oprot); err != nil { + fieldId = 255 + goto WriteFieldError + } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -1520,12 +1793,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *PromptResult_) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetQuery() { - if err = oprot.WriteFieldBegin("query", thrift.STRUCT, 1); err != nil { +func (p *ExecuteResponse) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetCode() { + if err = oprot.WriteFieldBegin("code", thrift.I32, 1); err != nil { goto WriteFieldBeginError } - if err := p.Query.Write(oprot); err != nil { + if err := oprot.WriteI32(*p.Code); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -1538,12 +1811,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *PromptResult_) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetPrompt() { - if err = oprot.WriteFieldBegin("prompt", thrift.STRUCT, 2); err != nil { +func (p *ExecuteResponse) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetMsg() { + if err = oprot.WriteFieldBegin("msg", thrift.STRING, 2); err != nil { goto WriteFieldBeginError } - if err := p.Prompt.Write(oprot); err != nil { + if err := oprot.WriteString(*p.Msg); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -1556,213 +1829,188 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } +func (p *ExecuteResponse) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetData() { + if err = oprot.WriteFieldBegin("data", thrift.STRUCT, 3); err != nil { + goto WriteFieldBeginError + } + if err := p.Data.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} +func (p *ExecuteResponse) writeField255(oprot thrift.TProtocol) (err error) { + if p.IsSetBaseResp() { + if err = oprot.WriteFieldBegin("BaseResp", thrift.STRUCT, 255); err != nil { + goto WriteFieldBeginError + } + if err := p.BaseResp.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 255 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 255 end error: ", p), err) +} -func (p *PromptResult_) String() string { +func (p *ExecuteResponse) String() string { if p == nil { return "" } - return fmt.Sprintf("PromptResult_(%+v)", *p) + return fmt.Sprintf("ExecuteResponse(%+v)", *p) } -func (p *PromptResult_) DeepEqual(ano *PromptResult_) bool { +func (p *ExecuteResponse) DeepEqual(ano *ExecuteResponse) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Query) { + if !p.Field1DeepEqual(ano.Code) { return false } - if !p.Field2DeepEqual(ano.Prompt) { + if !p.Field2DeepEqual(ano.Msg) { + return false + } + if !p.Field3DeepEqual(ano.Data) { + return false + } + if !p.Field255DeepEqual(ano.BaseResp) { return false } return true } -func (p *PromptResult_) Field1DeepEqual(src *PromptQuery) bool { +func (p *ExecuteResponse) Field1DeepEqual(src *int32) bool { - if !p.Query.DeepEqual(src) { + if p.Code == src { + return true + } else if p.Code == nil || src == nil { + return false + } + if *p.Code != *src { return false } return true } -func (p *PromptResult_) Field2DeepEqual(src *Prompt) bool { +func (p *ExecuteResponse) Field2DeepEqual(src *string) bool { - if !p.Prompt.DeepEqual(src) { + if p.Msg == src { + return true + } else if p.Msg == nil || src == nil { + return false + } + if strings.Compare(*p.Msg, *src) != 0 { return false } return true } +func (p *ExecuteResponse) Field3DeepEqual(src *ExecuteData) bool { -type Prompt struct { - // 空间ID - WorkspaceID *int64 `thrift:"workspace_id,1,optional" frugal:"1,optional,i64" json:"workspace_id" form:"workspace_id" query:"workspace_id"` - // 唯一标识 - PromptKey *string `thrift:"prompt_key,2,optional" frugal:"2,optional,string" form:"prompt_key" json:"prompt_key,omitempty" query:"prompt_key"` - // 版本 - Version *string `thrift:"version,3,optional" frugal:"3,optional,string" form:"version" json:"version,omitempty" query:"version"` - // Prompt模板 - PromptTemplate *PromptTemplate `thrift:"prompt_template,4,optional" frugal:"4,optional,PromptTemplate" form:"prompt_template" json:"prompt_template,omitempty" query:"prompt_template"` - // tool定义 - Tools []*Tool `thrift:"tools,5,optional" frugal:"5,optional,list" form:"tools" json:"tools,omitempty" query:"tools"` - // tool调用配置 - ToolCallConfig *ToolCallConfig `thrift:"tool_call_config,6,optional" frugal:"6,optional,ToolCallConfig" form:"tool_call_config" json:"tool_call_config,omitempty" query:"tool_call_config"` - // 模型配置 - LlmConfig *LLMConfig `thrift:"llm_config,7,optional" frugal:"7,optional,LLMConfig" form:"llm_config" json:"llm_config,omitempty" query:"llm_config"` + if !p.Data.DeepEqual(src) { + return false + } + return true } +func (p *ExecuteResponse) Field255DeepEqual(src *base.BaseResp) bool { -func NewPrompt() *Prompt { - return &Prompt{} + if !p.BaseResp.DeepEqual(src) { + return false + } + return true } -func (p *Prompt) InitDefault() { -} - -var Prompt_WorkspaceID_DEFAULT int64 - -func (p *Prompt) GetWorkspaceID() (v int64) { - if p == nil { - return - } - if !p.IsSetWorkspaceID() { - return Prompt_WorkspaceID_DEFAULT - } - return *p.WorkspaceID -} - -var Prompt_PromptKey_DEFAULT string - -func (p *Prompt) GetPromptKey() (v string) { - if p == nil { - return - } - if !p.IsSetPromptKey() { - return Prompt_PromptKey_DEFAULT - } - return *p.PromptKey +type ExecuteData struct { + Message *Message `thrift:"message,1,optional" frugal:"1,optional,Message" form:"message" json:"message,omitempty" query:"message"` + FinishReason *string `thrift:"finish_reason,2,optional" frugal:"2,optional,string" form:"finish_reason" json:"finish_reason,omitempty" query:"finish_reason"` + Usage *TokenUsage `thrift:"usage,3,optional" frugal:"3,optional,TokenUsage" form:"usage" json:"usage,omitempty" query:"usage"` } -var Prompt_Version_DEFAULT string - -func (p *Prompt) GetVersion() (v string) { - if p == nil { - return - } - if !p.IsSetVersion() { - return Prompt_Version_DEFAULT - } - return *p.Version +func NewExecuteData() *ExecuteData { + return &ExecuteData{} } -var Prompt_PromptTemplate_DEFAULT *PromptTemplate - -func (p *Prompt) GetPromptTemplate() (v *PromptTemplate) { - if p == nil { - return - } - if !p.IsSetPromptTemplate() { - return Prompt_PromptTemplate_DEFAULT - } - return p.PromptTemplate +func (p *ExecuteData) InitDefault() { } -var Prompt_Tools_DEFAULT []*Tool +var ExecuteData_Message_DEFAULT *Message -func (p *Prompt) GetTools() (v []*Tool) { +func (p *ExecuteData) GetMessage() (v *Message) { if p == nil { return } - if !p.IsSetTools() { - return Prompt_Tools_DEFAULT + if !p.IsSetMessage() { + return ExecuteData_Message_DEFAULT } - return p.Tools + return p.Message } -var Prompt_ToolCallConfig_DEFAULT *ToolCallConfig +var ExecuteData_FinishReason_DEFAULT string -func (p *Prompt) GetToolCallConfig() (v *ToolCallConfig) { +func (p *ExecuteData) GetFinishReason() (v string) { if p == nil { return } - if !p.IsSetToolCallConfig() { - return Prompt_ToolCallConfig_DEFAULT + if !p.IsSetFinishReason() { + return ExecuteData_FinishReason_DEFAULT } - return p.ToolCallConfig + return *p.FinishReason } -var Prompt_LlmConfig_DEFAULT *LLMConfig +var ExecuteData_Usage_DEFAULT *TokenUsage -func (p *Prompt) GetLlmConfig() (v *LLMConfig) { +func (p *ExecuteData) GetUsage() (v *TokenUsage) { if p == nil { return } - if !p.IsSetLlmConfig() { - return Prompt_LlmConfig_DEFAULT + if !p.IsSetUsage() { + return ExecuteData_Usage_DEFAULT } - return p.LlmConfig -} -func (p *Prompt) SetWorkspaceID(val *int64) { - p.WorkspaceID = val -} -func (p *Prompt) SetPromptKey(val *string) { - p.PromptKey = val -} -func (p *Prompt) SetVersion(val *string) { - p.Version = val -} -func (p *Prompt) SetPromptTemplate(val *PromptTemplate) { - p.PromptTemplate = val -} -func (p *Prompt) SetTools(val []*Tool) { - p.Tools = val -} -func (p *Prompt) SetToolCallConfig(val *ToolCallConfig) { - p.ToolCallConfig = val -} -func (p *Prompt) SetLlmConfig(val *LLMConfig) { - p.LlmConfig = val -} - -var fieldIDToName_Prompt = map[int16]string{ - 1: "workspace_id", - 2: "prompt_key", - 3: "version", - 4: "prompt_template", - 5: "tools", - 6: "tool_call_config", - 7: "llm_config", + return p.Usage } - -func (p *Prompt) IsSetWorkspaceID() bool { - return p.WorkspaceID != nil +func (p *ExecuteData) SetMessage(val *Message) { + p.Message = val } - -func (p *Prompt) IsSetPromptKey() bool { - return p.PromptKey != nil +func (p *ExecuteData) SetFinishReason(val *string) { + p.FinishReason = val } - -func (p *Prompt) IsSetVersion() bool { - return p.Version != nil +func (p *ExecuteData) SetUsage(val *TokenUsage) { + p.Usage = val } -func (p *Prompt) IsSetPromptTemplate() bool { - return p.PromptTemplate != nil +var fieldIDToName_ExecuteData = map[int16]string{ + 1: "message", + 2: "finish_reason", + 3: "usage", } -func (p *Prompt) IsSetTools() bool { - return p.Tools != nil +func (p *ExecuteData) IsSetMessage() bool { + return p.Message != nil } -func (p *Prompt) IsSetToolCallConfig() bool { - return p.ToolCallConfig != nil +func (p *ExecuteData) IsSetFinishReason() bool { + return p.FinishReason != nil } -func (p *Prompt) IsSetLlmConfig() bool { - return p.LlmConfig != nil +func (p *ExecuteData) IsSetUsage() bool { + return p.Usage != nil } -func (p *Prompt) Read(iprot thrift.TProtocol) (err error) { +func (p *ExecuteData) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -1781,7 +2029,7 @@ func (p *Prompt) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.I64 { + if fieldTypeId == thrift.STRUCT { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } @@ -1797,40 +2045,8 @@ func (p *Prompt) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 3: - if fieldTypeId == thrift.STRING { - if err = p.ReadField3(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } - case 4: - if fieldTypeId == thrift.STRUCT { - if err = p.ReadField4(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } - case 5: - if fieldTypeId == thrift.LIST { - if err = p.ReadField5(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } - case 6: - if fieldTypeId == thrift.STRUCT { - if err = p.ReadField6(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } - case 7: if fieldTypeId == thrift.STRUCT { - if err = p.ReadField7(iprot); err != nil { + if err = p.ReadField3(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { @@ -1855,7 +2071,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Prompt[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteData[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -1865,29 +2081,15 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *Prompt) ReadField1(iprot thrift.TProtocol) error { - - var _field *int64 - if v, err := iprot.ReadI64(); err != nil { - return err - } else { - _field = &v - } - p.WorkspaceID = _field - return nil -} -func (p *Prompt) ReadField2(iprot thrift.TProtocol) error { - - var _field *string - if v, err := iprot.ReadString(); err != nil { +func (p *ExecuteData) ReadField1(iprot thrift.TProtocol) error { + _field := NewMessage() + if err := _field.Read(iprot); err != nil { return err - } else { - _field = &v } - p.PromptKey = _field + p.Message = _field return nil } -func (p *Prompt) ReadField3(iprot thrift.TProtocol) error { +func (p *ExecuteData) ReadField2(iprot thrift.TProtocol) error { var _field *string if v, err := iprot.ReadString(); err != nil { @@ -1895,60 +2097,21 @@ func (p *Prompt) ReadField3(iprot thrift.TProtocol) error { } else { _field = &v } - p.Version = _field - return nil -} -func (p *Prompt) ReadField4(iprot thrift.TProtocol) error { - _field := NewPromptTemplate() - if err := _field.Read(iprot); err != nil { - return err - } - p.PromptTemplate = _field - return nil -} -func (p *Prompt) ReadField5(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return err - } - _field := make([]*Tool, 0, size) - values := make([]Tool, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - - if err := _elem.Read(iprot); err != nil { - return err - } - - _field = append(_field, _elem) - } - if err := iprot.ReadListEnd(); err != nil { - return err - } - p.Tools = _field - return nil -} -func (p *Prompt) ReadField6(iprot thrift.TProtocol) error { - _field := NewToolCallConfig() - if err := _field.Read(iprot); err != nil { - return err - } - p.ToolCallConfig = _field + p.FinishReason = _field return nil } -func (p *Prompt) ReadField7(iprot thrift.TProtocol) error { - _field := NewLLMConfig() +func (p *ExecuteData) ReadField3(iprot thrift.TProtocol) error { + _field := NewTokenUsage() if err := _field.Read(iprot); err != nil { return err } - p.LlmConfig = _field + p.Usage = _field return nil } -func (p *Prompt) Write(oprot thrift.TProtocol) (err error) { +func (p *ExecuteData) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("Prompt"); err != nil { + if err = oprot.WriteStructBegin("ExecuteData"); err != nil { goto WriteStructBeginError } if p != nil { @@ -1964,22 +2127,6 @@ func (p *Prompt) Write(oprot thrift.TProtocol) (err error) { fieldId = 3 goto WriteFieldError } - if err = p.writeField4(oprot); err != nil { - fieldId = 4 - goto WriteFieldError - } - if err = p.writeField5(oprot); err != nil { - fieldId = 5 - goto WriteFieldError - } - if err = p.writeField6(oprot); err != nil { - fieldId = 6 - goto WriteFieldError - } - if err = p.writeField7(oprot); err != nil { - fieldId = 7 - goto WriteFieldError - } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -1998,12 +2145,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *Prompt) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetWorkspaceID() { - if err = oprot.WriteFieldBegin("workspace_id", thrift.I64, 1); err != nil { +func (p *ExecuteData) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetMessage() { + if err = oprot.WriteFieldBegin("message", thrift.STRUCT, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteI64(*p.WorkspaceID); err != nil { + if err := p.Message.Write(oprot); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2016,12 +2163,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *Prompt) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetPromptKey() { - if err = oprot.WriteFieldBegin("prompt_key", thrift.STRING, 2); err != nil { +func (p *ExecuteData) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetFinishReason() { + if err = oprot.WriteFieldBegin("finish_reason", thrift.STRING, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.PromptKey); err != nil { + if err := oprot.WriteString(*p.FinishReason); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2034,12 +2181,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } -func (p *Prompt) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetVersion() { - if err = oprot.WriteFieldBegin("version", thrift.STRING, 3); err != nil { +func (p *ExecuteData) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetUsage() { + if err = oprot.WriteFieldBegin("usage", thrift.STRUCT, 3); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Version); err != nil { + if err := p.Usage.Write(oprot); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2052,276 +2199,179 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) } -func (p *Prompt) writeField4(oprot thrift.TProtocol) (err error) { - if p.IsSetPromptTemplate() { - if err = oprot.WriteFieldBegin("prompt_template", thrift.STRUCT, 4); err != nil { - goto WriteFieldBeginError - } - if err := p.PromptTemplate.Write(oprot); err != nil { - return err - } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } + +func (p *ExecuteData) String() string { + if p == nil { + return "" } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) -} -func (p *Prompt) writeField5(oprot thrift.TProtocol) (err error) { - if p.IsSetTools() { - if err = oprot.WriteFieldBegin("tools", thrift.LIST, 5); err != nil { - goto WriteFieldBeginError - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Tools)); err != nil { - return err - } - for _, v := range p.Tools { - if err := v.Write(oprot); err != nil { - return err - } - } - if err := oprot.WriteListEnd(); err != nil { - return err - } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } - } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 5 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 5 end error: ", p), err) -} -func (p *Prompt) writeField6(oprot thrift.TProtocol) (err error) { - if p.IsSetToolCallConfig() { - if err = oprot.WriteFieldBegin("tool_call_config", thrift.STRUCT, 6); err != nil { - goto WriteFieldBeginError - } - if err := p.ToolCallConfig.Write(oprot); err != nil { - return err - } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } - } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 6 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 6 end error: ", p), err) -} -func (p *Prompt) writeField7(oprot thrift.TProtocol) (err error) { - if p.IsSetLlmConfig() { - if err = oprot.WriteFieldBegin("llm_config", thrift.STRUCT, 7); err != nil { - goto WriteFieldBeginError - } - if err := p.LlmConfig.Write(oprot); err != nil { - return err - } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } - } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 7 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 7 end error: ", p), err) -} - -func (p *Prompt) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Prompt(%+v)", *p) + return fmt.Sprintf("ExecuteData(%+v)", *p) } -func (p *Prompt) DeepEqual(ano *Prompt) bool { +func (p *ExecuteData) DeepEqual(ano *ExecuteData) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.WorkspaceID) { - return false - } - if !p.Field2DeepEqual(ano.PromptKey) { - return false - } - if !p.Field3DeepEqual(ano.Version) { - return false - } - if !p.Field4DeepEqual(ano.PromptTemplate) { - return false - } - if !p.Field5DeepEqual(ano.Tools) { + if !p.Field1DeepEqual(ano.Message) { return false } - if !p.Field6DeepEqual(ano.ToolCallConfig) { + if !p.Field2DeepEqual(ano.FinishReason) { return false } - if !p.Field7DeepEqual(ano.LlmConfig) { + if !p.Field3DeepEqual(ano.Usage) { return false } return true } -func (p *Prompt) Field1DeepEqual(src *int64) bool { +func (p *ExecuteData) Field1DeepEqual(src *Message) bool { - if p.WorkspaceID == src { - return true - } else if p.WorkspaceID == nil || src == nil { - return false - } - if *p.WorkspaceID != *src { + if !p.Message.DeepEqual(src) { return false } return true } -func (p *Prompt) Field2DeepEqual(src *string) bool { +func (p *ExecuteData) Field2DeepEqual(src *string) bool { - if p.PromptKey == src { + if p.FinishReason == src { return true - } else if p.PromptKey == nil || src == nil { + } else if p.FinishReason == nil || src == nil { return false } - if strings.Compare(*p.PromptKey, *src) != 0 { + if strings.Compare(*p.FinishReason, *src) != 0 { return false } return true } -func (p *Prompt) Field3DeepEqual(src *string) bool { +func (p *ExecuteData) Field3DeepEqual(src *TokenUsage) bool { - if p.Version == src { - return true - } else if p.Version == nil || src == nil { - return false - } - if strings.Compare(*p.Version, *src) != 0 { + if !p.Usage.DeepEqual(src) { return false } return true } -func (p *Prompt) Field4DeepEqual(src *PromptTemplate) bool { - if !p.PromptTemplate.DeepEqual(src) { - return false - } - return true +type ExecuteStreamingResponse struct { + ID *string `thrift:"id,1,optional" frugal:"1,optional,string" form:"id" json:"id,omitempty" query:"id"` + Event *string `thrift:"event,2,optional" frugal:"2,optional,string" form:"event" json:"event,omitempty" query:"event"` + Retry *int64 `thrift:"retry,3,optional" frugal:"3,optional,i64" form:"retry" json:"retry,omitempty" query:"retry"` + Data *ExecuteStreamingData `thrift:"data,4,optional" frugal:"4,optional,ExecuteStreamingData" form:"data" json:"data,omitempty" query:"data"` + BaseResp *base.BaseResp `thrift:"BaseResp,255,optional" frugal:"255,optional,base.BaseResp" form:"BaseResp" json:"BaseResp,omitempty" query:"BaseResp"` } -func (p *Prompt) Field5DeepEqual(src []*Tool) bool { - if len(p.Tools) != len(src) { - return false - } - for i, v := range p.Tools { - _src := src[i] - if !v.DeepEqual(_src) { - return false - } - } - return true +func NewExecuteStreamingResponse() *ExecuteStreamingResponse { + return &ExecuteStreamingResponse{} } -func (p *Prompt) Field6DeepEqual(src *ToolCallConfig) bool { - if !p.ToolCallConfig.DeepEqual(src) { - return false - } - return true +func (p *ExecuteStreamingResponse) InitDefault() { } -func (p *Prompt) Field7DeepEqual(src *LLMConfig) bool { - if !p.LlmConfig.DeepEqual(src) { - return false - } - return true -} +var ExecuteStreamingResponse_ID_DEFAULT string -type PromptTemplate struct { - // 模板类型 - TemplateType *TemplateType `thrift:"template_type,1,optional" frugal:"1,optional,string" form:"template_type" json:"template_type,omitempty" query:"template_type"` - // 只支持message list形式托管 - Messages []*Message `thrift:"messages,2,optional" frugal:"2,optional,list" form:"messages" json:"messages,omitempty" query:"messages"` - // 变量定义 - VariableDefs []*VariableDef `thrift:"variable_defs,3,optional" frugal:"3,optional,list" form:"variable_defs" json:"variable_defs,omitempty" query:"variable_defs"` +func (p *ExecuteStreamingResponse) GetID() (v string) { + if p == nil { + return + } + if !p.IsSetID() { + return ExecuteStreamingResponse_ID_DEFAULT + } + return *p.ID } -func NewPromptTemplate() *PromptTemplate { - return &PromptTemplate{} -} +var ExecuteStreamingResponse_Event_DEFAULT string -func (p *PromptTemplate) InitDefault() { +func (p *ExecuteStreamingResponse) GetEvent() (v string) { + if p == nil { + return + } + if !p.IsSetEvent() { + return ExecuteStreamingResponse_Event_DEFAULT + } + return *p.Event } -var PromptTemplate_TemplateType_DEFAULT TemplateType +var ExecuteStreamingResponse_Retry_DEFAULT int64 -func (p *PromptTemplate) GetTemplateType() (v TemplateType) { +func (p *ExecuteStreamingResponse) GetRetry() (v int64) { if p == nil { return } - if !p.IsSetTemplateType() { - return PromptTemplate_TemplateType_DEFAULT + if !p.IsSetRetry() { + return ExecuteStreamingResponse_Retry_DEFAULT } - return *p.TemplateType + return *p.Retry } -var PromptTemplate_Messages_DEFAULT []*Message +var ExecuteStreamingResponse_Data_DEFAULT *ExecuteStreamingData -func (p *PromptTemplate) GetMessages() (v []*Message) { +func (p *ExecuteStreamingResponse) GetData() (v *ExecuteStreamingData) { if p == nil { return } - if !p.IsSetMessages() { - return PromptTemplate_Messages_DEFAULT + if !p.IsSetData() { + return ExecuteStreamingResponse_Data_DEFAULT } - return p.Messages + return p.Data } -var PromptTemplate_VariableDefs_DEFAULT []*VariableDef +var ExecuteStreamingResponse_BaseResp_DEFAULT *base.BaseResp -func (p *PromptTemplate) GetVariableDefs() (v []*VariableDef) { +func (p *ExecuteStreamingResponse) GetBaseResp() (v *base.BaseResp) { if p == nil { return } - if !p.IsSetVariableDefs() { - return PromptTemplate_VariableDefs_DEFAULT + if !p.IsSetBaseResp() { + return ExecuteStreamingResponse_BaseResp_DEFAULT } - return p.VariableDefs + return p.BaseResp } -func (p *PromptTemplate) SetTemplateType(val *TemplateType) { - p.TemplateType = val +func (p *ExecuteStreamingResponse) SetID(val *string) { + p.ID = val } -func (p *PromptTemplate) SetMessages(val []*Message) { - p.Messages = val +func (p *ExecuteStreamingResponse) SetEvent(val *string) { + p.Event = val } -func (p *PromptTemplate) SetVariableDefs(val []*VariableDef) { - p.VariableDefs = val +func (p *ExecuteStreamingResponse) SetRetry(val *int64) { + p.Retry = val +} +func (p *ExecuteStreamingResponse) SetData(val *ExecuteStreamingData) { + p.Data = val +} +func (p *ExecuteStreamingResponse) SetBaseResp(val *base.BaseResp) { + p.BaseResp = val } -var fieldIDToName_PromptTemplate = map[int16]string{ - 1: "template_type", - 2: "messages", - 3: "variable_defs", +var fieldIDToName_ExecuteStreamingResponse = map[int16]string{ + 1: "id", + 2: "event", + 3: "retry", + 4: "data", + 255: "BaseResp", } -func (p *PromptTemplate) IsSetTemplateType() bool { - return p.TemplateType != nil +func (p *ExecuteStreamingResponse) IsSetID() bool { + return p.ID != nil } -func (p *PromptTemplate) IsSetMessages() bool { - return p.Messages != nil +func (p *ExecuteStreamingResponse) IsSetEvent() bool { + return p.Event != nil } -func (p *PromptTemplate) IsSetVariableDefs() bool { - return p.VariableDefs != nil +func (p *ExecuteStreamingResponse) IsSetRetry() bool { + return p.Retry != nil } -func (p *PromptTemplate) Read(iprot thrift.TProtocol) (err error) { +func (p *ExecuteStreamingResponse) IsSetData() bool { + return p.Data != nil +} + +func (p *ExecuteStreamingResponse) IsSetBaseResp() bool { + return p.BaseResp != nil +} + +func (p *ExecuteStreamingResponse) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -2348,7 +2398,7 @@ func (p *PromptTemplate) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 2: - if fieldTypeId == thrift.LIST { + if fieldTypeId == thrift.STRING { if err = p.ReadField2(iprot); err != nil { goto ReadFieldError } @@ -2356,13 +2406,29 @@ func (p *PromptTemplate) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 3: - if fieldTypeId == thrift.LIST { + if fieldTypeId == thrift.I64 { if err = p.ReadField3(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } + case 4: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 255: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField255(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -2382,7 +2448,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptTemplate[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteStreamingResponse[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -2392,67 +2458,59 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *PromptTemplate) ReadField1(iprot thrift.TProtocol) error { +func (p *ExecuteStreamingResponse) ReadField1(iprot thrift.TProtocol) error { - var _field *TemplateType + var _field *string if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.TemplateType = _field + p.ID = _field return nil } -func (p *PromptTemplate) ReadField2(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { +func (p *ExecuteStreamingResponse) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { return err + } else { + _field = &v } - _field := make([]*Message, 0, size) - values := make([]Message, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - - if err := _elem.Read(iprot); err != nil { - return err - } + p.Event = _field + return nil +} +func (p *ExecuteStreamingResponse) ReadField3(iprot thrift.TProtocol) error { - _field = append(_field, _elem) - } - if err := iprot.ReadListEnd(); err != nil { + var _field *int64 + if v, err := iprot.ReadI64(); err != nil { return err + } else { + _field = &v } - p.Messages = _field + p.Retry = _field return nil } -func (p *PromptTemplate) ReadField3(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { +func (p *ExecuteStreamingResponse) ReadField4(iprot thrift.TProtocol) error { + _field := NewExecuteStreamingData() + if err := _field.Read(iprot); err != nil { return err } - _field := make([]*VariableDef, 0, size) - values := make([]VariableDef, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - - if err := _elem.Read(iprot); err != nil { - return err - } - - _field = append(_field, _elem) - } - if err := iprot.ReadListEnd(); err != nil { + p.Data = _field + return nil +} +func (p *ExecuteStreamingResponse) ReadField255(iprot thrift.TProtocol) error { + _field := base.NewBaseResp() + if err := _field.Read(iprot); err != nil { return err } - p.VariableDefs = _field + p.BaseResp = _field return nil } -func (p *PromptTemplate) Write(oprot thrift.TProtocol) (err error) { +func (p *ExecuteStreamingResponse) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("PromptTemplate"); err != nil { + if err = oprot.WriteStructBegin("ExecuteStreamingResponse"); err != nil { goto WriteStructBeginError } if p != nil { @@ -2468,6 +2526,14 @@ func (p *PromptTemplate) Write(oprot thrift.TProtocol) (err error) { fieldId = 3 goto WriteFieldError } + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + if err = p.writeField255(oprot); err != nil { + fieldId = 255 + goto WriteFieldError + } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -2486,12 +2552,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *PromptTemplate) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetTemplateType() { - if err = oprot.WriteFieldBegin("template_type", thrift.STRING, 1); err != nil { +func (p *ExecuteStreamingResponse) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetID() { + if err = oprot.WriteFieldBegin("id", thrift.STRING, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.TemplateType); err != nil { + if err := oprot.WriteString(*p.ID); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2504,20 +2570,30 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *PromptTemplate) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetMessages() { - if err = oprot.WriteFieldBegin("messages", thrift.LIST, 2); err != nil { +func (p *ExecuteStreamingResponse) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetEvent() { + if err = oprot.WriteFieldBegin("event", thrift.STRING, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Messages)); err != nil { + if err := oprot.WriteString(*p.Event); err != nil { return err } - for _, v := range p.Messages { - if err := v.Write(oprot); err != nil { - return err - } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError } - if err := oprot.WriteListEnd(); err != nil { + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *ExecuteStreamingResponse) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetRetry() { + if err = oprot.WriteFieldBegin("retry", thrift.I64, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI64(*p.Retry); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2526,24 +2602,34 @@ func (p *PromptTemplate) writeField2(oprot thrift.TProtocol) (err error) { } return nil WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) } -func (p *PromptTemplate) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetVariableDefs() { - if err = oprot.WriteFieldBegin("variable_defs", thrift.LIST, 3); err != nil { +func (p *ExecuteStreamingResponse) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetData() { + if err = oprot.WriteFieldBegin("data", thrift.STRUCT, 4); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.VariableDefs)); err != nil { + if err := p.Data.Write(oprot); err != nil { return err } - for _, v := range p.VariableDefs { - if err := v.Write(oprot); err != nil { - return err - } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError } - if err := oprot.WriteListEnd(); err != nil { + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} +func (p *ExecuteStreamingResponse) writeField255(oprot thrift.TProtocol) (err error) { + if p.IsSetBaseResp() { + if err = oprot.WriteFieldBegin("BaseResp", thrift.STRUCT, 255); err != nil { + goto WriteFieldBeginError + } + if err := p.BaseResp.Write(oprot); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2552,111 +2638,213 @@ func (p *PromptTemplate) writeField3(oprot thrift.TProtocol) (err error) { } return nil WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 255 begin error: ", p), err) WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 255 end error: ", p), err) } -func (p *PromptTemplate) String() string { +func (p *ExecuteStreamingResponse) String() string { if p == nil { return "" } - return fmt.Sprintf("PromptTemplate(%+v)", *p) + return fmt.Sprintf("ExecuteStreamingResponse(%+v)", *p) } -func (p *PromptTemplate) DeepEqual(ano *PromptTemplate) bool { +func (p *ExecuteStreamingResponse) DeepEqual(ano *ExecuteStreamingResponse) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.TemplateType) { + if !p.Field1DeepEqual(ano.ID) { return false } - if !p.Field2DeepEqual(ano.Messages) { + if !p.Field2DeepEqual(ano.Event) { return false } - if !p.Field3DeepEqual(ano.VariableDefs) { + if !p.Field3DeepEqual(ano.Retry) { + return false + } + if !p.Field4DeepEqual(ano.Data) { + return false + } + if !p.Field255DeepEqual(ano.BaseResp) { return false } return true } -func (p *PromptTemplate) Field1DeepEqual(src *TemplateType) bool { +func (p *ExecuteStreamingResponse) Field1DeepEqual(src *string) bool { - if p.TemplateType == src { + if p.ID == src { return true - } else if p.TemplateType == nil || src == nil { + } else if p.ID == nil || src == nil { return false } - if strings.Compare(*p.TemplateType, *src) != 0 { + if strings.Compare(*p.ID, *src) != 0 { return false } return true } -func (p *PromptTemplate) Field2DeepEqual(src []*Message) bool { +func (p *ExecuteStreamingResponse) Field2DeepEqual(src *string) bool { - if len(p.Messages) != len(src) { + if p.Event == src { + return true + } else if p.Event == nil || src == nil { return false } - for i, v := range p.Messages { - _src := src[i] - if !v.DeepEqual(_src) { - return false - } + if strings.Compare(*p.Event, *src) != 0 { + return false } return true } -func (p *PromptTemplate) Field3DeepEqual(src []*VariableDef) bool { +func (p *ExecuteStreamingResponse) Field3DeepEqual(src *int64) bool { - if len(p.VariableDefs) != len(src) { + if p.Retry == src { + return true + } else if p.Retry == nil || src == nil { return false } - for i, v := range p.VariableDefs { - _src := src[i] - if !v.DeepEqual(_src) { - return false - } + if *p.Retry != *src { + return false } return true } +func (p *ExecuteStreamingResponse) Field4DeepEqual(src *ExecuteStreamingData) bool { -type ToolCallConfig struct { - ToolChoice *ToolChoiceType `thrift:"tool_choice,1,optional" frugal:"1,optional,string" form:"tool_choice" json:"tool_choice,omitempty" query:"tool_choice"` + if !p.Data.DeepEqual(src) { + return false + } + return true } +func (p *ExecuteStreamingResponse) Field255DeepEqual(src *base.BaseResp) bool { -func NewToolCallConfig() *ToolCallConfig { - return &ToolCallConfig{} + if !p.BaseResp.DeepEqual(src) { + return false + } + return true } -func (p *ToolCallConfig) InitDefault() { +type ExecuteStreamingData struct { + Code *int32 `thrift:"code,1,optional" frugal:"1,optional,i32" form:"code" json:"code,omitempty" query:"code"` + Msg *string `thrift:"msg,2,optional" frugal:"2,optional,string" form:"msg" json:"msg,omitempty" query:"msg"` + Message *Message `thrift:"message,3,optional" frugal:"3,optional,Message" form:"message" json:"message,omitempty" query:"message"` + FinishReason *string `thrift:"finish_reason,4,optional" frugal:"4,optional,string" form:"finish_reason" json:"finish_reason,omitempty" query:"finish_reason"` + Usage *TokenUsage `thrift:"usage,5,optional" frugal:"5,optional,TokenUsage" form:"usage" json:"usage,omitempty" query:"usage"` } -var ToolCallConfig_ToolChoice_DEFAULT ToolChoiceType +func NewExecuteStreamingData() *ExecuteStreamingData { + return &ExecuteStreamingData{} +} -func (p *ToolCallConfig) GetToolChoice() (v ToolChoiceType) { +func (p *ExecuteStreamingData) InitDefault() { +} + +var ExecuteStreamingData_Code_DEFAULT int32 + +func (p *ExecuteStreamingData) GetCode() (v int32) { if p == nil { return } - if !p.IsSetToolChoice() { - return ToolCallConfig_ToolChoice_DEFAULT + if !p.IsSetCode() { + return ExecuteStreamingData_Code_DEFAULT } - return *p.ToolChoice + return *p.Code } -func (p *ToolCallConfig) SetToolChoice(val *ToolChoiceType) { - p.ToolChoice = val + +var ExecuteStreamingData_Msg_DEFAULT string + +func (p *ExecuteStreamingData) GetMsg() (v string) { + if p == nil { + return + } + if !p.IsSetMsg() { + return ExecuteStreamingData_Msg_DEFAULT + } + return *p.Msg } -var fieldIDToName_ToolCallConfig = map[int16]string{ - 1: "tool_choice", +var ExecuteStreamingData_Message_DEFAULT *Message + +func (p *ExecuteStreamingData) GetMessage() (v *Message) { + if p == nil { + return + } + if !p.IsSetMessage() { + return ExecuteStreamingData_Message_DEFAULT + } + return p.Message } -func (p *ToolCallConfig) IsSetToolChoice() bool { - return p.ToolChoice != nil +var ExecuteStreamingData_FinishReason_DEFAULT string + +func (p *ExecuteStreamingData) GetFinishReason() (v string) { + if p == nil { + return + } + if !p.IsSetFinishReason() { + return ExecuteStreamingData_FinishReason_DEFAULT + } + return *p.FinishReason } -func (p *ToolCallConfig) Read(iprot thrift.TProtocol) (err error) { +var ExecuteStreamingData_Usage_DEFAULT *TokenUsage + +func (p *ExecuteStreamingData) GetUsage() (v *TokenUsage) { + if p == nil { + return + } + if !p.IsSetUsage() { + return ExecuteStreamingData_Usage_DEFAULT + } + return p.Usage +} +func (p *ExecuteStreamingData) SetCode(val *int32) { + p.Code = val +} +func (p *ExecuteStreamingData) SetMsg(val *string) { + p.Msg = val +} +func (p *ExecuteStreamingData) SetMessage(val *Message) { + p.Message = val +} +func (p *ExecuteStreamingData) SetFinishReason(val *string) { + p.FinishReason = val +} +func (p *ExecuteStreamingData) SetUsage(val *TokenUsage) { + p.Usage = val +} + +var fieldIDToName_ExecuteStreamingData = map[int16]string{ + 1: "code", + 2: "msg", + 3: "message", + 4: "finish_reason", + 5: "usage", +} + +func (p *ExecuteStreamingData) IsSetCode() bool { + return p.Code != nil +} + +func (p *ExecuteStreamingData) IsSetMsg() bool { + return p.Msg != nil +} + +func (p *ExecuteStreamingData) IsSetMessage() bool { + return p.Message != nil +} + +func (p *ExecuteStreamingData) IsSetFinishReason() bool { + return p.FinishReason != nil +} + +func (p *ExecuteStreamingData) IsSetUsage() bool { + return p.Usage != nil +} + +func (p *ExecuteStreamingData) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -2675,13 +2863,45 @@ func (p *ToolCallConfig) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.I32 { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 4: + if fieldTypeId == thrift.STRING { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 5: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField5(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -2701,7 +2921,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ToolCallConfig[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteStreamingData[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -2711,28 +2931,82 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *ToolCallConfig) ReadField1(iprot thrift.TProtocol) error { +func (p *ExecuteStreamingData) ReadField1(iprot thrift.TProtocol) error { - var _field *ToolChoiceType - if v, err := iprot.ReadString(); err != nil { + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { return err } else { _field = &v } - p.ToolChoice = _field + p.Code = _field return nil } +func (p *ExecuteStreamingData) ReadField2(iprot thrift.TProtocol) error { -func (p *ToolCallConfig) Write(oprot thrift.TProtocol) (err error) { - var fieldId int16 - if err = oprot.WriteStructBegin("ToolCallConfig"); err != nil { - goto WriteStructBeginError + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v } - if p != nil { - if err = p.writeField1(oprot); err != nil { - fieldId = 1 - goto WriteFieldError - } + p.Msg = _field + return nil +} +func (p *ExecuteStreamingData) ReadField3(iprot thrift.TProtocol) error { + _field := NewMessage() + if err := _field.Read(iprot); err != nil { + return err + } + p.Message = _field + return nil +} +func (p *ExecuteStreamingData) ReadField4(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.FinishReason = _field + return nil +} +func (p *ExecuteStreamingData) ReadField5(iprot thrift.TProtocol) error { + _field := NewTokenUsage() + if err := _field.Read(iprot); err != nil { + return err + } + p.Usage = _field + return nil +} + +func (p *ExecuteStreamingData) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ExecuteStreamingData"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + if err = p.writeField5(oprot); err != nil { + fieldId = 5 + goto WriteFieldError + } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -2751,12 +3025,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *ToolCallConfig) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetToolChoice() { - if err = oprot.WriteFieldBegin("tool_choice", thrift.STRING, 1); err != nil { +func (p *ExecuteStreamingData) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetCode() { + if err = oprot.WriteFieldBegin("code", thrift.I32, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.ToolChoice); err != nil { + if err := oprot.WriteI32(*p.Code); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -2769,117 +3043,239 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } +func (p *ExecuteStreamingData) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetMsg() { + if err = oprot.WriteFieldBegin("msg", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Msg); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *ExecuteStreamingData) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetMessage() { + if err = oprot.WriteFieldBegin("message", thrift.STRUCT, 3); err != nil { + goto WriteFieldBeginError + } + if err := p.Message.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} +func (p *ExecuteStreamingData) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetFinishReason() { + if err = oprot.WriteFieldBegin("finish_reason", thrift.STRING, 4); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.FinishReason); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} +func (p *ExecuteStreamingData) writeField5(oprot thrift.TProtocol) (err error) { + if p.IsSetUsage() { + if err = oprot.WriteFieldBegin("usage", thrift.STRUCT, 5); err != nil { + goto WriteFieldBeginError + } + if err := p.Usage.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 5 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 5 end error: ", p), err) +} -func (p *ToolCallConfig) String() string { +func (p *ExecuteStreamingData) String() string { if p == nil { return "" } - return fmt.Sprintf("ToolCallConfig(%+v)", *p) + return fmt.Sprintf("ExecuteStreamingData(%+v)", *p) } -func (p *ToolCallConfig) DeepEqual(ano *ToolCallConfig) bool { +func (p *ExecuteStreamingData) DeepEqual(ano *ExecuteStreamingData) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.ToolChoice) { + if !p.Field1DeepEqual(ano.Code) { + return false + } + if !p.Field2DeepEqual(ano.Msg) { + return false + } + if !p.Field3DeepEqual(ano.Message) { + return false + } + if !p.Field4DeepEqual(ano.FinishReason) { + return false + } + if !p.Field5DeepEqual(ano.Usage) { return false } return true } -func (p *ToolCallConfig) Field1DeepEqual(src *ToolChoiceType) bool { +func (p *ExecuteStreamingData) Field1DeepEqual(src *int32) bool { - if p.ToolChoice == src { + if p.Code == src { return true - } else if p.ToolChoice == nil || src == nil { + } else if p.Code == nil || src == nil { return false } - if strings.Compare(*p.ToolChoice, *src) != 0 { + if *p.Code != *src { return false } return true } +func (p *ExecuteStreamingData) Field2DeepEqual(src *string) bool { -type Message struct { - Role *Role `thrift:"role,1,optional" frugal:"1,optional,string" form:"role" json:"role,omitempty" query:"role"` - Content *string `thrift:"content,2,optional" frugal:"2,optional,string" form:"content" json:"content,omitempty" query:"content"` - Parts []*ContentPart `thrift:"parts,3,optional" frugal:"3,optional,list" form:"parts" json:"parts,omitempty" query:"parts"` + if p.Msg == src { + return true + } else if p.Msg == nil || src == nil { + return false + } + if strings.Compare(*p.Msg, *src) != 0 { + return false + } + return true } +func (p *ExecuteStreamingData) Field3DeepEqual(src *Message) bool { -func NewMessage() *Message { - return &Message{} + if !p.Message.DeepEqual(src) { + return false + } + return true } +func (p *ExecuteStreamingData) Field4DeepEqual(src *string) bool { -func (p *Message) InitDefault() { + if p.FinishReason == src { + return true + } else if p.FinishReason == nil || src == nil { + return false + } + if strings.Compare(*p.FinishReason, *src) != 0 { + return false + } + return true } +func (p *ExecuteStreamingData) Field5DeepEqual(src *TokenUsage) bool { -var Message_Role_DEFAULT Role + if !p.Usage.DeepEqual(src) { + return false + } + return true +} -func (p *Message) GetRole() (v Role) { +type PromptQuery struct { + PromptKey *string `thrift:"prompt_key,1,optional" frugal:"1,optional,string" form:"prompt_key" json:"prompt_key,omitempty" query:"prompt_key"` + Version *string `thrift:"version,2,optional" frugal:"2,optional,string" form:"version" json:"version,omitempty" query:"version"` + Label *string `thrift:"label,3,optional" frugal:"3,optional,string" form:"label" json:"label,omitempty" query:"label"` +} + +func NewPromptQuery() *PromptQuery { + return &PromptQuery{} +} + +func (p *PromptQuery) InitDefault() { +} + +var PromptQuery_PromptKey_DEFAULT string + +func (p *PromptQuery) GetPromptKey() (v string) { if p == nil { return } - if !p.IsSetRole() { - return Message_Role_DEFAULT + if !p.IsSetPromptKey() { + return PromptQuery_PromptKey_DEFAULT } - return *p.Role + return *p.PromptKey } -var Message_Content_DEFAULT string +var PromptQuery_Version_DEFAULT string -func (p *Message) GetContent() (v string) { +func (p *PromptQuery) GetVersion() (v string) { if p == nil { return } - if !p.IsSetContent() { - return Message_Content_DEFAULT + if !p.IsSetVersion() { + return PromptQuery_Version_DEFAULT } - return *p.Content + return *p.Version } -var Message_Parts_DEFAULT []*ContentPart +var PromptQuery_Label_DEFAULT string -func (p *Message) GetParts() (v []*ContentPart) { +func (p *PromptQuery) GetLabel() (v string) { if p == nil { return } - if !p.IsSetParts() { - return Message_Parts_DEFAULT + if !p.IsSetLabel() { + return PromptQuery_Label_DEFAULT } - return p.Parts + return *p.Label } -func (p *Message) SetRole(val *Role) { - p.Role = val +func (p *PromptQuery) SetPromptKey(val *string) { + p.PromptKey = val } -func (p *Message) SetContent(val *string) { - p.Content = val +func (p *PromptQuery) SetVersion(val *string) { + p.Version = val } -func (p *Message) SetParts(val []*ContentPart) { - p.Parts = val +func (p *PromptQuery) SetLabel(val *string) { + p.Label = val } -var fieldIDToName_Message = map[int16]string{ - 1: "role", - 2: "content", - 3: "parts", +var fieldIDToName_PromptQuery = map[int16]string{ + 1: "prompt_key", + 2: "version", + 3: "label", } -func (p *Message) IsSetRole() bool { - return p.Role != nil +func (p *PromptQuery) IsSetPromptKey() bool { + return p.PromptKey != nil } -func (p *Message) IsSetContent() bool { - return p.Content != nil +func (p *PromptQuery) IsSetVersion() bool { + return p.Version != nil } -func (p *Message) IsSetParts() bool { - return p.Parts != nil +func (p *PromptQuery) IsSetLabel() bool { + return p.Label != nil } -func (p *Message) Read(iprot thrift.TProtocol) (err error) { +func (p *PromptQuery) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -2914,7 +3310,7 @@ func (p *Message) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 3: - if fieldTypeId == thrift.LIST { + if fieldTypeId == thrift.STRING { if err = p.ReadField3(iprot); err != nil { goto ReadFieldError } @@ -2940,7 +3336,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Message[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptQuery[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -2950,18 +3346,18 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *Message) ReadField1(iprot thrift.TProtocol) error { +func (p *PromptQuery) ReadField1(iprot thrift.TProtocol) error { - var _field *Role + var _field *string if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.Role = _field + p.PromptKey = _field return nil } -func (p *Message) ReadField2(iprot thrift.TProtocol) error { +func (p *PromptQuery) ReadField2(iprot thrift.TProtocol) error { var _field *string if v, err := iprot.ReadString(); err != nil { @@ -2969,36 +3365,24 @@ func (p *Message) ReadField2(iprot thrift.TProtocol) error { } else { _field = &v } - p.Content = _field + p.Version = _field return nil } -func (p *Message) ReadField3(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { +func (p *PromptQuery) ReadField3(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { return err + } else { + _field = &v } - _field := make([]*ContentPart, 0, size) - values := make([]ContentPart, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - - if err := _elem.Read(iprot); err != nil { - return err - } - - _field = append(_field, _elem) - } - if err := iprot.ReadListEnd(); err != nil { - return err - } - p.Parts = _field + p.Label = _field return nil } -func (p *Message) Write(oprot thrift.TProtocol) (err error) { +func (p *PromptQuery) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("Message"); err != nil { + if err = oprot.WriteStructBegin("PromptQuery"); err != nil { goto WriteStructBeginError } if p != nil { @@ -3032,12 +3416,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *Message) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetRole() { - if err = oprot.WriteFieldBegin("role", thrift.STRING, 1); err != nil { +func (p *PromptQuery) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetPromptKey() { + if err = oprot.WriteFieldBegin("prompt_key", thrift.STRING, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Role); err != nil { + if err := oprot.WriteString(*p.PromptKey); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3050,12 +3434,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *Message) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetContent() { - if err = oprot.WriteFieldBegin("content", thrift.STRING, 2); err != nil { +func (p *PromptQuery) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetVersion() { + if err = oprot.WriteFieldBegin("version", thrift.STRING, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Content); err != nil { + if err := oprot.WriteString(*p.Version); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3068,20 +3452,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } -func (p *Message) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetParts() { - if err = oprot.WriteFieldBegin("parts", thrift.LIST, 3); err != nil { +func (p *PromptQuery) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetLabel() { + if err = oprot.WriteFieldBegin("label", thrift.STRING, 3); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Parts)); err != nil { - return err - } - for _, v := range p.Parts { - if err := v.Write(oprot); err != nil { - return err - } - } - if err := oprot.WriteListEnd(); err != nil { + if err := oprot.WriteString(*p.Label); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3095,126 +3471,125 @@ WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) } -func (p *Message) String() string { +func (p *PromptQuery) String() string { if p == nil { return "" } - return fmt.Sprintf("Message(%+v)", *p) + return fmt.Sprintf("PromptQuery(%+v)", *p) } -func (p *Message) DeepEqual(ano *Message) bool { +func (p *PromptQuery) DeepEqual(ano *PromptQuery) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Role) { + if !p.Field1DeepEqual(ano.PromptKey) { return false } - if !p.Field2DeepEqual(ano.Content) { + if !p.Field2DeepEqual(ano.Version) { return false } - if !p.Field3DeepEqual(ano.Parts) { + if !p.Field3DeepEqual(ano.Label) { return false } return true } -func (p *Message) Field1DeepEqual(src *Role) bool { +func (p *PromptQuery) Field1DeepEqual(src *string) bool { - if p.Role == src { + if p.PromptKey == src { return true - } else if p.Role == nil || src == nil { + } else if p.PromptKey == nil || src == nil { return false } - if strings.Compare(*p.Role, *src) != 0 { + if strings.Compare(*p.PromptKey, *src) != 0 { return false } return true } -func (p *Message) Field2DeepEqual(src *string) bool { +func (p *PromptQuery) Field2DeepEqual(src *string) bool { - if p.Content == src { + if p.Version == src { return true - } else if p.Content == nil || src == nil { + } else if p.Version == nil || src == nil { return false } - if strings.Compare(*p.Content, *src) != 0 { + if strings.Compare(*p.Version, *src) != 0 { return false } return true } -func (p *Message) Field3DeepEqual(src []*ContentPart) bool { +func (p *PromptQuery) Field3DeepEqual(src *string) bool { - if len(p.Parts) != len(src) { + if p.Label == src { + return true + } else if p.Label == nil || src == nil { return false } - for i, v := range p.Parts { - _src := src[i] - if !v.DeepEqual(_src) { - return false - } + if strings.Compare(*p.Label, *src) != 0 { + return false } return true } -type ContentPart struct { - Type *ContentType `thrift:"type,1,optional" frugal:"1,optional,string" form:"type" json:"type,omitempty" query:"type"` - Text *string `thrift:"text,2,optional" frugal:"2,optional,string" form:"text" json:"text,omitempty" query:"text"` +type PromptResult_ struct { + Query *PromptQuery `thrift:"query,1,optional" frugal:"1,optional,PromptQuery" form:"query" json:"query,omitempty" query:"query"` + Prompt *Prompt `thrift:"prompt,2,optional" frugal:"2,optional,Prompt" form:"prompt" json:"prompt,omitempty" query:"prompt"` } -func NewContentPart() *ContentPart { - return &ContentPart{} +func NewPromptResult_() *PromptResult_ { + return &PromptResult_{} } -func (p *ContentPart) InitDefault() { +func (p *PromptResult_) InitDefault() { } -var ContentPart_Type_DEFAULT ContentType +var PromptResult__Query_DEFAULT *PromptQuery -func (p *ContentPart) GetType() (v ContentType) { +func (p *PromptResult_) GetQuery() (v *PromptQuery) { if p == nil { return } - if !p.IsSetType() { - return ContentPart_Type_DEFAULT + if !p.IsSetQuery() { + return PromptResult__Query_DEFAULT } - return *p.Type + return p.Query } -var ContentPart_Text_DEFAULT string +var PromptResult__Prompt_DEFAULT *Prompt -func (p *ContentPart) GetText() (v string) { +func (p *PromptResult_) GetPrompt() (v *Prompt) { if p == nil { return } - if !p.IsSetText() { - return ContentPart_Text_DEFAULT + if !p.IsSetPrompt() { + return PromptResult__Prompt_DEFAULT } - return *p.Text + return p.Prompt } -func (p *ContentPart) SetType(val *ContentType) { - p.Type = val +func (p *PromptResult_) SetQuery(val *PromptQuery) { + p.Query = val } -func (p *ContentPart) SetText(val *string) { - p.Text = val +func (p *PromptResult_) SetPrompt(val *Prompt) { + p.Prompt = val } -var fieldIDToName_ContentPart = map[int16]string{ - 1: "type", - 2: "text", +var fieldIDToName_PromptResult_ = map[int16]string{ + 1: "query", + 2: "prompt", } -func (p *ContentPart) IsSetType() bool { - return p.Type != nil +func (p *PromptResult_) IsSetQuery() bool { + return p.Query != nil } -func (p *ContentPart) IsSetText() bool { - return p.Text != nil +func (p *PromptResult_) IsSetPrompt() bool { + return p.Prompt != nil } -func (p *ContentPart) Read(iprot thrift.TProtocol) (err error) { +func (p *PromptResult_) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -3233,7 +3608,7 @@ func (p *ContentPart) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.STRUCT { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } @@ -3241,7 +3616,7 @@ func (p *ContentPart) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 2: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.STRUCT { if err = p.ReadField2(iprot); err != nil { goto ReadFieldError } @@ -3267,7 +3642,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ContentPart[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptResult_[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -3277,32 +3652,26 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *ContentPart) ReadField1(iprot thrift.TProtocol) error { - - var _field *ContentType - if v, err := iprot.ReadString(); err != nil { +func (p *PromptResult_) ReadField1(iprot thrift.TProtocol) error { + _field := NewPromptQuery() + if err := _field.Read(iprot); err != nil { return err - } else { - _field = &v } - p.Type = _field + p.Query = _field return nil } -func (p *ContentPart) ReadField2(iprot thrift.TProtocol) error { - - var _field *string - if v, err := iprot.ReadString(); err != nil { +func (p *PromptResult_) ReadField2(iprot thrift.TProtocol) error { + _field := NewPrompt() + if err := _field.Read(iprot); err != nil { return err - } else { - _field = &v } - p.Text = _field + p.Prompt = _field return nil } -func (p *ContentPart) Write(oprot thrift.TProtocol) (err error) { +func (p *PromptResult_) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("ContentPart"); err != nil { + if err = oprot.WriteStructBegin("PromptResult"); err != nil { goto WriteStructBeginError } if p != nil { @@ -3332,12 +3701,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *ContentPart) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetType() { - if err = oprot.WriteFieldBegin("type", thrift.STRING, 1); err != nil { +func (p *PromptResult_) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetQuery() { + if err = oprot.WriteFieldBegin("query", thrift.STRUCT, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Type); err != nil { + if err := p.Query.Write(oprot); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3350,12 +3719,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *ContentPart) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetText() { - if err = oprot.WriteFieldBegin("text", thrift.STRING, 2); err != nil { +func (p *PromptResult_) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetPrompt() { + if err = oprot.WriteFieldBegin("prompt", thrift.STRUCT, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Text); err != nil { + if err := p.Prompt.Write(oprot); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3369,134 +3738,212 @@ WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } -func (p *ContentPart) String() string { +func (p *PromptResult_) String() string { if p == nil { return "" } - return fmt.Sprintf("ContentPart(%+v)", *p) + return fmt.Sprintf("PromptResult_(%+v)", *p) } -func (p *ContentPart) DeepEqual(ano *ContentPart) bool { +func (p *PromptResult_) DeepEqual(ano *PromptResult_) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Type) { + if !p.Field1DeepEqual(ano.Query) { return false } - if !p.Field2DeepEqual(ano.Text) { + if !p.Field2DeepEqual(ano.Prompt) { return false } return true } -func (p *ContentPart) Field1DeepEqual(src *ContentType) bool { +func (p *PromptResult_) Field1DeepEqual(src *PromptQuery) bool { - if p.Type == src { - return true - } else if p.Type == nil || src == nil { - return false - } - if strings.Compare(*p.Type, *src) != 0 { + if !p.Query.DeepEqual(src) { return false } return true } -func (p *ContentPart) Field2DeepEqual(src *string) bool { +func (p *PromptResult_) Field2DeepEqual(src *Prompt) bool { - if p.Text == src { - return true - } else if p.Text == nil || src == nil { - return false - } - if strings.Compare(*p.Text, *src) != 0 { + if !p.Prompt.DeepEqual(src) { return false } return true } -type VariableDef struct { - // 变量名字 - Key *string `thrift:"key,1,optional" frugal:"1,optional,string" form:"key" json:"key,omitempty" query:"key"` - // 变量描述 - Desc *string `thrift:"desc,2,optional" frugal:"2,optional,string" form:"desc" json:"desc,omitempty" query:"desc"` - // 变量类型 - Type *VariableType `thrift:"type,3,optional" frugal:"3,optional,string" form:"type" json:"type,omitempty" query:"type"` +type Prompt struct { + // 空间ID + WorkspaceID *int64 `thrift:"workspace_id,1,optional" frugal:"1,optional,i64" json:"workspace_id" form:"workspace_id" query:"workspace_id"` + // 唯一标识 + PromptKey *string `thrift:"prompt_key,2,optional" frugal:"2,optional,string" form:"prompt_key" json:"prompt_key,omitempty" query:"prompt_key"` + // 版本 + Version *string `thrift:"version,3,optional" frugal:"3,optional,string" form:"version" json:"version,omitempty" query:"version"` + // Prompt模板 + PromptTemplate *PromptTemplate `thrift:"prompt_template,4,optional" frugal:"4,optional,PromptTemplate" form:"prompt_template" json:"prompt_template,omitempty" query:"prompt_template"` + // tool定义 + Tools []*Tool `thrift:"tools,5,optional" frugal:"5,optional,list" form:"tools" json:"tools,omitempty" query:"tools"` + // tool调用配置 + ToolCallConfig *ToolCallConfig `thrift:"tool_call_config,6,optional" frugal:"6,optional,ToolCallConfig" form:"tool_call_config" json:"tool_call_config,omitempty" query:"tool_call_config"` + // 模型配置 + LlmConfig *LLMConfig `thrift:"llm_config,7,optional" frugal:"7,optional,LLMConfig" form:"llm_config" json:"llm_config,omitempty" query:"llm_config"` } -func NewVariableDef() *VariableDef { - return &VariableDef{} +func NewPrompt() *Prompt { + return &Prompt{} } -func (p *VariableDef) InitDefault() { +func (p *Prompt) InitDefault() { } -var VariableDef_Key_DEFAULT string +var Prompt_WorkspaceID_DEFAULT int64 -func (p *VariableDef) GetKey() (v string) { +func (p *Prompt) GetWorkspaceID() (v int64) { if p == nil { return } - if !p.IsSetKey() { - return VariableDef_Key_DEFAULT + if !p.IsSetWorkspaceID() { + return Prompt_WorkspaceID_DEFAULT } - return *p.Key + return *p.WorkspaceID } -var VariableDef_Desc_DEFAULT string +var Prompt_PromptKey_DEFAULT string -func (p *VariableDef) GetDesc() (v string) { +func (p *Prompt) GetPromptKey() (v string) { if p == nil { return } - if !p.IsSetDesc() { - return VariableDef_Desc_DEFAULT + if !p.IsSetPromptKey() { + return Prompt_PromptKey_DEFAULT } - return *p.Desc + return *p.PromptKey } -var VariableDef_Type_DEFAULT VariableType +var Prompt_Version_DEFAULT string -func (p *VariableDef) GetType() (v VariableType) { +func (p *Prompt) GetVersion() (v string) { if p == nil { return } - if !p.IsSetType() { - return VariableDef_Type_DEFAULT + if !p.IsSetVersion() { + return Prompt_Version_DEFAULT } - return *p.Type + return *p.Version } -func (p *VariableDef) SetKey(val *string) { - p.Key = val + +var Prompt_PromptTemplate_DEFAULT *PromptTemplate + +func (p *Prompt) GetPromptTemplate() (v *PromptTemplate) { + if p == nil { + return + } + if !p.IsSetPromptTemplate() { + return Prompt_PromptTemplate_DEFAULT + } + return p.PromptTemplate } -func (p *VariableDef) SetDesc(val *string) { - p.Desc = val + +var Prompt_Tools_DEFAULT []*Tool + +func (p *Prompt) GetTools() (v []*Tool) { + if p == nil { + return + } + if !p.IsSetTools() { + return Prompt_Tools_DEFAULT + } + return p.Tools } -func (p *VariableDef) SetType(val *VariableType) { - p.Type = val + +var Prompt_ToolCallConfig_DEFAULT *ToolCallConfig + +func (p *Prompt) GetToolCallConfig() (v *ToolCallConfig) { + if p == nil { + return + } + if !p.IsSetToolCallConfig() { + return Prompt_ToolCallConfig_DEFAULT + } + return p.ToolCallConfig } -var fieldIDToName_VariableDef = map[int16]string{ - 1: "key", - 2: "desc", - 3: "type", +var Prompt_LlmConfig_DEFAULT *LLMConfig + +func (p *Prompt) GetLlmConfig() (v *LLMConfig) { + if p == nil { + return + } + if !p.IsSetLlmConfig() { + return Prompt_LlmConfig_DEFAULT + } + return p.LlmConfig +} +func (p *Prompt) SetWorkspaceID(val *int64) { + p.WorkspaceID = val +} +func (p *Prompt) SetPromptKey(val *string) { + p.PromptKey = val +} +func (p *Prompt) SetVersion(val *string) { + p.Version = val +} +func (p *Prompt) SetPromptTemplate(val *PromptTemplate) { + p.PromptTemplate = val +} +func (p *Prompt) SetTools(val []*Tool) { + p.Tools = val +} +func (p *Prompt) SetToolCallConfig(val *ToolCallConfig) { + p.ToolCallConfig = val +} +func (p *Prompt) SetLlmConfig(val *LLMConfig) { + p.LlmConfig = val } -func (p *VariableDef) IsSetKey() bool { - return p.Key != nil +var fieldIDToName_Prompt = map[int16]string{ + 1: "workspace_id", + 2: "prompt_key", + 3: "version", + 4: "prompt_template", + 5: "tools", + 6: "tool_call_config", + 7: "llm_config", } -func (p *VariableDef) IsSetDesc() bool { - return p.Desc != nil +func (p *Prompt) IsSetWorkspaceID() bool { + return p.WorkspaceID != nil } -func (p *VariableDef) IsSetType() bool { - return p.Type != nil +func (p *Prompt) IsSetPromptKey() bool { + return p.PromptKey != nil } -func (p *VariableDef) Read(iprot thrift.TProtocol) (err error) { +func (p *Prompt) IsSetVersion() bool { + return p.Version != nil +} + +func (p *Prompt) IsSetPromptTemplate() bool { + return p.PromptTemplate != nil +} + +func (p *Prompt) IsSetTools() bool { + return p.Tools != nil +} + +func (p *Prompt) IsSetToolCallConfig() bool { + return p.ToolCallConfig != nil +} + +func (p *Prompt) IsSetLlmConfig() bool { + return p.LlmConfig != nil +} + +func (p *Prompt) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -3515,7 +3962,7 @@ func (p *VariableDef) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.I64 { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } @@ -3538,6 +3985,38 @@ func (p *VariableDef) Read(iprot thrift.TProtocol) (err error) { } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } + case 4: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 5: + if fieldTypeId == thrift.LIST { + if err = p.ReadField5(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 6: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField6(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 7: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField7(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -3557,7 +4036,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_VariableDef[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Prompt[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -3567,18 +4046,18 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *VariableDef) ReadField1(iprot thrift.TProtocol) error { +func (p *Prompt) ReadField1(iprot thrift.TProtocol) error { - var _field *string - if v, err := iprot.ReadString(); err != nil { + var _field *int64 + if v, err := iprot.ReadI64(); err != nil { return err } else { _field = &v } - p.Key = _field + p.WorkspaceID = _field return nil } -func (p *VariableDef) ReadField2(iprot thrift.TProtocol) error { +func (p *Prompt) ReadField2(iprot thrift.TProtocol) error { var _field *string if v, err := iprot.ReadString(); err != nil { @@ -3586,24 +4065,71 @@ func (p *VariableDef) ReadField2(iprot thrift.TProtocol) error { } else { _field = &v } - p.Desc = _field + p.PromptKey = _field return nil } -func (p *VariableDef) ReadField3(iprot thrift.TProtocol) error { +func (p *Prompt) ReadField3(iprot thrift.TProtocol) error { - var _field *VariableType + var _field *string if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.Type = _field + p.Version = _field + return nil +} +func (p *Prompt) ReadField4(iprot thrift.TProtocol) error { + _field := NewPromptTemplate() + if err := _field.Read(iprot); err != nil { + return err + } + p.PromptTemplate = _field return nil } +func (p *Prompt) ReadField5(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*Tool, 0, size) + values := make([]Tool, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() -func (p *VariableDef) Write(oprot thrift.TProtocol) (err error) { + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.Tools = _field + return nil +} +func (p *Prompt) ReadField6(iprot thrift.TProtocol) error { + _field := NewToolCallConfig() + if err := _field.Read(iprot); err != nil { + return err + } + p.ToolCallConfig = _field + return nil +} +func (p *Prompt) ReadField7(iprot thrift.TProtocol) error { + _field := NewLLMConfig() + if err := _field.Read(iprot); err != nil { + return err + } + p.LlmConfig = _field + return nil +} + +func (p *Prompt) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("VariableDef"); err != nil { + if err = oprot.WriteStructBegin("Prompt"); err != nil { goto WriteStructBeginError } if p != nil { @@ -3619,17 +4145,33 @@ func (p *VariableDef) Write(oprot thrift.TProtocol) (err error) { fieldId = 3 goto WriteFieldError } - } - if err = oprot.WriteFieldStop(); err != nil { - goto WriteFieldStopError - } - if err = oprot.WriteStructEnd(); err != nil { - goto WriteStructEndError - } - return nil -WriteStructBeginError: - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) -WriteFieldError: + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + if err = p.writeField5(oprot); err != nil { + fieldId = 5 + goto WriteFieldError + } + if err = p.writeField6(oprot); err != nil { + fieldId = 6 + goto WriteFieldError + } + if err = p.writeField7(oprot); err != nil { + fieldId = 7 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) WriteFieldStopError: return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) @@ -3637,12 +4179,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *VariableDef) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetKey() { - if err = oprot.WriteFieldBegin("key", thrift.STRING, 1); err != nil { +func (p *Prompt) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetWorkspaceID() { + if err = oprot.WriteFieldBegin("workspace_id", thrift.I64, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Key); err != nil { + if err := oprot.WriteI64(*p.WorkspaceID); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3655,12 +4197,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *VariableDef) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetDesc() { - if err = oprot.WriteFieldBegin("desc", thrift.STRING, 2); err != nil { +func (p *Prompt) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetPromptKey() { + if err = oprot.WriteFieldBegin("prompt_key", thrift.STRING, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Desc); err != nil { + if err := oprot.WriteString(*p.PromptKey); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3673,12 +4215,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } -func (p *VariableDef) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetType() { - if err = oprot.WriteFieldBegin("type", thrift.STRING, 3); err != nil { +func (p *Prompt) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetVersion() { + if err = oprot.WriteFieldBegin("version", thrift.STRING, 3); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Type); err != nil { + if err := oprot.WriteString(*p.Version); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3691,126 +4233,276 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) } +func (p *Prompt) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetPromptTemplate() { + if err = oprot.WriteFieldBegin("prompt_template", thrift.STRUCT, 4); err != nil { + goto WriteFieldBeginError + } + if err := p.PromptTemplate.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} +func (p *Prompt) writeField5(oprot thrift.TProtocol) (err error) { + if p.IsSetTools() { + if err = oprot.WriteFieldBegin("tools", thrift.LIST, 5); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Tools)); err != nil { + return err + } + for _, v := range p.Tools { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 5 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 5 end error: ", p), err) +} +func (p *Prompt) writeField6(oprot thrift.TProtocol) (err error) { + if p.IsSetToolCallConfig() { + if err = oprot.WriteFieldBegin("tool_call_config", thrift.STRUCT, 6); err != nil { + goto WriteFieldBeginError + } + if err := p.ToolCallConfig.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 6 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 6 end error: ", p), err) +} +func (p *Prompt) writeField7(oprot thrift.TProtocol) (err error) { + if p.IsSetLlmConfig() { + if err = oprot.WriteFieldBegin("llm_config", thrift.STRUCT, 7); err != nil { + goto WriteFieldBeginError + } + if err := p.LlmConfig.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 7 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 7 end error: ", p), err) +} -func (p *VariableDef) String() string { +func (p *Prompt) String() string { if p == nil { return "" } - return fmt.Sprintf("VariableDef(%+v)", *p) + return fmt.Sprintf("Prompt(%+v)", *p) } -func (p *VariableDef) DeepEqual(ano *VariableDef) bool { +func (p *Prompt) DeepEqual(ano *Prompt) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Key) { + if !p.Field1DeepEqual(ano.WorkspaceID) { return false } - if !p.Field2DeepEqual(ano.Desc) { + if !p.Field2DeepEqual(ano.PromptKey) { return false } - if !p.Field3DeepEqual(ano.Type) { + if !p.Field3DeepEqual(ano.Version) { + return false + } + if !p.Field4DeepEqual(ano.PromptTemplate) { + return false + } + if !p.Field5DeepEqual(ano.Tools) { + return false + } + if !p.Field6DeepEqual(ano.ToolCallConfig) { + return false + } + if !p.Field7DeepEqual(ano.LlmConfig) { return false } return true } -func (p *VariableDef) Field1DeepEqual(src *string) bool { +func (p *Prompt) Field1DeepEqual(src *int64) bool { - if p.Key == src { + if p.WorkspaceID == src { return true - } else if p.Key == nil || src == nil { + } else if p.WorkspaceID == nil || src == nil { return false } - if strings.Compare(*p.Key, *src) != 0 { + if *p.WorkspaceID != *src { return false } return true } -func (p *VariableDef) Field2DeepEqual(src *string) bool { +func (p *Prompt) Field2DeepEqual(src *string) bool { - if p.Desc == src { + if p.PromptKey == src { return true - } else if p.Desc == nil || src == nil { + } else if p.PromptKey == nil || src == nil { return false } - if strings.Compare(*p.Desc, *src) != 0 { + if strings.Compare(*p.PromptKey, *src) != 0 { return false } return true } -func (p *VariableDef) Field3DeepEqual(src *VariableType) bool { +func (p *Prompt) Field3DeepEqual(src *string) bool { - if p.Type == src { + if p.Version == src { return true - } else if p.Type == nil || src == nil { + } else if p.Version == nil || src == nil { return false } - if strings.Compare(*p.Type, *src) != 0 { + if strings.Compare(*p.Version, *src) != 0 { return false } return true } +func (p *Prompt) Field4DeepEqual(src *PromptTemplate) bool { -type Tool struct { - Type *ToolType `thrift:"type,1,optional" frugal:"1,optional,string" form:"type" json:"type,omitempty" query:"type"` - Function *Function `thrift:"function,2,optional" frugal:"2,optional,Function" form:"function" json:"function,omitempty" query:"function"` + if !p.PromptTemplate.DeepEqual(src) { + return false + } + return true } +func (p *Prompt) Field5DeepEqual(src []*Tool) bool { -func NewTool() *Tool { - return &Tool{} + if len(p.Tools) != len(src) { + return false + } + for i, v := range p.Tools { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } + return true } +func (p *Prompt) Field6DeepEqual(src *ToolCallConfig) bool { -func (p *Tool) InitDefault() { + if !p.ToolCallConfig.DeepEqual(src) { + return false + } + return true } +func (p *Prompt) Field7DeepEqual(src *LLMConfig) bool { -var Tool_Type_DEFAULT ToolType + if !p.LlmConfig.DeepEqual(src) { + return false + } + return true +} -func (p *Tool) GetType() (v ToolType) { +type PromptTemplate struct { + // 模板类型 + TemplateType *TemplateType `thrift:"template_type,1,optional" frugal:"1,optional,string" form:"template_type" json:"template_type,omitempty" query:"template_type"` + // 只支持message list形式托管 + Messages []*Message `thrift:"messages,2,optional" frugal:"2,optional,list" form:"messages" json:"messages,omitempty" query:"messages"` + // 变量定义 + VariableDefs []*VariableDef `thrift:"variable_defs,3,optional" frugal:"3,optional,list" form:"variable_defs" json:"variable_defs,omitempty" query:"variable_defs"` +} + +func NewPromptTemplate() *PromptTemplate { + return &PromptTemplate{} +} + +func (p *PromptTemplate) InitDefault() { +} + +var PromptTemplate_TemplateType_DEFAULT TemplateType + +func (p *PromptTemplate) GetTemplateType() (v TemplateType) { if p == nil { return } - if !p.IsSetType() { - return Tool_Type_DEFAULT + if !p.IsSetTemplateType() { + return PromptTemplate_TemplateType_DEFAULT } - return *p.Type + return *p.TemplateType } -var Tool_Function_DEFAULT *Function +var PromptTemplate_Messages_DEFAULT []*Message -func (p *Tool) GetFunction() (v *Function) { +func (p *PromptTemplate) GetMessages() (v []*Message) { if p == nil { return } - if !p.IsSetFunction() { - return Tool_Function_DEFAULT + if !p.IsSetMessages() { + return PromptTemplate_Messages_DEFAULT } - return p.Function -} -func (p *Tool) SetType(val *ToolType) { - p.Type = val -} -func (p *Tool) SetFunction(val *Function) { - p.Function = val + return p.Messages } -var fieldIDToName_Tool = map[int16]string{ - 1: "type", - 2: "function", +var PromptTemplate_VariableDefs_DEFAULT []*VariableDef + +func (p *PromptTemplate) GetVariableDefs() (v []*VariableDef) { + if p == nil { + return + } + if !p.IsSetVariableDefs() { + return PromptTemplate_VariableDefs_DEFAULT + } + return p.VariableDefs +} +func (p *PromptTemplate) SetTemplateType(val *TemplateType) { + p.TemplateType = val +} +func (p *PromptTemplate) SetMessages(val []*Message) { + p.Messages = val +} +func (p *PromptTemplate) SetVariableDefs(val []*VariableDef) { + p.VariableDefs = val } -func (p *Tool) IsSetType() bool { - return p.Type != nil +var fieldIDToName_PromptTemplate = map[int16]string{ + 1: "template_type", + 2: "messages", + 3: "variable_defs", } -func (p *Tool) IsSetFunction() bool { - return p.Function != nil +func (p *PromptTemplate) IsSetTemplateType() bool { + return p.TemplateType != nil } -func (p *Tool) Read(iprot thrift.TProtocol) (err error) { +func (p *PromptTemplate) IsSetMessages() bool { + return p.Messages != nil +} + +func (p *PromptTemplate) IsSetVariableDefs() bool { + return p.VariableDefs != nil +} + +func (p *PromptTemplate) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -3837,13 +4529,21 @@ func (p *Tool) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 2: - if fieldTypeId == thrift.STRUCT { + if fieldTypeId == thrift.LIST { if err = p.ReadField2(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } + case 3: + if fieldTypeId == thrift.LIST { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -3863,7 +4563,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Tool[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptTemplate[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -3873,29 +4573,67 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *Tool) ReadField1(iprot thrift.TProtocol) error { +func (p *PromptTemplate) ReadField1(iprot thrift.TProtocol) error { - var _field *ToolType + var _field *TemplateType if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.Type = _field + p.TemplateType = _field return nil } -func (p *Tool) ReadField2(iprot thrift.TProtocol) error { - _field := NewFunction() - if err := _field.Read(iprot); err != nil { +func (p *PromptTemplate) ReadField2(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { return err } - p.Function = _field + _field := make([]*Message, 0, size) + values := make([]Message, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.Messages = _field return nil } +func (p *PromptTemplate) ReadField3(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*VariableDef, 0, size) + values := make([]VariableDef, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() -func (p *Tool) Write(oprot thrift.TProtocol) (err error) { + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.VariableDefs = _field + return nil +} + +func (p *PromptTemplate) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("Tool"); err != nil { + if err = oprot.WriteStructBegin("PromptTemplate"); err != nil { goto WriteStructBeginError } if p != nil { @@ -3907,6 +4645,10 @@ func (p *Tool) Write(oprot thrift.TProtocol) (err error) { fieldId = 2 goto WriteFieldError } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -3925,12 +4667,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *Tool) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetType() { - if err = oprot.WriteFieldBegin("type", thrift.STRING, 1); err != nil { +func (p *PromptTemplate) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetTemplateType() { + if err = oprot.WriteFieldBegin("template_type", thrift.STRING, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Type); err != nil { + if err := oprot.WriteString(*p.TemplateType); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3943,12 +4685,20 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *Tool) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetFunction() { - if err = oprot.WriteFieldBegin("function", thrift.STRUCT, 2); err != nil { +func (p *PromptTemplate) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetMessages() { + if err = oprot.WriteFieldBegin("messages", thrift.LIST, 2); err != nil { goto WriteFieldBeginError } - if err := p.Function.Write(oprot); err != nil { + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Messages)); err != nil { + return err + } + for _, v := range p.Messages { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -3961,132 +4711,138 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } +func (p *PromptTemplate) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetVariableDefs() { + if err = oprot.WriteFieldBegin("variable_defs", thrift.LIST, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.VariableDefs)); err != nil { + return err + } + for _, v := range p.VariableDefs { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} -func (p *Tool) String() string { +func (p *PromptTemplate) String() string { if p == nil { return "" } - return fmt.Sprintf("Tool(%+v)", *p) + return fmt.Sprintf("PromptTemplate(%+v)", *p) } -func (p *Tool) DeepEqual(ano *Tool) bool { +func (p *PromptTemplate) DeepEqual(ano *PromptTemplate) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Type) { + if !p.Field1DeepEqual(ano.TemplateType) { return false } - if !p.Field2DeepEqual(ano.Function) { + if !p.Field2DeepEqual(ano.Messages) { + return false + } + if !p.Field3DeepEqual(ano.VariableDefs) { return false } return true } -func (p *Tool) Field1DeepEqual(src *ToolType) bool { +func (p *PromptTemplate) Field1DeepEqual(src *TemplateType) bool { - if p.Type == src { + if p.TemplateType == src { return true - } else if p.Type == nil || src == nil { + } else if p.TemplateType == nil || src == nil { return false } - if strings.Compare(*p.Type, *src) != 0 { + if strings.Compare(*p.TemplateType, *src) != 0 { return false } return true } -func (p *Tool) Field2DeepEqual(src *Function) bool { +func (p *PromptTemplate) Field2DeepEqual(src []*Message) bool { - if !p.Function.DeepEqual(src) { + if len(p.Messages) != len(src) { + return false + } + for i, v := range p.Messages { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } + return true +} +func (p *PromptTemplate) Field3DeepEqual(src []*VariableDef) bool { + + if len(p.VariableDefs) != len(src) { return false } + for i, v := range p.VariableDefs { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } return true } -type Function struct { - Name *string `thrift:"name,1,optional" frugal:"1,optional,string" form:"name" json:"name,omitempty" query:"name"` - Description *string `thrift:"description,2,optional" frugal:"2,optional,string" form:"description" json:"description,omitempty" query:"description"` - Parameters *string `thrift:"parameters,3,optional" frugal:"3,optional,string" form:"parameters" json:"parameters,omitempty" query:"parameters"` +type ToolCallConfig struct { + ToolChoice *ToolChoiceType `thrift:"tool_choice,1,optional" frugal:"1,optional,string" form:"tool_choice" json:"tool_choice,omitempty" query:"tool_choice"` } -func NewFunction() *Function { - return &Function{} +func NewToolCallConfig() *ToolCallConfig { + return &ToolCallConfig{} } -func (p *Function) InitDefault() { +func (p *ToolCallConfig) InitDefault() { } -var Function_Name_DEFAULT string +var ToolCallConfig_ToolChoice_DEFAULT ToolChoiceType -func (p *Function) GetName() (v string) { +func (p *ToolCallConfig) GetToolChoice() (v ToolChoiceType) { if p == nil { return } - if !p.IsSetName() { - return Function_Name_DEFAULT + if !p.IsSetToolChoice() { + return ToolCallConfig_ToolChoice_DEFAULT } - return *p.Name + return *p.ToolChoice +} +func (p *ToolCallConfig) SetToolChoice(val *ToolChoiceType) { + p.ToolChoice = val } -var Function_Description_DEFAULT string +var fieldIDToName_ToolCallConfig = map[int16]string{ + 1: "tool_choice", +} -func (p *Function) GetDescription() (v string) { - if p == nil { - return - } - if !p.IsSetDescription() { - return Function_Description_DEFAULT - } - return *p.Description +func (p *ToolCallConfig) IsSetToolChoice() bool { + return p.ToolChoice != nil } -var Function_Parameters_DEFAULT string +func (p *ToolCallConfig) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 -func (p *Function) GetParameters() (v string) { - if p == nil { - return - } - if !p.IsSetParameters() { - return Function_Parameters_DEFAULT - } - return *p.Parameters -} -func (p *Function) SetName(val *string) { - p.Name = val -} -func (p *Function) SetDescription(val *string) { - p.Description = val -} -func (p *Function) SetParameters(val *string) { - p.Parameters = val -} - -var fieldIDToName_Function = map[int16]string{ - 1: "name", - 2: "description", - 3: "parameters", -} - -func (p *Function) IsSetName() bool { - return p.Name != nil -} - -func (p *Function) IsSetDescription() bool { - return p.Description != nil -} - -func (p *Function) IsSetParameters() bool { - return p.Parameters != nil -} - -func (p *Function) Read(iprot thrift.TProtocol) (err error) { - var fieldTypeId thrift.TType - var fieldId int16 - - if _, err = iprot.ReadStructBegin(); err != nil { - goto ReadStructBeginError + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError } for { @@ -4107,22 +4863,6 @@ func (p *Function) Read(iprot thrift.TProtocol) (err error) { } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } - case 2: - if fieldTypeId == thrift.STRING { - if err = p.ReadField2(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } - case 3: - if fieldTypeId == thrift.STRING { - if err = p.ReadField3(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -4142,7 +4882,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Function[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ToolCallConfig[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -4152,43 +4892,21 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *Function) ReadField1(iprot thrift.TProtocol) error { - - var _field *string - if v, err := iprot.ReadString(); err != nil { - return err - } else { - _field = &v - } - p.Name = _field - return nil -} -func (p *Function) ReadField2(iprot thrift.TProtocol) error { - - var _field *string - if v, err := iprot.ReadString(); err != nil { - return err - } else { - _field = &v - } - p.Description = _field - return nil -} -func (p *Function) ReadField3(iprot thrift.TProtocol) error { +func (p *ToolCallConfig) ReadField1(iprot thrift.TProtocol) error { - var _field *string + var _field *ToolChoiceType if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.Parameters = _field + p.ToolChoice = _field return nil } -func (p *Function) Write(oprot thrift.TProtocol) (err error) { +func (p *ToolCallConfig) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("Function"); err != nil { + if err = oprot.WriteStructBegin("ToolCallConfig"); err != nil { goto WriteStructBeginError } if p != nil { @@ -4196,14 +4914,6 @@ func (p *Function) Write(oprot thrift.TProtocol) (err error) { fieldId = 1 goto WriteFieldError } - if err = p.writeField2(oprot); err != nil { - fieldId = 2 - goto WriteFieldError - } - if err = p.writeField3(oprot); err != nil { - fieldId = 3 - goto WriteFieldError - } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -4222,12 +4932,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *Function) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetName() { - if err = oprot.WriteFieldBegin("name", thrift.STRING, 1); err != nil { +func (p *ToolCallConfig) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetToolChoice() { + if err = oprot.WriteFieldBegin("tool_choice", thrift.STRING, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteString(*p.Name); err != nil { + if err := oprot.WriteString(*p.ToolChoice); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4240,267 +4950,180 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *Function) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetDescription() { - if err = oprot.WriteFieldBegin("description", thrift.STRING, 2); err != nil { - goto WriteFieldBeginError - } - if err := oprot.WriteString(*p.Description); err != nil { - return err - } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } - } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) -} -func (p *Function) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetParameters() { - if err = oprot.WriteFieldBegin("parameters", thrift.STRING, 3); err != nil { - goto WriteFieldBeginError - } - if err := oprot.WriteString(*p.Parameters); err != nil { - return err - } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } - } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) -} -func (p *Function) String() string { +func (p *ToolCallConfig) String() string { if p == nil { return "" } - return fmt.Sprintf("Function(%+v)", *p) + return fmt.Sprintf("ToolCallConfig(%+v)", *p) } -func (p *Function) DeepEqual(ano *Function) bool { +func (p *ToolCallConfig) DeepEqual(ano *ToolCallConfig) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Name) { - return false - } - if !p.Field2DeepEqual(ano.Description) { - return false - } - if !p.Field3DeepEqual(ano.Parameters) { - return false - } - return true -} - -func (p *Function) Field1DeepEqual(src *string) bool { - - if p.Name == src { - return true - } else if p.Name == nil || src == nil { - return false - } - if strings.Compare(*p.Name, *src) != 0 { + if !p.Field1DeepEqual(ano.ToolChoice) { return false } return true } -func (p *Function) Field2DeepEqual(src *string) bool { - if p.Description == src { - return true - } else if p.Description == nil || src == nil { - return false - } - if strings.Compare(*p.Description, *src) != 0 { - return false - } - return true -} -func (p *Function) Field3DeepEqual(src *string) bool { +func (p *ToolCallConfig) Field1DeepEqual(src *ToolChoiceType) bool { - if p.Parameters == src { + if p.ToolChoice == src { return true - } else if p.Parameters == nil || src == nil { + } else if p.ToolChoice == nil || src == nil { return false } - if strings.Compare(*p.Parameters, *src) != 0 { + if strings.Compare(*p.ToolChoice, *src) != 0 { return false } return true } -type LLMConfig struct { - Temperature *float64 `thrift:"temperature,1,optional" frugal:"1,optional,double" form:"temperature" json:"temperature,omitempty" query:"temperature"` - MaxTokens *int32 `thrift:"max_tokens,2,optional" frugal:"2,optional,i32" form:"max_tokens" json:"max_tokens,omitempty" query:"max_tokens"` - TopK *int32 `thrift:"top_k,3,optional" frugal:"3,optional,i32" form:"top_k" json:"top_k,omitempty" query:"top_k"` - TopP *float64 `thrift:"top_p,4,optional" frugal:"4,optional,double" form:"top_p" json:"top_p,omitempty" query:"top_p"` - PresencePenalty *float64 `thrift:"presence_penalty,5,optional" frugal:"5,optional,double" form:"presence_penalty" json:"presence_penalty,omitempty" query:"presence_penalty"` - FrequencyPenalty *float64 `thrift:"frequency_penalty,6,optional" frugal:"6,optional,double" form:"frequency_penalty" json:"frequency_penalty,omitempty" query:"frequency_penalty"` - JSONMode *bool `thrift:"json_mode,7,optional" frugal:"7,optional,bool" form:"json_mode" json:"json_mode,omitempty" query:"json_mode"` +type Message struct { + Role *Role `thrift:"role,1,optional" frugal:"1,optional,string" form:"role" json:"role,omitempty" query:"role"` + Content *string `thrift:"content,2,optional" frugal:"2,optional,string" form:"content" json:"content,omitempty" query:"content"` + Parts []*ContentPart `thrift:"parts,3,optional" frugal:"3,optional,list" form:"parts" json:"parts,omitempty" query:"parts"` + ReasoningContent *string `thrift:"reasoning_content,4,optional" frugal:"4,optional,string" form:"reasoning_content" json:"reasoning_content,omitempty" query:"reasoning_content"` + ToolCallID *string `thrift:"tool_call_id,5,optional" frugal:"5,optional,string" form:"tool_call_id" json:"tool_call_id,omitempty" query:"tool_call_id"` + ToolCalls []*ToolCall `thrift:"tool_calls,6,optional" frugal:"6,optional,list" form:"tool_calls" json:"tool_calls,omitempty" query:"tool_calls"` } -func NewLLMConfig() *LLMConfig { - return &LLMConfig{} +func NewMessage() *Message { + return &Message{} } -func (p *LLMConfig) InitDefault() { +func (p *Message) InitDefault() { } -var LLMConfig_Temperature_DEFAULT float64 +var Message_Role_DEFAULT Role -func (p *LLMConfig) GetTemperature() (v float64) { +func (p *Message) GetRole() (v Role) { if p == nil { return } - if !p.IsSetTemperature() { - return LLMConfig_Temperature_DEFAULT + if !p.IsSetRole() { + return Message_Role_DEFAULT } - return *p.Temperature + return *p.Role } -var LLMConfig_MaxTokens_DEFAULT int32 +var Message_Content_DEFAULT string -func (p *LLMConfig) GetMaxTokens() (v int32) { +func (p *Message) GetContent() (v string) { if p == nil { return } - if !p.IsSetMaxTokens() { - return LLMConfig_MaxTokens_DEFAULT + if !p.IsSetContent() { + return Message_Content_DEFAULT } - return *p.MaxTokens + return *p.Content } -var LLMConfig_TopK_DEFAULT int32 +var Message_Parts_DEFAULT []*ContentPart -func (p *LLMConfig) GetTopK() (v int32) { +func (p *Message) GetParts() (v []*ContentPart) { if p == nil { return } - if !p.IsSetTopK() { - return LLMConfig_TopK_DEFAULT + if !p.IsSetParts() { + return Message_Parts_DEFAULT } - return *p.TopK + return p.Parts } -var LLMConfig_TopP_DEFAULT float64 +var Message_ReasoningContent_DEFAULT string -func (p *LLMConfig) GetTopP() (v float64) { +func (p *Message) GetReasoningContent() (v string) { if p == nil { return } - if !p.IsSetTopP() { - return LLMConfig_TopP_DEFAULT + if !p.IsSetReasoningContent() { + return Message_ReasoningContent_DEFAULT } - return *p.TopP + return *p.ReasoningContent } -var LLMConfig_PresencePenalty_DEFAULT float64 +var Message_ToolCallID_DEFAULT string -func (p *LLMConfig) GetPresencePenalty() (v float64) { +func (p *Message) GetToolCallID() (v string) { if p == nil { return } - if !p.IsSetPresencePenalty() { - return LLMConfig_PresencePenalty_DEFAULT + if !p.IsSetToolCallID() { + return Message_ToolCallID_DEFAULT } - return *p.PresencePenalty + return *p.ToolCallID } -var LLMConfig_FrequencyPenalty_DEFAULT float64 +var Message_ToolCalls_DEFAULT []*ToolCall -func (p *LLMConfig) GetFrequencyPenalty() (v float64) { +func (p *Message) GetToolCalls() (v []*ToolCall) { if p == nil { return } - if !p.IsSetFrequencyPenalty() { - return LLMConfig_FrequencyPenalty_DEFAULT + if !p.IsSetToolCalls() { + return Message_ToolCalls_DEFAULT } - return *p.FrequencyPenalty + return p.ToolCalls } - -var LLMConfig_JSONMode_DEFAULT bool - -func (p *LLMConfig) GetJSONMode() (v bool) { - if p == nil { - return - } - if !p.IsSetJSONMode() { - return LLMConfig_JSONMode_DEFAULT - } - return *p.JSONMode -} -func (p *LLMConfig) SetTemperature(val *float64) { - p.Temperature = val -} -func (p *LLMConfig) SetMaxTokens(val *int32) { - p.MaxTokens = val -} -func (p *LLMConfig) SetTopK(val *int32) { - p.TopK = val +func (p *Message) SetRole(val *Role) { + p.Role = val } -func (p *LLMConfig) SetTopP(val *float64) { - p.TopP = val +func (p *Message) SetContent(val *string) { + p.Content = val } -func (p *LLMConfig) SetPresencePenalty(val *float64) { - p.PresencePenalty = val +func (p *Message) SetParts(val []*ContentPart) { + p.Parts = val } -func (p *LLMConfig) SetFrequencyPenalty(val *float64) { - p.FrequencyPenalty = val +func (p *Message) SetReasoningContent(val *string) { + p.ReasoningContent = val } -func (p *LLMConfig) SetJSONMode(val *bool) { - p.JSONMode = val +func (p *Message) SetToolCallID(val *string) { + p.ToolCallID = val } - -var fieldIDToName_LLMConfig = map[int16]string{ - 1: "temperature", - 2: "max_tokens", - 3: "top_k", - 4: "top_p", - 5: "presence_penalty", - 6: "frequency_penalty", - 7: "json_mode", +func (p *Message) SetToolCalls(val []*ToolCall) { + p.ToolCalls = val } -func (p *LLMConfig) IsSetTemperature() bool { - return p.Temperature != nil +var fieldIDToName_Message = map[int16]string{ + 1: "role", + 2: "content", + 3: "parts", + 4: "reasoning_content", + 5: "tool_call_id", + 6: "tool_calls", } -func (p *LLMConfig) IsSetMaxTokens() bool { - return p.MaxTokens != nil +func (p *Message) IsSetRole() bool { + return p.Role != nil } -func (p *LLMConfig) IsSetTopK() bool { - return p.TopK != nil +func (p *Message) IsSetContent() bool { + return p.Content != nil } -func (p *LLMConfig) IsSetTopP() bool { - return p.TopP != nil +func (p *Message) IsSetParts() bool { + return p.Parts != nil } -func (p *LLMConfig) IsSetPresencePenalty() bool { - return p.PresencePenalty != nil +func (p *Message) IsSetReasoningContent() bool { + return p.ReasoningContent != nil } -func (p *LLMConfig) IsSetFrequencyPenalty() bool { - return p.FrequencyPenalty != nil +func (p *Message) IsSetToolCallID() bool { + return p.ToolCallID != nil } -func (p *LLMConfig) IsSetJSONMode() bool { - return p.JSONMode != nil +func (p *Message) IsSetToolCalls() bool { + return p.ToolCalls != nil } -func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { +func (p *Message) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -4519,7 +5142,7 @@ func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { switch fieldId { case 1: - if fieldTypeId == thrift.DOUBLE { + if fieldTypeId == thrift.STRING { if err = p.ReadField1(iprot); err != nil { goto ReadFieldError } @@ -4527,7 +5150,7 @@ func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 2: - if fieldTypeId == thrift.I32 { + if fieldTypeId == thrift.STRING { if err = p.ReadField2(iprot); err != nil { goto ReadFieldError } @@ -4535,7 +5158,7 @@ func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 3: - if fieldTypeId == thrift.I32 { + if fieldTypeId == thrift.LIST { if err = p.ReadField3(iprot); err != nil { goto ReadFieldError } @@ -4543,7 +5166,7 @@ func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 4: - if fieldTypeId == thrift.DOUBLE { + if fieldTypeId == thrift.STRING { if err = p.ReadField4(iprot); err != nil { goto ReadFieldError } @@ -4551,7 +5174,7 @@ func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 5: - if fieldTypeId == thrift.DOUBLE { + if fieldTypeId == thrift.STRING { if err = p.ReadField5(iprot); err != nil { goto ReadFieldError } @@ -4559,21 +5182,13 @@ func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { goto SkipFieldError } case 6: - if fieldTypeId == thrift.DOUBLE { + if fieldTypeId == thrift.LIST { if err = p.ReadField6(iprot); err != nil { goto ReadFieldError } } else if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError } - case 7: - if fieldTypeId == thrift.BOOL { - if err = p.ReadField7(iprot); err != nil { - goto ReadFieldError - } - } else if err = iprot.Skip(fieldTypeId); err != nil { - goto SkipFieldError - } default: if err = iprot.Skip(fieldTypeId); err != nil { goto SkipFieldError @@ -4593,7 +5208,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_LLMConfig[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Message[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -4603,87 +5218,100 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *LLMConfig) ReadField1(iprot thrift.TProtocol) error { +func (p *Message) ReadField1(iprot thrift.TProtocol) error { - var _field *float64 - if v, err := iprot.ReadDouble(); err != nil { + var _field *Role + if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.Temperature = _field + p.Role = _field return nil } -func (p *LLMConfig) ReadField2(iprot thrift.TProtocol) error { +func (p *Message) ReadField2(iprot thrift.TProtocol) error { - var _field *int32 - if v, err := iprot.ReadI32(); err != nil { + var _field *string + if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.MaxTokens = _field + p.Content = _field return nil } -func (p *LLMConfig) ReadField3(iprot thrift.TProtocol) error { - - var _field *int32 - if v, err := iprot.ReadI32(); err != nil { +func (p *Message) ReadField3(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { return err - } else { - _field = &v } - p.TopK = _field - return nil -} -func (p *LLMConfig) ReadField4(iprot thrift.TProtocol) error { + _field := make([]*ContentPart, 0, size) + values := make([]ContentPart, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() - var _field *float64 - if v, err := iprot.ReadDouble(); err != nil { + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { return err - } else { - _field = &v } - p.TopP = _field + p.Parts = _field return nil } -func (p *LLMConfig) ReadField5(iprot thrift.TProtocol) error { +func (p *Message) ReadField4(iprot thrift.TProtocol) error { - var _field *float64 - if v, err := iprot.ReadDouble(); err != nil { + var _field *string + if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.PresencePenalty = _field + p.ReasoningContent = _field return nil } -func (p *LLMConfig) ReadField6(iprot thrift.TProtocol) error { +func (p *Message) ReadField5(iprot thrift.TProtocol) error { - var _field *float64 - if v, err := iprot.ReadDouble(); err != nil { + var _field *string + if v, err := iprot.ReadString(); err != nil { return err } else { _field = &v } - p.FrequencyPenalty = _field + p.ToolCallID = _field return nil } -func (p *LLMConfig) ReadField7(iprot thrift.TProtocol) error { +func (p *Message) ReadField6(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*ToolCall, 0, size) + values := make([]ToolCall, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() - var _field *bool - if v, err := iprot.ReadBool(); err != nil { + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { return err - } else { - _field = &v } - p.JSONMode = _field + p.ToolCalls = _field return nil } -func (p *LLMConfig) Write(oprot thrift.TProtocol) (err error) { +func (p *Message) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("LLMConfig"); err != nil { + if err = oprot.WriteStructBegin("Message"); err != nil { goto WriteStructBeginError } if p != nil { @@ -4711,10 +5339,6 @@ func (p *LLMConfig) Write(oprot thrift.TProtocol) (err error) { fieldId = 6 goto WriteFieldError } - if err = p.writeField7(oprot); err != nil { - fieldId = 7 - goto WriteFieldError - } } if err = oprot.WriteFieldStop(); err != nil { goto WriteFieldStopError @@ -4733,12 +5357,12 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *LLMConfig) writeField1(oprot thrift.TProtocol) (err error) { - if p.IsSetTemperature() { - if err = oprot.WriteFieldBegin("temperature", thrift.DOUBLE, 1); err != nil { +func (p *Message) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetRole() { + if err = oprot.WriteFieldBegin("role", thrift.STRING, 1); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteDouble(*p.Temperature); err != nil { + if err := oprot.WriteString(*p.Role); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4751,12 +5375,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *LLMConfig) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetMaxTokens() { - if err = oprot.WriteFieldBegin("max_tokens", thrift.I32, 2); err != nil { +func (p *Message) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetContent() { + if err = oprot.WriteFieldBegin("content", thrift.STRING, 2); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteI32(*p.MaxTokens); err != nil { + if err := oprot.WriteString(*p.Content); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4769,12 +5393,20 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) } -func (p *LLMConfig) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetTopK() { - if err = oprot.WriteFieldBegin("top_k", thrift.I32, 3); err != nil { +func (p *Message) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetParts() { + if err = oprot.WriteFieldBegin("parts", thrift.LIST, 3); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteI32(*p.TopK); err != nil { + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Parts)); err != nil { + return err + } + for _, v := range p.Parts { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4787,12 +5419,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) } -func (p *LLMConfig) writeField4(oprot thrift.TProtocol) (err error) { - if p.IsSetTopP() { - if err = oprot.WriteFieldBegin("top_p", thrift.DOUBLE, 4); err != nil { +func (p *Message) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetReasoningContent() { + if err = oprot.WriteFieldBegin("reasoning_content", thrift.STRING, 4); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteDouble(*p.TopP); err != nil { + if err := oprot.WriteString(*p.ReasoningContent); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4805,12 +5437,12 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) } -func (p *LLMConfig) writeField5(oprot thrift.TProtocol) (err error) { - if p.IsSetPresencePenalty() { - if err = oprot.WriteFieldBegin("presence_penalty", thrift.DOUBLE, 5); err != nil { +func (p *Message) writeField5(oprot thrift.TProtocol) (err error) { + if p.IsSetToolCallID() { + if err = oprot.WriteFieldBegin("tool_call_id", thrift.STRING, 5); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteDouble(*p.PresencePenalty); err != nil { + if err := oprot.WriteString(*p.ToolCallID); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4823,30 +5455,20 @@ WriteFieldBeginError: WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 5 end error: ", p), err) } -func (p *LLMConfig) writeField6(oprot thrift.TProtocol) (err error) { - if p.IsSetFrequencyPenalty() { - if err = oprot.WriteFieldBegin("frequency_penalty", thrift.DOUBLE, 6); err != nil { +func (p *Message) writeField6(oprot thrift.TProtocol) (err error) { + if p.IsSetToolCalls() { + if err = oprot.WriteFieldBegin("tool_calls", thrift.LIST, 6); err != nil { goto WriteFieldBeginError } - if err := oprot.WriteDouble(*p.FrequencyPenalty); err != nil { + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.ToolCalls)); err != nil { return err } - if err = oprot.WriteFieldEnd(); err != nil { - goto WriteFieldEndError - } - } - return nil -WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 6 begin error: ", p), err) -WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 6 end error: ", p), err) -} -func (p *LLMConfig) writeField7(oprot thrift.TProtocol) (err error) { - if p.IsSetJSONMode() { - if err = oprot.WriteFieldBegin("json_mode", thrift.BOOL, 7); err != nil { - goto WriteFieldBeginError + for _, v := range p.ToolCalls { + if err := v.Write(oprot); err != nil { + return err + } } - if err := oprot.WriteBool(*p.JSONMode); err != nil { + if err := oprot.WriteListEnd(); err != nil { return err } if err = oprot.WriteFieldEnd(); err != nil { @@ -4855,298 +5477,4401 @@ func (p *LLMConfig) writeField7(oprot thrift.TProtocol) (err error) { } return nil WriteFieldBeginError: - return thrift.PrependError(fmt.Sprintf("%T write field 7 begin error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 6 begin error: ", p), err) WriteFieldEndError: - return thrift.PrependError(fmt.Sprintf("%T write field 7 end error: ", p), err) + return thrift.PrependError(fmt.Sprintf("%T write field 6 end error: ", p), err) } -func (p *LLMConfig) String() string { +func (p *Message) String() string { if p == nil { return "" } - return fmt.Sprintf("LLMConfig(%+v)", *p) + return fmt.Sprintf("Message(%+v)", *p) } -func (p *LLMConfig) DeepEqual(ano *LLMConfig) bool { +func (p *Message) DeepEqual(ano *Message) bool { if p == ano { return true } else if p == nil || ano == nil { return false } - if !p.Field1DeepEqual(ano.Temperature) { - return false - } - if !p.Field2DeepEqual(ano.MaxTokens) { + if !p.Field1DeepEqual(ano.Role) { return false } - if !p.Field3DeepEqual(ano.TopK) { + if !p.Field2DeepEqual(ano.Content) { return false } - if !p.Field4DeepEqual(ano.TopP) { + if !p.Field3DeepEqual(ano.Parts) { return false } - if !p.Field5DeepEqual(ano.PresencePenalty) { + if !p.Field4DeepEqual(ano.ReasoningContent) { return false } - if !p.Field6DeepEqual(ano.FrequencyPenalty) { + if !p.Field5DeepEqual(ano.ToolCallID) { return false } - if !p.Field7DeepEqual(ano.JSONMode) { + if !p.Field6DeepEqual(ano.ToolCalls) { return false } return true } -func (p *LLMConfig) Field1DeepEqual(src *float64) bool { +func (p *Message) Field1DeepEqual(src *Role) bool { - if p.Temperature == src { + if p.Role == src { return true - } else if p.Temperature == nil || src == nil { + } else if p.Role == nil || src == nil { return false } - if *p.Temperature != *src { + if strings.Compare(*p.Role, *src) != 0 { return false } return true } -func (p *LLMConfig) Field2DeepEqual(src *int32) bool { +func (p *Message) Field2DeepEqual(src *string) bool { - if p.MaxTokens == src { + if p.Content == src { return true - } else if p.MaxTokens == nil || src == nil { + } else if p.Content == nil || src == nil { return false } - if *p.MaxTokens != *src { + if strings.Compare(*p.Content, *src) != 0 { return false } return true } -func (p *LLMConfig) Field3DeepEqual(src *int32) bool { +func (p *Message) Field3DeepEqual(src []*ContentPart) bool { - if p.TopK == src { - return true - } else if p.TopK == nil || src == nil { + if len(p.Parts) != len(src) { return false } - if *p.TopK != *src { - return false + for i, v := range p.Parts { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } } return true } -func (p *LLMConfig) Field4DeepEqual(src *float64) bool { +func (p *Message) Field4DeepEqual(src *string) bool { - if p.TopP == src { + if p.ReasoningContent == src { return true - } else if p.TopP == nil || src == nil { + } else if p.ReasoningContent == nil || src == nil { return false } - if *p.TopP != *src { + if strings.Compare(*p.ReasoningContent, *src) != 0 { return false } return true } -func (p *LLMConfig) Field5DeepEqual(src *float64) bool { +func (p *Message) Field5DeepEqual(src *string) bool { - if p.PresencePenalty == src { + if p.ToolCallID == src { return true - } else if p.PresencePenalty == nil || src == nil { + } else if p.ToolCallID == nil || src == nil { return false } - if *p.PresencePenalty != *src { + if strings.Compare(*p.ToolCallID, *src) != 0 { return false } return true } -func (p *LLMConfig) Field6DeepEqual(src *float64) bool { +func (p *Message) Field6DeepEqual(src []*ToolCall) bool { - if p.FrequencyPenalty == src { - return true - } else if p.FrequencyPenalty == nil || src == nil { + if len(p.ToolCalls) != len(src) { return false } - if *p.FrequencyPenalty != *src { - return false + for i, v := range p.ToolCalls { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } } return true } -func (p *LLMConfig) Field7DeepEqual(src *bool) bool { - if p.JSONMode == src { - return true - } else if p.JSONMode == nil || src == nil { - return false +type ContentPart struct { + Type *ContentType `thrift:"type,1,optional" frugal:"1,optional,string" form:"type" json:"type,omitempty" query:"type"` + Text *string `thrift:"text,2,optional" frugal:"2,optional,string" form:"text" json:"text,omitempty" query:"text"` + ImageURL *string `thrift:"image_url,3,optional" frugal:"3,optional,string" form:"image_url" json:"image_url,omitempty" query:"image_url"` + Base64Data *string `thrift:"base64_data,4,optional" frugal:"4,optional,string" form:"base64_data" json:"base64_data,omitempty" query:"base64_data"` +} + +func NewContentPart() *ContentPart { + return &ContentPart{} +} + +func (p *ContentPart) InitDefault() { +} + +var ContentPart_Type_DEFAULT ContentType + +func (p *ContentPart) GetType() (v ContentType) { + if p == nil { + return } - if *p.JSONMode != *src { + if !p.IsSetType() { + return ContentPart_Type_DEFAULT + } + return *p.Type +} + +var ContentPart_Text_DEFAULT string + +func (p *ContentPart) GetText() (v string) { + if p == nil { + return + } + if !p.IsSetText() { + return ContentPart_Text_DEFAULT + } + return *p.Text +} + +var ContentPart_ImageURL_DEFAULT string + +func (p *ContentPart) GetImageURL() (v string) { + if p == nil { + return + } + if !p.IsSetImageURL() { + return ContentPart_ImageURL_DEFAULT + } + return *p.ImageURL +} + +var ContentPart_Base64Data_DEFAULT string + +func (p *ContentPart) GetBase64Data() (v string) { + if p == nil { + return + } + if !p.IsSetBase64Data() { + return ContentPart_Base64Data_DEFAULT + } + return *p.Base64Data +} +func (p *ContentPart) SetType(val *ContentType) { + p.Type = val +} +func (p *ContentPart) SetText(val *string) { + p.Text = val +} +func (p *ContentPart) SetImageURL(val *string) { + p.ImageURL = val +} +func (p *ContentPart) SetBase64Data(val *string) { + p.Base64Data = val +} + +var fieldIDToName_ContentPart = map[int16]string{ + 1: "type", + 2: "text", + 3: "image_url", + 4: "base64_data", +} + +func (p *ContentPart) IsSetType() bool { + return p.Type != nil +} + +func (p *ContentPart) IsSetText() bool { + return p.Text != nil +} + +func (p *ContentPart) IsSetImageURL() bool { + return p.ImageURL != nil +} + +func (p *ContentPart) IsSetBase64Data() bool { + return p.Base64Data != nil +} + +func (p *ContentPart) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRING { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 4: + if fieldTypeId == thrift.STRING { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ContentPart[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *ContentPart) ReadField1(iprot thrift.TProtocol) error { + + var _field *ContentType + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Type = _field + return nil +} +func (p *ContentPart) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Text = _field + return nil +} +func (p *ContentPart) ReadField3(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.ImageURL = _field + return nil +} +func (p *ContentPart) ReadField4(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Base64Data = _field + return nil +} + +func (p *ContentPart) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ContentPart"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *ContentPart) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetType() { + if err = oprot.WriteFieldBegin("type", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Type); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *ContentPart) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetText() { + if err = oprot.WriteFieldBegin("text", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Text); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *ContentPart) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetImageURL() { + if err = oprot.WriteFieldBegin("image_url", thrift.STRING, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.ImageURL); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} +func (p *ContentPart) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetBase64Data() { + if err = oprot.WriteFieldBegin("base64_data", thrift.STRING, 4); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Base64Data); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} + +func (p *ContentPart) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ContentPart(%+v)", *p) + +} + +func (p *ContentPart) DeepEqual(ano *ContentPart) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Type) { + return false + } + if !p.Field2DeepEqual(ano.Text) { + return false + } + if !p.Field3DeepEqual(ano.ImageURL) { + return false + } + if !p.Field4DeepEqual(ano.Base64Data) { + return false + } + return true +} + +func (p *ContentPart) Field1DeepEqual(src *ContentType) bool { + + if p.Type == src { + return true + } else if p.Type == nil || src == nil { + return false + } + if strings.Compare(*p.Type, *src) != 0 { + return false + } + return true +} +func (p *ContentPart) Field2DeepEqual(src *string) bool { + + if p.Text == src { + return true + } else if p.Text == nil || src == nil { + return false + } + if strings.Compare(*p.Text, *src) != 0 { + return false + } + return true +} +func (p *ContentPart) Field3DeepEqual(src *string) bool { + + if p.ImageURL == src { + return true + } else if p.ImageURL == nil || src == nil { + return false + } + if strings.Compare(*p.ImageURL, *src) != 0 { + return false + } + return true +} +func (p *ContentPart) Field4DeepEqual(src *string) bool { + + if p.Base64Data == src { + return true + } else if p.Base64Data == nil || src == nil { + return false + } + if strings.Compare(*p.Base64Data, *src) != 0 { + return false + } + return true +} + +type VariableDef struct { + // 变量名字 + Key *string `thrift:"key,1,optional" frugal:"1,optional,string" form:"key" json:"key,omitempty" query:"key"` + // 变量描述 + Desc *string `thrift:"desc,2,optional" frugal:"2,optional,string" form:"desc" json:"desc,omitempty" query:"desc"` + // 变量类型 + Type *VariableType `thrift:"type,3,optional" frugal:"3,optional,string" form:"type" json:"type,omitempty" query:"type"` +} + +func NewVariableDef() *VariableDef { + return &VariableDef{} +} + +func (p *VariableDef) InitDefault() { +} + +var VariableDef_Key_DEFAULT string + +func (p *VariableDef) GetKey() (v string) { + if p == nil { + return + } + if !p.IsSetKey() { + return VariableDef_Key_DEFAULT + } + return *p.Key +} + +var VariableDef_Desc_DEFAULT string + +func (p *VariableDef) GetDesc() (v string) { + if p == nil { + return + } + if !p.IsSetDesc() { + return VariableDef_Desc_DEFAULT + } + return *p.Desc +} + +var VariableDef_Type_DEFAULT VariableType + +func (p *VariableDef) GetType() (v VariableType) { + if p == nil { + return + } + if !p.IsSetType() { + return VariableDef_Type_DEFAULT + } + return *p.Type +} +func (p *VariableDef) SetKey(val *string) { + p.Key = val +} +func (p *VariableDef) SetDesc(val *string) { + p.Desc = val +} +func (p *VariableDef) SetType(val *VariableType) { + p.Type = val +} + +var fieldIDToName_VariableDef = map[int16]string{ + 1: "key", + 2: "desc", + 3: "type", +} + +func (p *VariableDef) IsSetKey() bool { + return p.Key != nil +} + +func (p *VariableDef) IsSetDesc() bool { + return p.Desc != nil +} + +func (p *VariableDef) IsSetType() bool { + return p.Type != nil +} + +func (p *VariableDef) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRING { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_VariableDef[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *VariableDef) ReadField1(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Key = _field + return nil +} +func (p *VariableDef) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Desc = _field + return nil +} +func (p *VariableDef) ReadField3(iprot thrift.TProtocol) error { + + var _field *VariableType + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Type = _field + return nil +} + +func (p *VariableDef) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("VariableDef"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *VariableDef) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetKey() { + if err = oprot.WriteFieldBegin("key", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Key); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *VariableDef) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetDesc() { + if err = oprot.WriteFieldBegin("desc", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Desc); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *VariableDef) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetType() { + if err = oprot.WriteFieldBegin("type", thrift.STRING, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Type); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} + +func (p *VariableDef) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("VariableDef(%+v)", *p) + +} + +func (p *VariableDef) DeepEqual(ano *VariableDef) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Key) { + return false + } + if !p.Field2DeepEqual(ano.Desc) { + return false + } + if !p.Field3DeepEqual(ano.Type) { + return false + } + return true +} + +func (p *VariableDef) Field1DeepEqual(src *string) bool { + + if p.Key == src { + return true + } else if p.Key == nil || src == nil { + return false + } + if strings.Compare(*p.Key, *src) != 0 { + return false + } + return true +} +func (p *VariableDef) Field2DeepEqual(src *string) bool { + + if p.Desc == src { + return true + } else if p.Desc == nil || src == nil { + return false + } + if strings.Compare(*p.Desc, *src) != 0 { + return false + } + return true +} +func (p *VariableDef) Field3DeepEqual(src *VariableType) bool { + + if p.Type == src { + return true + } else if p.Type == nil || src == nil { + return false + } + if strings.Compare(*p.Type, *src) != 0 { + return false + } + return true +} + +type Tool struct { + Type *ToolType `thrift:"type,1,optional" frugal:"1,optional,string" form:"type" json:"type,omitempty" query:"type"` + Function *Function `thrift:"function,2,optional" frugal:"2,optional,Function" form:"function" json:"function,omitempty" query:"function"` +} + +func NewTool() *Tool { + return &Tool{} +} + +func (p *Tool) InitDefault() { +} + +var Tool_Type_DEFAULT ToolType + +func (p *Tool) GetType() (v ToolType) { + if p == nil { + return + } + if !p.IsSetType() { + return Tool_Type_DEFAULT + } + return *p.Type +} + +var Tool_Function_DEFAULT *Function + +func (p *Tool) GetFunction() (v *Function) { + if p == nil { + return + } + if !p.IsSetFunction() { + return Tool_Function_DEFAULT + } + return p.Function +} +func (p *Tool) SetType(val *ToolType) { + p.Type = val +} +func (p *Tool) SetFunction(val *Function) { + p.Function = val +} + +var fieldIDToName_Tool = map[int16]string{ + 1: "type", + 2: "function", +} + +func (p *Tool) IsSetType() bool { + return p.Type != nil +} + +func (p *Tool) IsSetFunction() bool { + return p.Function != nil +} + +func (p *Tool) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Tool[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *Tool) ReadField1(iprot thrift.TProtocol) error { + + var _field *ToolType + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Type = _field + return nil +} +func (p *Tool) ReadField2(iprot thrift.TProtocol) error { + _field := NewFunction() + if err := _field.Read(iprot); err != nil { + return err + } + p.Function = _field + return nil +} + +func (p *Tool) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("Tool"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *Tool) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetType() { + if err = oprot.WriteFieldBegin("type", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Type); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *Tool) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetFunction() { + if err = oprot.WriteFieldBegin("function", thrift.STRUCT, 2); err != nil { + goto WriteFieldBeginError + } + if err := p.Function.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} + +func (p *Tool) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("Tool(%+v)", *p) + +} + +func (p *Tool) DeepEqual(ano *Tool) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Type) { + return false + } + if !p.Field2DeepEqual(ano.Function) { + return false + } + return true +} + +func (p *Tool) Field1DeepEqual(src *ToolType) bool { + + if p.Type == src { + return true + } else if p.Type == nil || src == nil { + return false + } + if strings.Compare(*p.Type, *src) != 0 { + return false + } + return true +} +func (p *Tool) Field2DeepEqual(src *Function) bool { + + if !p.Function.DeepEqual(src) { + return false + } + return true +} + +type Function struct { + Name *string `thrift:"name,1,optional" frugal:"1,optional,string" form:"name" json:"name,omitempty" query:"name"` + Description *string `thrift:"description,2,optional" frugal:"2,optional,string" form:"description" json:"description,omitempty" query:"description"` + Parameters *string `thrift:"parameters,3,optional" frugal:"3,optional,string" form:"parameters" json:"parameters,omitempty" query:"parameters"` +} + +func NewFunction() *Function { + return &Function{} +} + +func (p *Function) InitDefault() { +} + +var Function_Name_DEFAULT string + +func (p *Function) GetName() (v string) { + if p == nil { + return + } + if !p.IsSetName() { + return Function_Name_DEFAULT + } + return *p.Name +} + +var Function_Description_DEFAULT string + +func (p *Function) GetDescription() (v string) { + if p == nil { + return + } + if !p.IsSetDescription() { + return Function_Description_DEFAULT + } + return *p.Description +} + +var Function_Parameters_DEFAULT string + +func (p *Function) GetParameters() (v string) { + if p == nil { + return + } + if !p.IsSetParameters() { + return Function_Parameters_DEFAULT + } + return *p.Parameters +} +func (p *Function) SetName(val *string) { + p.Name = val +} +func (p *Function) SetDescription(val *string) { + p.Description = val +} +func (p *Function) SetParameters(val *string) { + p.Parameters = val +} + +var fieldIDToName_Function = map[int16]string{ + 1: "name", + 2: "description", + 3: "parameters", +} + +func (p *Function) IsSetName() bool { + return p.Name != nil +} + +func (p *Function) IsSetDescription() bool { + return p.Description != nil +} + +func (p *Function) IsSetParameters() bool { + return p.Parameters != nil +} + +func (p *Function) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRING { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Function[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *Function) ReadField1(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Name = _field + return nil +} +func (p *Function) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Description = _field + return nil +} +func (p *Function) ReadField3(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Parameters = _field + return nil +} + +func (p *Function) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("Function"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *Function) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetName() { + if err = oprot.WriteFieldBegin("name", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Name); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *Function) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetDescription() { + if err = oprot.WriteFieldBegin("description", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Description); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *Function) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetParameters() { + if err = oprot.WriteFieldBegin("parameters", thrift.STRING, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Parameters); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} + +func (p *Function) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("Function(%+v)", *p) + +} + +func (p *Function) DeepEqual(ano *Function) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Name) { + return false + } + if !p.Field2DeepEqual(ano.Description) { + return false + } + if !p.Field3DeepEqual(ano.Parameters) { + return false + } + return true +} + +func (p *Function) Field1DeepEqual(src *string) bool { + + if p.Name == src { + return true + } else if p.Name == nil || src == nil { + return false + } + if strings.Compare(*p.Name, *src) != 0 { + return false + } + return true +} +func (p *Function) Field2DeepEqual(src *string) bool { + + if p.Description == src { + return true + } else if p.Description == nil || src == nil { + return false + } + if strings.Compare(*p.Description, *src) != 0 { + return false + } + return true +} +func (p *Function) Field3DeepEqual(src *string) bool { + + if p.Parameters == src { + return true + } else if p.Parameters == nil || src == nil { + return false + } + if strings.Compare(*p.Parameters, *src) != 0 { + return false + } + return true +} + +type ToolCall struct { + Index *int32 `thrift:"index,1,optional" frugal:"1,optional,i32" form:"index" json:"index,omitempty" query:"index"` + ID *string `thrift:"id,2,optional" frugal:"2,optional,string" form:"id" json:"id,omitempty" query:"id"` + Type *ToolType `thrift:"type,3,optional" frugal:"3,optional,string" form:"type" json:"type,omitempty" query:"type"` + FunctionCall *FunctionCall `thrift:"function_call,4,optional" frugal:"4,optional,FunctionCall" form:"function_call" json:"function_call,omitempty" query:"function_call"` +} + +func NewToolCall() *ToolCall { + return &ToolCall{} +} + +func (p *ToolCall) InitDefault() { +} + +var ToolCall_Index_DEFAULT int32 + +func (p *ToolCall) GetIndex() (v int32) { + if p == nil { + return + } + if !p.IsSetIndex() { + return ToolCall_Index_DEFAULT + } + return *p.Index +} + +var ToolCall_ID_DEFAULT string + +func (p *ToolCall) GetID() (v string) { + if p == nil { + return + } + if !p.IsSetID() { + return ToolCall_ID_DEFAULT + } + return *p.ID +} + +var ToolCall_Type_DEFAULT ToolType + +func (p *ToolCall) GetType() (v ToolType) { + if p == nil { + return + } + if !p.IsSetType() { + return ToolCall_Type_DEFAULT + } + return *p.Type +} + +var ToolCall_FunctionCall_DEFAULT *FunctionCall + +func (p *ToolCall) GetFunctionCall() (v *FunctionCall) { + if p == nil { + return + } + if !p.IsSetFunctionCall() { + return ToolCall_FunctionCall_DEFAULT + } + return p.FunctionCall +} +func (p *ToolCall) SetIndex(val *int32) { + p.Index = val +} +func (p *ToolCall) SetID(val *string) { + p.ID = val +} +func (p *ToolCall) SetType(val *ToolType) { + p.Type = val +} +func (p *ToolCall) SetFunctionCall(val *FunctionCall) { + p.FunctionCall = val +} + +var fieldIDToName_ToolCall = map[int16]string{ + 1: "index", + 2: "id", + 3: "type", + 4: "function_call", +} + +func (p *ToolCall) IsSetIndex() bool { + return p.Index != nil +} + +func (p *ToolCall) IsSetID() bool { + return p.ID != nil +} + +func (p *ToolCall) IsSetType() bool { + return p.Type != nil +} + +func (p *ToolCall) IsSetFunctionCall() bool { + return p.FunctionCall != nil +} + +func (p *ToolCall) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.STRING { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 4: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ToolCall[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *ToolCall) ReadField1(iprot thrift.TProtocol) error { + + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = &v + } + p.Index = _field + return nil +} +func (p *ToolCall) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.ID = _field + return nil +} +func (p *ToolCall) ReadField3(iprot thrift.TProtocol) error { + + var _field *ToolType + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Type = _field + return nil +} +func (p *ToolCall) ReadField4(iprot thrift.TProtocol) error { + _field := NewFunctionCall() + if err := _field.Read(iprot); err != nil { + return err + } + p.FunctionCall = _field + return nil +} + +func (p *ToolCall) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("ToolCall"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *ToolCall) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetIndex() { + if err = oprot.WriteFieldBegin("index", thrift.I32, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI32(*p.Index); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *ToolCall) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetID() { + if err = oprot.WriteFieldBegin("id", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.ID); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *ToolCall) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetType() { + if err = oprot.WriteFieldBegin("type", thrift.STRING, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Type); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} +func (p *ToolCall) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetFunctionCall() { + if err = oprot.WriteFieldBegin("function_call", thrift.STRUCT, 4); err != nil { + goto WriteFieldBeginError + } + if err := p.FunctionCall.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} + +func (p *ToolCall) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ToolCall(%+v)", *p) + +} + +func (p *ToolCall) DeepEqual(ano *ToolCall) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Index) { + return false + } + if !p.Field2DeepEqual(ano.ID) { + return false + } + if !p.Field3DeepEqual(ano.Type) { + return false + } + if !p.Field4DeepEqual(ano.FunctionCall) { + return false + } + return true +} + +func (p *ToolCall) Field1DeepEqual(src *int32) bool { + + if p.Index == src { + return true + } else if p.Index == nil || src == nil { + return false + } + if *p.Index != *src { + return false + } + return true +} +func (p *ToolCall) Field2DeepEqual(src *string) bool { + + if p.ID == src { + return true + } else if p.ID == nil || src == nil { + return false + } + if strings.Compare(*p.ID, *src) != 0 { + return false + } + return true +} +func (p *ToolCall) Field3DeepEqual(src *ToolType) bool { + + if p.Type == src { + return true + } else if p.Type == nil || src == nil { + return false + } + if strings.Compare(*p.Type, *src) != 0 { + return false + } + return true +} +func (p *ToolCall) Field4DeepEqual(src *FunctionCall) bool { + + if !p.FunctionCall.DeepEqual(src) { + return false + } + return true +} + +type FunctionCall struct { + Name *string `thrift:"name,1,optional" frugal:"1,optional,string" form:"name" json:"name,omitempty" query:"name"` + Arguments *string `thrift:"arguments,2,optional" frugal:"2,optional,string" form:"arguments" json:"arguments,omitempty" query:"arguments"` +} + +func NewFunctionCall() *FunctionCall { + return &FunctionCall{} +} + +func (p *FunctionCall) InitDefault() { +} + +var FunctionCall_Name_DEFAULT string + +func (p *FunctionCall) GetName() (v string) { + if p == nil { + return + } + if !p.IsSetName() { + return FunctionCall_Name_DEFAULT + } + return *p.Name +} + +var FunctionCall_Arguments_DEFAULT string + +func (p *FunctionCall) GetArguments() (v string) { + if p == nil { + return + } + if !p.IsSetArguments() { + return FunctionCall_Arguments_DEFAULT + } + return *p.Arguments +} +func (p *FunctionCall) SetName(val *string) { + p.Name = val +} +func (p *FunctionCall) SetArguments(val *string) { + p.Arguments = val +} + +var fieldIDToName_FunctionCall = map[int16]string{ + 1: "name", + 2: "arguments", +} + +func (p *FunctionCall) IsSetName() bool { + return p.Name != nil +} + +func (p *FunctionCall) IsSetArguments() bool { + return p.Arguments != nil +} + +func (p *FunctionCall) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_FunctionCall[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *FunctionCall) ReadField1(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Name = _field + return nil +} +func (p *FunctionCall) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Arguments = _field + return nil +} + +func (p *FunctionCall) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("FunctionCall"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *FunctionCall) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetName() { + if err = oprot.WriteFieldBegin("name", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Name); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *FunctionCall) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetArguments() { + if err = oprot.WriteFieldBegin("arguments", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Arguments); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} + +func (p *FunctionCall) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("FunctionCall(%+v)", *p) + +} + +func (p *FunctionCall) DeepEqual(ano *FunctionCall) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Name) { + return false + } + if !p.Field2DeepEqual(ano.Arguments) { + return false + } + return true +} + +func (p *FunctionCall) Field1DeepEqual(src *string) bool { + + if p.Name == src { + return true + } else if p.Name == nil || src == nil { + return false + } + if strings.Compare(*p.Name, *src) != 0 { + return false + } + return true +} +func (p *FunctionCall) Field2DeepEqual(src *string) bool { + + if p.Arguments == src { + return true + } else if p.Arguments == nil || src == nil { + return false + } + if strings.Compare(*p.Arguments, *src) != 0 { + return false + } + return true +} + +type LLMConfig struct { + Temperature *float64 `thrift:"temperature,1,optional" frugal:"1,optional,double" form:"temperature" json:"temperature,omitempty" query:"temperature"` + MaxTokens *int32 `thrift:"max_tokens,2,optional" frugal:"2,optional,i32" form:"max_tokens" json:"max_tokens,omitempty" query:"max_tokens"` + TopK *int32 `thrift:"top_k,3,optional" frugal:"3,optional,i32" form:"top_k" json:"top_k,omitempty" query:"top_k"` + TopP *float64 `thrift:"top_p,4,optional" frugal:"4,optional,double" form:"top_p" json:"top_p,omitempty" query:"top_p"` + PresencePenalty *float64 `thrift:"presence_penalty,5,optional" frugal:"5,optional,double" form:"presence_penalty" json:"presence_penalty,omitempty" query:"presence_penalty"` + FrequencyPenalty *float64 `thrift:"frequency_penalty,6,optional" frugal:"6,optional,double" form:"frequency_penalty" json:"frequency_penalty,omitempty" query:"frequency_penalty"` + JSONMode *bool `thrift:"json_mode,7,optional" frugal:"7,optional,bool" form:"json_mode" json:"json_mode,omitempty" query:"json_mode"` +} + +func NewLLMConfig() *LLMConfig { + return &LLMConfig{} +} + +func (p *LLMConfig) InitDefault() { +} + +var LLMConfig_Temperature_DEFAULT float64 + +func (p *LLMConfig) GetTemperature() (v float64) { + if p == nil { + return + } + if !p.IsSetTemperature() { + return LLMConfig_Temperature_DEFAULT + } + return *p.Temperature +} + +var LLMConfig_MaxTokens_DEFAULT int32 + +func (p *LLMConfig) GetMaxTokens() (v int32) { + if p == nil { + return + } + if !p.IsSetMaxTokens() { + return LLMConfig_MaxTokens_DEFAULT + } + return *p.MaxTokens +} + +var LLMConfig_TopK_DEFAULT int32 + +func (p *LLMConfig) GetTopK() (v int32) { + if p == nil { + return + } + if !p.IsSetTopK() { + return LLMConfig_TopK_DEFAULT + } + return *p.TopK +} + +var LLMConfig_TopP_DEFAULT float64 + +func (p *LLMConfig) GetTopP() (v float64) { + if p == nil { + return + } + if !p.IsSetTopP() { + return LLMConfig_TopP_DEFAULT + } + return *p.TopP +} + +var LLMConfig_PresencePenalty_DEFAULT float64 + +func (p *LLMConfig) GetPresencePenalty() (v float64) { + if p == nil { + return + } + if !p.IsSetPresencePenalty() { + return LLMConfig_PresencePenalty_DEFAULT + } + return *p.PresencePenalty +} + +var LLMConfig_FrequencyPenalty_DEFAULT float64 + +func (p *LLMConfig) GetFrequencyPenalty() (v float64) { + if p == nil { + return + } + if !p.IsSetFrequencyPenalty() { + return LLMConfig_FrequencyPenalty_DEFAULT + } + return *p.FrequencyPenalty +} + +var LLMConfig_JSONMode_DEFAULT bool + +func (p *LLMConfig) GetJSONMode() (v bool) { + if p == nil { + return + } + if !p.IsSetJSONMode() { + return LLMConfig_JSONMode_DEFAULT + } + return *p.JSONMode +} +func (p *LLMConfig) SetTemperature(val *float64) { + p.Temperature = val +} +func (p *LLMConfig) SetMaxTokens(val *int32) { + p.MaxTokens = val +} +func (p *LLMConfig) SetTopK(val *int32) { + p.TopK = val +} +func (p *LLMConfig) SetTopP(val *float64) { + p.TopP = val +} +func (p *LLMConfig) SetPresencePenalty(val *float64) { + p.PresencePenalty = val +} +func (p *LLMConfig) SetFrequencyPenalty(val *float64) { + p.FrequencyPenalty = val +} +func (p *LLMConfig) SetJSONMode(val *bool) { + p.JSONMode = val +} + +var fieldIDToName_LLMConfig = map[int16]string{ + 1: "temperature", + 2: "max_tokens", + 3: "top_k", + 4: "top_p", + 5: "presence_penalty", + 6: "frequency_penalty", + 7: "json_mode", +} + +func (p *LLMConfig) IsSetTemperature() bool { + return p.Temperature != nil +} + +func (p *LLMConfig) IsSetMaxTokens() bool { + return p.MaxTokens != nil +} + +func (p *LLMConfig) IsSetTopK() bool { + return p.TopK != nil +} + +func (p *LLMConfig) IsSetTopP() bool { + return p.TopP != nil +} + +func (p *LLMConfig) IsSetPresencePenalty() bool { + return p.PresencePenalty != nil +} + +func (p *LLMConfig) IsSetFrequencyPenalty() bool { + return p.FrequencyPenalty != nil +} + +func (p *LLMConfig) IsSetJSONMode() bool { + return p.JSONMode != nil +} + +func (p *LLMConfig) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.DOUBLE { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.I32 { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.I32 { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 4: + if fieldTypeId == thrift.DOUBLE { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 5: + if fieldTypeId == thrift.DOUBLE { + if err = p.ReadField5(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 6: + if fieldTypeId == thrift.DOUBLE { + if err = p.ReadField6(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 7: + if fieldTypeId == thrift.BOOL { + if err = p.ReadField7(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_LLMConfig[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *LLMConfig) ReadField1(iprot thrift.TProtocol) error { + + var _field *float64 + if v, err := iprot.ReadDouble(); err != nil { + return err + } else { + _field = &v + } + p.Temperature = _field + return nil +} +func (p *LLMConfig) ReadField2(iprot thrift.TProtocol) error { + + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = &v + } + p.MaxTokens = _field + return nil +} +func (p *LLMConfig) ReadField3(iprot thrift.TProtocol) error { + + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = &v + } + p.TopK = _field + return nil +} +func (p *LLMConfig) ReadField4(iprot thrift.TProtocol) error { + + var _field *float64 + if v, err := iprot.ReadDouble(); err != nil { + return err + } else { + _field = &v + } + p.TopP = _field + return nil +} +func (p *LLMConfig) ReadField5(iprot thrift.TProtocol) error { + + var _field *float64 + if v, err := iprot.ReadDouble(); err != nil { + return err + } else { + _field = &v + } + p.PresencePenalty = _field + return nil +} +func (p *LLMConfig) ReadField6(iprot thrift.TProtocol) error { + + var _field *float64 + if v, err := iprot.ReadDouble(); err != nil { + return err + } else { + _field = &v + } + p.FrequencyPenalty = _field + return nil +} +func (p *LLMConfig) ReadField7(iprot thrift.TProtocol) error { + + var _field *bool + if v, err := iprot.ReadBool(); err != nil { + return err + } else { + _field = &v + } + p.JSONMode = _field + return nil +} + +func (p *LLMConfig) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("LLMConfig"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + if err = p.writeField5(oprot); err != nil { + fieldId = 5 + goto WriteFieldError + } + if err = p.writeField6(oprot); err != nil { + fieldId = 6 + goto WriteFieldError + } + if err = p.writeField7(oprot); err != nil { + fieldId = 7 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *LLMConfig) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetTemperature() { + if err = oprot.WriteFieldBegin("temperature", thrift.DOUBLE, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteDouble(*p.Temperature); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *LLMConfig) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetMaxTokens() { + if err = oprot.WriteFieldBegin("max_tokens", thrift.I32, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI32(*p.MaxTokens); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *LLMConfig) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetTopK() { + if err = oprot.WriteFieldBegin("top_k", thrift.I32, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI32(*p.TopK); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} +func (p *LLMConfig) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetTopP() { + if err = oprot.WriteFieldBegin("top_p", thrift.DOUBLE, 4); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteDouble(*p.TopP); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} +func (p *LLMConfig) writeField5(oprot thrift.TProtocol) (err error) { + if p.IsSetPresencePenalty() { + if err = oprot.WriteFieldBegin("presence_penalty", thrift.DOUBLE, 5); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteDouble(*p.PresencePenalty); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 5 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 5 end error: ", p), err) +} +func (p *LLMConfig) writeField6(oprot thrift.TProtocol) (err error) { + if p.IsSetFrequencyPenalty() { + if err = oprot.WriteFieldBegin("frequency_penalty", thrift.DOUBLE, 6); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteDouble(*p.FrequencyPenalty); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 6 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 6 end error: ", p), err) +} +func (p *LLMConfig) writeField7(oprot thrift.TProtocol) (err error) { + if p.IsSetJSONMode() { + if err = oprot.WriteFieldBegin("json_mode", thrift.BOOL, 7); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteBool(*p.JSONMode); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 7 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 7 end error: ", p), err) +} + +func (p *LLMConfig) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("LLMConfig(%+v)", *p) + +} + +func (p *LLMConfig) DeepEqual(ano *LLMConfig) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Temperature) { + return false + } + if !p.Field2DeepEqual(ano.MaxTokens) { + return false + } + if !p.Field3DeepEqual(ano.TopK) { + return false + } + if !p.Field4DeepEqual(ano.TopP) { + return false + } + if !p.Field5DeepEqual(ano.PresencePenalty) { + return false + } + if !p.Field6DeepEqual(ano.FrequencyPenalty) { + return false + } + if !p.Field7DeepEqual(ano.JSONMode) { + return false + } + return true +} + +func (p *LLMConfig) Field1DeepEqual(src *float64) bool { + + if p.Temperature == src { + return true + } else if p.Temperature == nil || src == nil { + return false + } + if *p.Temperature != *src { + return false + } + return true +} +func (p *LLMConfig) Field2DeepEqual(src *int32) bool { + + if p.MaxTokens == src { + return true + } else if p.MaxTokens == nil || src == nil { + return false + } + if *p.MaxTokens != *src { + return false + } + return true +} +func (p *LLMConfig) Field3DeepEqual(src *int32) bool { + + if p.TopK == src { + return true + } else if p.TopK == nil || src == nil { + return false + } + if *p.TopK != *src { + return false + } + return true +} +func (p *LLMConfig) Field4DeepEqual(src *float64) bool { + + if p.TopP == src { + return true + } else if p.TopP == nil || src == nil { + return false + } + if *p.TopP != *src { + return false + } + return true +} +func (p *LLMConfig) Field5DeepEqual(src *float64) bool { + + if p.PresencePenalty == src { + return true + } else if p.PresencePenalty == nil || src == nil { + return false + } + if *p.PresencePenalty != *src { + return false + } + return true +} +func (p *LLMConfig) Field6DeepEqual(src *float64) bool { + + if p.FrequencyPenalty == src { + return true + } else if p.FrequencyPenalty == nil || src == nil { + return false + } + if *p.FrequencyPenalty != *src { + return false + } + return true +} +func (p *LLMConfig) Field7DeepEqual(src *bool) bool { + + if p.JSONMode == src { + return true + } else if p.JSONMode == nil || src == nil { + return false + } + if *p.JSONMode != *src { + return false + } + return true +} + +type VariableVal struct { + Key *string `thrift:"key,1,optional" frugal:"1,optional,string" form:"key" json:"key,omitempty" query:"key"` + Value *string `thrift:"value,2,optional" frugal:"2,optional,string" form:"value" json:"value,omitempty" query:"value"` + PlaceholderMessages []*Message `thrift:"placeholder_messages,3,optional" frugal:"3,optional,list" form:"placeholder_messages" json:"placeholder_messages,omitempty" query:"placeholder_messages"` + MultiPartValues []*ContentPart `thrift:"multi_part_values,4,optional" frugal:"4,optional,list" form:"multi_part_values" json:"multi_part_values,omitempty" query:"multi_part_values"` +} + +func NewVariableVal() *VariableVal { + return &VariableVal{} +} + +func (p *VariableVal) InitDefault() { +} + +var VariableVal_Key_DEFAULT string + +func (p *VariableVal) GetKey() (v string) { + if p == nil { + return + } + if !p.IsSetKey() { + return VariableVal_Key_DEFAULT + } + return *p.Key +} + +var VariableVal_Value_DEFAULT string + +func (p *VariableVal) GetValue() (v string) { + if p == nil { + return + } + if !p.IsSetValue() { + return VariableVal_Value_DEFAULT + } + return *p.Value +} + +var VariableVal_PlaceholderMessages_DEFAULT []*Message + +func (p *VariableVal) GetPlaceholderMessages() (v []*Message) { + if p == nil { + return + } + if !p.IsSetPlaceholderMessages() { + return VariableVal_PlaceholderMessages_DEFAULT + } + return p.PlaceholderMessages +} + +var VariableVal_MultiPartValues_DEFAULT []*ContentPart + +func (p *VariableVal) GetMultiPartValues() (v []*ContentPart) { + if p == nil { + return + } + if !p.IsSetMultiPartValues() { + return VariableVal_MultiPartValues_DEFAULT + } + return p.MultiPartValues +} +func (p *VariableVal) SetKey(val *string) { + p.Key = val +} +func (p *VariableVal) SetValue(val *string) { + p.Value = val +} +func (p *VariableVal) SetPlaceholderMessages(val []*Message) { + p.PlaceholderMessages = val +} +func (p *VariableVal) SetMultiPartValues(val []*ContentPart) { + p.MultiPartValues = val +} + +var fieldIDToName_VariableVal = map[int16]string{ + 1: "key", + 2: "value", + 3: "placeholder_messages", + 4: "multi_part_values", +} + +func (p *VariableVal) IsSetKey() bool { + return p.Key != nil +} + +func (p *VariableVal) IsSetValue() bool { + return p.Value != nil +} + +func (p *VariableVal) IsSetPlaceholderMessages() bool { + return p.PlaceholderMessages != nil +} + +func (p *VariableVal) IsSetMultiPartValues() bool { + return p.MultiPartValues != nil +} + +func (p *VariableVal) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.STRING { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 3: + if fieldTypeId == thrift.LIST { + if err = p.ReadField3(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 4: + if fieldTypeId == thrift.LIST { + if err = p.ReadField4(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_VariableVal[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *VariableVal) ReadField1(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Key = _field + return nil +} +func (p *VariableVal) ReadField2(iprot thrift.TProtocol) error { + + var _field *string + if v, err := iprot.ReadString(); err != nil { + return err + } else { + _field = &v + } + p.Value = _field + return nil +} +func (p *VariableVal) ReadField3(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*Message, 0, size) + values := make([]Message, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.PlaceholderMessages = _field + return nil +} +func (p *VariableVal) ReadField4(iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin() + if err != nil { + return err + } + _field := make([]*ContentPart, 0, size) + values := make([]ContentPart, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + + if err := _elem.Read(iprot); err != nil { + return err + } + + _field = append(_field, _elem) + } + if err := iprot.ReadListEnd(); err != nil { + return err + } + p.MultiPartValues = _field + return nil +} + +func (p *VariableVal) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("VariableVal"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + if err = p.writeField3(oprot); err != nil { + fieldId = 3 + goto WriteFieldError + } + if err = p.writeField4(oprot); err != nil { + fieldId = 4 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *VariableVal) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetKey() { + if err = oprot.WriteFieldBegin("key", thrift.STRING, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Key); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *VariableVal) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetValue() { + if err = oprot.WriteFieldBegin("value", thrift.STRING, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteString(*p.Value); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} +func (p *VariableVal) writeField3(oprot thrift.TProtocol) (err error) { + if p.IsSetPlaceholderMessages() { + if err = oprot.WriteFieldBegin("placeholder_messages", thrift.LIST, 3); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.PlaceholderMessages)); err != nil { + return err + } + for _, v := range p.PlaceholderMessages { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 3 end error: ", p), err) +} +func (p *VariableVal) writeField4(oprot thrift.TProtocol) (err error) { + if p.IsSetMultiPartValues() { + if err = oprot.WriteFieldBegin("multi_part_values", thrift.LIST, 4); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteListBegin(thrift.STRUCT, len(p.MultiPartValues)); err != nil { + return err + } + for _, v := range p.MultiPartValues { + if err := v.Write(oprot); err != nil { + return err + } + } + if err := oprot.WriteListEnd(); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 4 end error: ", p), err) +} + +func (p *VariableVal) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("VariableVal(%+v)", *p) + +} + +func (p *VariableVal) DeepEqual(ano *VariableVal) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Key) { + return false + } + if !p.Field2DeepEqual(ano.Value) { + return false + } + if !p.Field3DeepEqual(ano.PlaceholderMessages) { + return false + } + if !p.Field4DeepEqual(ano.MultiPartValues) { + return false + } + return true +} + +func (p *VariableVal) Field1DeepEqual(src *string) bool { + + if p.Key == src { + return true + } else if p.Key == nil || src == nil { + return false + } + if strings.Compare(*p.Key, *src) != 0 { + return false + } + return true +} +func (p *VariableVal) Field2DeepEqual(src *string) bool { + + if p.Value == src { + return true + } else if p.Value == nil || src == nil { + return false + } + if strings.Compare(*p.Value, *src) != 0 { + return false + } + return true +} +func (p *VariableVal) Field3DeepEqual(src []*Message) bool { + + if len(p.PlaceholderMessages) != len(src) { + return false + } + for i, v := range p.PlaceholderMessages { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } + return true +} +func (p *VariableVal) Field4DeepEqual(src []*ContentPart) bool { + + if len(p.MultiPartValues) != len(src) { + return false + } + for i, v := range p.MultiPartValues { + _src := src[i] + if !v.DeepEqual(_src) { + return false + } + } + return true +} + +type TokenUsage struct { + InputTokens *int32 `thrift:"input_tokens,1,optional" frugal:"1,optional,i32" form:"input_tokens" json:"input_tokens,omitempty" query:"input_tokens"` + OutputTokens *int32 `thrift:"output_tokens,2,optional" frugal:"2,optional,i32" form:"output_tokens" json:"output_tokens,omitempty" query:"output_tokens"` +} + +func NewTokenUsage() *TokenUsage { + return &TokenUsage{} +} + +func (p *TokenUsage) InitDefault() { +} + +var TokenUsage_InputTokens_DEFAULT int32 + +func (p *TokenUsage) GetInputTokens() (v int32) { + if p == nil { + return + } + if !p.IsSetInputTokens() { + return TokenUsage_InputTokens_DEFAULT + } + return *p.InputTokens +} + +var TokenUsage_OutputTokens_DEFAULT int32 + +func (p *TokenUsage) GetOutputTokens() (v int32) { + if p == nil { + return + } + if !p.IsSetOutputTokens() { + return TokenUsage_OutputTokens_DEFAULT + } + return *p.OutputTokens +} +func (p *TokenUsage) SetInputTokens(val *int32) { + p.InputTokens = val +} +func (p *TokenUsage) SetOutputTokens(val *int32) { + p.OutputTokens = val +} + +var fieldIDToName_TokenUsage = map[int16]string{ + 1: "input_tokens", + 2: "output_tokens", +} + +func (p *TokenUsage) IsSetInputTokens() bool { + return p.InputTokens != nil +} + +func (p *TokenUsage) IsSetOutputTokens() bool { + return p.OutputTokens != nil +} + +func (p *TokenUsage) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + case 2: + if fieldTypeId == thrift.I32 { + if err = p.ReadField2(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_TokenUsage[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *TokenUsage) ReadField1(iprot thrift.TProtocol) error { + + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = &v + } + p.InputTokens = _field + return nil +} +func (p *TokenUsage) ReadField2(iprot thrift.TProtocol) error { + + var _field *int32 + if v, err := iprot.ReadI32(); err != nil { + return err + } else { + _field = &v + } + p.OutputTokens = _field + return nil +} + +func (p *TokenUsage) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("TokenUsage"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + if err = p.writeField2(oprot); err != nil { + fieldId = 2 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *TokenUsage) writeField1(oprot thrift.TProtocol) (err error) { + if p.IsSetInputTokens() { + if err = oprot.WriteFieldBegin("input_tokens", thrift.I32, 1); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI32(*p.InputTokens); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} +func (p *TokenUsage) writeField2(oprot thrift.TProtocol) (err error) { + if p.IsSetOutputTokens() { + if err = oprot.WriteFieldBegin("output_tokens", thrift.I32, 2); err != nil { + goto WriteFieldBeginError + } + if err := oprot.WriteI32(*p.OutputTokens); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 2 end error: ", p), err) +} + +func (p *TokenUsage) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("TokenUsage(%+v)", *p) + +} + +func (p *TokenUsage) DeepEqual(ano *TokenUsage) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.InputTokens) { + return false + } + if !p.Field2DeepEqual(ano.OutputTokens) { + return false + } + return true +} + +func (p *TokenUsage) Field1DeepEqual(src *int32) bool { + + if p.InputTokens == src { + return true + } else if p.InputTokens == nil || src == nil { + return false + } + if *p.InputTokens != *src { + return false + } + return true +} +func (p *TokenUsage) Field2DeepEqual(src *int32) bool { + + if p.OutputTokens == src { + return true + } else if p.OutputTokens == nil || src == nil { + return false + } + if *p.OutputTokens != *src { + return false + } + return true +} + +type PromptOpenAPIService interface { + BatchGetPromptByPromptKey(ctx context.Context, req *BatchGetPromptByPromptKeyRequest) (r *BatchGetPromptByPromptKeyResponse, err error) + + Execute(ctx context.Context, req *ExecuteRequest) (r *ExecuteResponse, err error) + + ExecuteStreaming(ctx context.Context, req *ExecuteRequest, stream PromptOpenAPIService_ExecuteStreamingServer) (err error) +} + +type PromptOpenAPIServiceClient struct { + c thrift.TClient +} + +func NewPromptOpenAPIServiceClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *PromptOpenAPIServiceClient { + return &PromptOpenAPIServiceClient{ + c: thrift.NewTStandardClient(f.GetProtocol(t), f.GetProtocol(t)), + } +} + +func NewPromptOpenAPIServiceClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *PromptOpenAPIServiceClient { + return &PromptOpenAPIServiceClient{ + c: thrift.NewTStandardClient(iprot, oprot), + } +} + +func NewPromptOpenAPIServiceClient(c thrift.TClient) *PromptOpenAPIServiceClient { + return &PromptOpenAPIServiceClient{ + c: c, + } +} + +func (p *PromptOpenAPIServiceClient) Client_() thrift.TClient { + return p.c +} + +func (p *PromptOpenAPIServiceClient) BatchGetPromptByPromptKey(ctx context.Context, req *BatchGetPromptByPromptKeyRequest) (r *BatchGetPromptByPromptKeyResponse, err error) { + var _args PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs + _args.Req = req + var _result PromptOpenAPIServiceBatchGetPromptByPromptKeyResult + if err = p.Client_().Call(ctx, "BatchGetPromptByPromptKey", &_args, &_result); err != nil { + return + } + return _result.GetSuccess(), nil +} +func (p *PromptOpenAPIServiceClient) Execute(ctx context.Context, req *ExecuteRequest) (r *ExecuteResponse, err error) { + var _args PromptOpenAPIServiceExecuteArgs + _args.Req = req + var _result PromptOpenAPIServiceExecuteResult + if err = p.Client_().Call(ctx, "Execute", &_args, &_result); err != nil { + return + } + return _result.GetSuccess(), nil +} +func (p *PromptOpenAPIServiceClient) ExecuteStreaming(ctx context.Context, req *ExecuteRequest, stream PromptOpenAPIService_ExecuteStreamingServer) (err error) { + panic("streaming method PromptOpenAPIService.ExecuteStreaming(mode = server) not available, please use Kitex Thrift Streaming Client.") +} + +type PromptOpenAPIService_ExecuteStreamingServer streaming.ServerStreamingServer[ExecuteStreamingResponse] + +type PromptOpenAPIServiceProcessor struct { + processorMap map[string]thrift.TProcessorFunction + handler PromptOpenAPIService +} + +func (p *PromptOpenAPIServiceProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { + p.processorMap[key] = processor +} + +func (p *PromptOpenAPIServiceProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { + processor, ok = p.processorMap[key] + return processor, ok +} + +func (p *PromptOpenAPIServiceProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { + return p.processorMap +} + +func NewPromptOpenAPIServiceProcessor(handler PromptOpenAPIService) *PromptOpenAPIServiceProcessor { + self := &PromptOpenAPIServiceProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} + self.AddToProcessorMap("BatchGetPromptByPromptKey", &promptOpenAPIServiceProcessorBatchGetPromptByPromptKey{handler: handler}) + self.AddToProcessorMap("Execute", &promptOpenAPIServiceProcessorExecute{handler: handler}) + self.AddToProcessorMap("ExecuteStreaming", &promptOpenAPIServiceProcessorExecuteStreaming{handler: handler}) + return self +} +func (p *PromptOpenAPIServiceProcessor) Process(ctx context.Context, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + name, _, seqId, err := iprot.ReadMessageBegin() + if err != nil { + return false, err + } + if processor, ok := p.GetProcessorFunction(name); ok { + return processor.Process(ctx, seqId, iprot, oprot) + } + iprot.Skip(thrift.STRUCT) + iprot.ReadMessageEnd() + x := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) + oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return false, x +} + +type promptOpenAPIServiceProcessorBatchGetPromptByPromptKey struct { + handler PromptOpenAPIService +} + +func (p *promptOpenAPIServiceProcessorBatchGetPromptByPromptKey) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + args := PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs{} + if err = args.Read(iprot); err != nil { + iprot.ReadMessageEnd() + x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) + oprot.WriteMessageBegin("BatchGetPromptByPromptKey", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return false, err + } + + iprot.ReadMessageEnd() + var err2 error + result := PromptOpenAPIServiceBatchGetPromptByPromptKeyResult{} + var retval *BatchGetPromptByPromptKeyResponse + if retval, err2 = p.handler.BatchGetPromptByPromptKey(ctx, args.Req); err2 != nil { + x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing BatchGetPromptByPromptKey: "+err2.Error()) + oprot.WriteMessageBegin("BatchGetPromptByPromptKey", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return true, err2 + } else { + result.Success = retval + } + if err2 = oprot.WriteMessageBegin("BatchGetPromptByPromptKey", thrift.REPLY, seqId); err2 != nil { + err = err2 + } + if err2 = result.Write(oprot); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.Flush(ctx); err == nil && err2 != nil { + err = err2 + } + if err != nil { + return + } + return true, err +} + +type promptOpenAPIServiceProcessorExecute struct { + handler PromptOpenAPIService +} + +func (p *promptOpenAPIServiceProcessorExecute) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + args := PromptOpenAPIServiceExecuteArgs{} + if err = args.Read(iprot); err != nil { + iprot.ReadMessageEnd() + x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) + oprot.WriteMessageBegin("Execute", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return false, err + } + + iprot.ReadMessageEnd() + var err2 error + result := PromptOpenAPIServiceExecuteResult{} + var retval *ExecuteResponse + if retval, err2 = p.handler.Execute(ctx, args.Req); err2 != nil { + x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing Execute: "+err2.Error()) + oprot.WriteMessageBegin("Execute", thrift.EXCEPTION, seqId) + x.Write(oprot) + oprot.WriteMessageEnd() + oprot.Flush(ctx) + return true, err2 + } else { + result.Success = retval + } + if err2 = oprot.WriteMessageBegin("Execute", thrift.REPLY, seqId); err2 != nil { + err = err2 + } + if err2 = result.Write(oprot); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { + err = err2 + } + if err2 = oprot.Flush(ctx); err == nil && err2 != nil { + err = err2 + } + if err != nil { + return + } + return true, err +} + +type promptOpenAPIServiceProcessorExecuteStreaming struct { + handler PromptOpenAPIService +} + +func (p *promptOpenAPIServiceProcessorExecuteStreaming) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + panic("streaming method PromptOpenAPIService.ExecuteStreaming(mode = server) not available, please use Kitex Thrift Streaming Client.") +} + +type PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs struct { + Req *BatchGetPromptByPromptKeyRequest `thrift:"req,1" frugal:"1,default,BatchGetPromptByPromptKeyRequest"` +} + +func NewPromptOpenAPIServiceBatchGetPromptByPromptKeyArgs() *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs { + return &PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs{} +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) InitDefault() { +} + +var PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs_Req_DEFAULT *BatchGetPromptByPromptKeyRequest + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) GetReq() (v *BatchGetPromptByPromptKeyRequest) { + if p == nil { + return + } + if !p.IsSetReq() { + return PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs_Req_DEFAULT + } + return p.Req +} +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) SetReq(val *BatchGetPromptByPromptKeyRequest) { + p.Req = val +} + +var fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs = map[int16]string{ + 1: "req", +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) IsSetReq() bool { + return p.Req != nil +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) ReadField1(iprot thrift.TProtocol) error { + _field := NewBatchGetPromptByPromptKeyRequest() + if err := _field.Read(iprot); err != nil { + return err + } + p.Req = _field + return nil +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("BatchGetPromptByPromptKey_args"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("req", thrift.STRUCT, 1); err != nil { + goto WriteFieldBeginError + } + if err := p.Req.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs(%+v)", *p) + +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) DeepEqual(ano *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Req) { + return false + } + return true +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Field1DeepEqual(src *BatchGetPromptByPromptKeyRequest) bool { + + if !p.Req.DeepEqual(src) { + return false + } + return true +} + +type PromptOpenAPIServiceBatchGetPromptByPromptKeyResult struct { + Success *BatchGetPromptByPromptKeyResponse `thrift:"success,0,optional" frugal:"0,optional,BatchGetPromptByPromptKeyResponse"` +} + +func NewPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult { + return &PromptOpenAPIServiceBatchGetPromptByPromptKeyResult{} +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) InitDefault() { +} + +var PromptOpenAPIServiceBatchGetPromptByPromptKeyResult_Success_DEFAULT *BatchGetPromptByPromptKeyResponse + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) GetSuccess() (v *BatchGetPromptByPromptKeyResponse) { + if p == nil { + return + } + if !p.IsSetSuccess() { + return PromptOpenAPIServiceBatchGetPromptByPromptKeyResult_Success_DEFAULT + } + return p.Success +} +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) SetSuccess(x interface{}) { + p.Success = x.(*BatchGetPromptByPromptKeyResponse) +} + +var fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyResult = map[int16]string{ + 0: "success", +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) IsSetSuccess() bool { + return p.Success != nil +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 0: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField0(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyResult[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) ReadField0(iprot thrift.TProtocol) error { + _field := NewBatchGetPromptByPromptKeyResponse() + if err := _field.Read(iprot); err != nil { + return err + } + p.Success = _field + return nil +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("BatchGetPromptByPromptKey_result"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField0(oprot); err != nil { + fieldId = 0 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) writeField0(oprot thrift.TProtocol) (err error) { + if p.IsSetSuccess() { + if err = oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { + goto WriteFieldBeginError + } + if err := p.Success.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 0 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 0 end error: ", p), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("PromptOpenAPIServiceBatchGetPromptByPromptKeyResult(%+v)", *p) + +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) DeepEqual(ano *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field0DeepEqual(ano.Success) { + return false + } + return true +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) Field0DeepEqual(src *BatchGetPromptByPromptKeyResponse) bool { + + if !p.Success.DeepEqual(src) { + return false + } + return true +} + +type PromptOpenAPIServiceExecuteArgs struct { + Req *ExecuteRequest `thrift:"req,1" frugal:"1,default,ExecuteRequest"` +} + +func NewPromptOpenAPIServiceExecuteArgs() *PromptOpenAPIServiceExecuteArgs { + return &PromptOpenAPIServiceExecuteArgs{} +} + +func (p *PromptOpenAPIServiceExecuteArgs) InitDefault() { +} + +var PromptOpenAPIServiceExecuteArgs_Req_DEFAULT *ExecuteRequest + +func (p *PromptOpenAPIServiceExecuteArgs) GetReq() (v *ExecuteRequest) { + if p == nil { + return + } + if !p.IsSetReq() { + return PromptOpenAPIServiceExecuteArgs_Req_DEFAULT + } + return p.Req +} +func (p *PromptOpenAPIServiceExecuteArgs) SetReq(val *ExecuteRequest) { + p.Req = val +} + +var fieldIDToName_PromptOpenAPIServiceExecuteArgs = map[int16]string{ + 1: "req", +} + +func (p *PromptOpenAPIServiceExecuteArgs) IsSetReq() bool { + return p.Req != nil +} + +func (p *PromptOpenAPIServiceExecuteArgs) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError + } + + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + + switch fieldId { + case 1: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField1(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } + + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteArgs[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) + +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) +} + +func (p *PromptOpenAPIServiceExecuteArgs) ReadField1(iprot thrift.TProtocol) error { + _field := NewExecuteRequest() + if err := _field.Read(iprot); err != nil { + return err + } + p.Req = _field + return nil +} + +func (p *PromptOpenAPIServiceExecuteArgs) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("Execute_args"); err != nil { + goto WriteStructBeginError + } + if p != nil { + if err = p.writeField1(oprot); err != nil { + fieldId = 1 + goto WriteFieldError + } + } + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) +} + +func (p *PromptOpenAPIServiceExecuteArgs) writeField1(oprot thrift.TProtocol) (err error) { + if err = oprot.WriteFieldBegin("req", thrift.STRUCT, 1); err != nil { + goto WriteFieldBeginError + } + if err := p.Req.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) +} + +func (p *PromptOpenAPIServiceExecuteArgs) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("PromptOpenAPIServiceExecuteArgs(%+v)", *p) + +} + +func (p *PromptOpenAPIServiceExecuteArgs) DeepEqual(ano *PromptOpenAPIServiceExecuteArgs) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false + } + if !p.Field1DeepEqual(ano.Req) { + return false + } + return true +} + +func (p *PromptOpenAPIServiceExecuteArgs) Field1DeepEqual(src *ExecuteRequest) bool { + + if !p.Req.DeepEqual(src) { return false } return true } -type PromptOpenAPIService interface { - BatchGetPromptByPromptKey(ctx context.Context, req *BatchGetPromptByPromptKeyRequest) (r *BatchGetPromptByPromptKeyResponse, err error) +type PromptOpenAPIServiceExecuteResult struct { + Success *ExecuteResponse `thrift:"success,0,optional" frugal:"0,optional,ExecuteResponse"` } -type PromptOpenAPIServiceClient struct { - c thrift.TClient +func NewPromptOpenAPIServiceExecuteResult() *PromptOpenAPIServiceExecuteResult { + return &PromptOpenAPIServiceExecuteResult{} } -func NewPromptOpenAPIServiceClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *PromptOpenAPIServiceClient { - return &PromptOpenAPIServiceClient{ - c: thrift.NewTStandardClient(f.GetProtocol(t), f.GetProtocol(t)), - } +func (p *PromptOpenAPIServiceExecuteResult) InitDefault() { } -func NewPromptOpenAPIServiceClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *PromptOpenAPIServiceClient { - return &PromptOpenAPIServiceClient{ - c: thrift.NewTStandardClient(iprot, oprot), +var PromptOpenAPIServiceExecuteResult_Success_DEFAULT *ExecuteResponse + +func (p *PromptOpenAPIServiceExecuteResult) GetSuccess() (v *ExecuteResponse) { + if p == nil { + return + } + if !p.IsSetSuccess() { + return PromptOpenAPIServiceExecuteResult_Success_DEFAULT } + return p.Success +} +func (p *PromptOpenAPIServiceExecuteResult) SetSuccess(x interface{}) { + p.Success = x.(*ExecuteResponse) } -func NewPromptOpenAPIServiceClient(c thrift.TClient) *PromptOpenAPIServiceClient { - return &PromptOpenAPIServiceClient{ - c: c, - } +var fieldIDToName_PromptOpenAPIServiceExecuteResult = map[int16]string{ + 0: "success", } -func (p *PromptOpenAPIServiceClient) Client_() thrift.TClient { - return p.c +func (p *PromptOpenAPIServiceExecuteResult) IsSetSuccess() bool { + return p.Success != nil } -func (p *PromptOpenAPIServiceClient) BatchGetPromptByPromptKey(ctx context.Context, req *BatchGetPromptByPromptKeyRequest) (r *BatchGetPromptByPromptKeyResponse, err error) { - var _args PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs - _args.Req = req - var _result PromptOpenAPIServiceBatchGetPromptByPromptKeyResult - if err = p.Client_().Call(ctx, "BatchGetPromptByPromptKey", &_args, &_result); err != nil { - return +func (p *PromptOpenAPIServiceExecuteResult) Read(iprot thrift.TProtocol) (err error) { + var fieldTypeId thrift.TType + var fieldId int16 + + if _, err = iprot.ReadStructBegin(); err != nil { + goto ReadStructBeginError } - return _result.GetSuccess(), nil -} -type PromptOpenAPIServiceProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler PromptOpenAPIService -} + for { + _, fieldTypeId, fieldId, err = iprot.ReadFieldBegin() + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } -func (p *PromptOpenAPIServiceProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} + switch fieldId { + case 0: + if fieldTypeId == thrift.STRUCT { + if err = p.ReadField0(iprot); err != nil { + goto ReadFieldError + } + } else if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + default: + if err = iprot.Skip(fieldTypeId); err != nil { + goto SkipFieldError + } + } + if err = iprot.ReadFieldEnd(); err != nil { + goto ReadFieldEndError + } + } + if err = iprot.ReadStructEnd(); err != nil { + goto ReadStructEndError + } -func (p *PromptOpenAPIServiceProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} + return nil +ReadStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T read struct begin error: ", p), err) +ReadFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteResult[fieldId]), err) +SkipFieldError: + return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) -func (p *PromptOpenAPIServiceProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap +ReadFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T read field end error", p), err) +ReadStructEndError: + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func NewPromptOpenAPIServiceProcessor(handler PromptOpenAPIService) *PromptOpenAPIServiceProcessor { - self := &PromptOpenAPIServiceProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} - self.AddToProcessorMap("BatchGetPromptByPromptKey", &promptOpenAPIServiceProcessorBatchGetPromptByPromptKey{handler: handler}) - return self +func (p *PromptOpenAPIServiceExecuteResult) ReadField0(iprot thrift.TProtocol) error { + _field := NewExecuteResponse() + if err := _field.Read(iprot); err != nil { + return err + } + p.Success = _field + return nil } -func (p *PromptOpenAPIServiceProcessor) Process(ctx context.Context, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return false, err + +func (p *PromptOpenAPIServiceExecuteResult) Write(oprot thrift.TProtocol) (err error) { + var fieldId int16 + if err = oprot.WriteStructBegin("Execute_result"); err != nil { + goto WriteStructBeginError } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(ctx, seqId, iprot, oprot) + if p != nil { + if err = p.writeField0(oprot); err != nil { + fieldId = 0 + goto WriteFieldError + } } - iprot.Skip(thrift.STRUCT) - iprot.ReadMessageEnd() - x := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) - oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush(ctx) - return false, x + if err = oprot.WriteFieldStop(); err != nil { + goto WriteFieldStopError + } + if err = oprot.WriteStructEnd(); err != nil { + goto WriteStructEndError + } + return nil +WriteStructBeginError: + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) +WriteFieldError: + return thrift.PrependError(fmt.Sprintf("%T write field %d error: ", p, fieldId), err) +WriteFieldStopError: + return thrift.PrependError(fmt.Sprintf("%T write field stop error: ", p), err) +WriteStructEndError: + return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -type promptOpenAPIServiceProcessorBatchGetPromptByPromptKey struct { - handler PromptOpenAPIService +func (p *PromptOpenAPIServiceExecuteResult) writeField0(oprot thrift.TProtocol) (err error) { + if p.IsSetSuccess() { + if err = oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { + goto WriteFieldBeginError + } + if err := p.Success.Write(oprot); err != nil { + return err + } + if err = oprot.WriteFieldEnd(); err != nil { + goto WriteFieldEndError + } + } + return nil +WriteFieldBeginError: + return thrift.PrependError(fmt.Sprintf("%T write field 0 begin error: ", p), err) +WriteFieldEndError: + return thrift.PrependError(fmt.Sprintf("%T write field 0 end error: ", p), err) } -func (p *promptOpenAPIServiceProcessorBatchGetPromptByPromptKey) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) - oprot.WriteMessageBegin("BatchGetPromptByPromptKey", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush(ctx) - return false, err +func (p *PromptOpenAPIServiceExecuteResult) String() string { + if p == nil { + return "" } + return fmt.Sprintf("PromptOpenAPIServiceExecuteResult(%+v)", *p) - iprot.ReadMessageEnd() - var err2 error - result := PromptOpenAPIServiceBatchGetPromptByPromptKeyResult{} - var retval *BatchGetPromptByPromptKeyResponse - if retval, err2 = p.handler.BatchGetPromptByPromptKey(ctx, args.Req); err2 != nil { - x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing BatchGetPromptByPromptKey: "+err2.Error()) - oprot.WriteMessageBegin("BatchGetPromptByPromptKey", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush(ctx) - return true, err2 - } else { - result.Success = retval - } - if err2 = oprot.WriteMessageBegin("BatchGetPromptByPromptKey", thrift.REPLY, seqId); err2 != nil { - err = err2 - } - if err2 = result.Write(oprot); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { - err = err2 +} + +func (p *PromptOpenAPIServiceExecuteResult) DeepEqual(ano *PromptOpenAPIServiceExecuteResult) bool { + if p == ano { + return true + } else if p == nil || ano == nil { + return false } - if err2 = oprot.Flush(ctx); err == nil && err2 != nil { - err = err2 + if !p.Field0DeepEqual(ano.Success) { + return false } - if err != nil { - return + return true +} + +func (p *PromptOpenAPIServiceExecuteResult) Field0DeepEqual(src *ExecuteResponse) bool { + + if !p.Success.DeepEqual(src) { + return false } - return true, err + return true } -type PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs struct { - Req *BatchGetPromptByPromptKeyRequest `thrift:"req,1" frugal:"1,default,BatchGetPromptByPromptKeyRequest"` +type PromptOpenAPIServiceExecuteStreamingArgs struct { + Req *ExecuteRequest `thrift:"req,1" frugal:"1,default,ExecuteRequest"` } -func NewPromptOpenAPIServiceBatchGetPromptByPromptKeyArgs() *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs { - return &PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs{} +func NewPromptOpenAPIServiceExecuteStreamingArgs() *PromptOpenAPIServiceExecuteStreamingArgs { + return &PromptOpenAPIServiceExecuteStreamingArgs{} } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) InitDefault() { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) InitDefault() { } -var PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs_Req_DEFAULT *BatchGetPromptByPromptKeyRequest +var PromptOpenAPIServiceExecuteStreamingArgs_Req_DEFAULT *ExecuteRequest -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) GetReq() (v *BatchGetPromptByPromptKeyRequest) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) GetReq() (v *ExecuteRequest) { if p == nil { return } if !p.IsSetReq() { - return PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs_Req_DEFAULT + return PromptOpenAPIServiceExecuteStreamingArgs_Req_DEFAULT } return p.Req } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) SetReq(val *BatchGetPromptByPromptKeyRequest) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) SetReq(val *ExecuteRequest) { p.Req = val } -var fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs = map[int16]string{ +var fieldIDToName_PromptOpenAPIServiceExecuteStreamingArgs = map[int16]string{ 1: "req", } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) IsSetReq() bool { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) IsSetReq() bool { return p.Req != nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Read(iprot thrift.TProtocol) (err error) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -5191,7 +9916,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteStreamingArgs[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -5201,8 +9926,8 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) ReadField1(iprot thrift.TProtocol) error { - _field := NewBatchGetPromptByPromptKeyRequest() +func (p *PromptOpenAPIServiceExecuteStreamingArgs) ReadField1(iprot thrift.TProtocol) error { + _field := NewExecuteRequest() if err := _field.Read(iprot); err != nil { return err } @@ -5210,9 +9935,9 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) ReadField1(iprot thr return nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Write(oprot thrift.TProtocol) (err error) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("BatchGetPromptByPromptKey_args"); err != nil { + if err = oprot.WriteStructBegin("ExecuteStreaming_args"); err != nil { goto WriteStructBeginError } if p != nil { @@ -5238,7 +9963,7 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) writeField1(oprot thrift.TProtocol) (err error) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) writeField1(oprot thrift.TProtocol) (err error) { if err = oprot.WriteFieldBegin("req", thrift.STRUCT, 1); err != nil { goto WriteFieldBeginError } @@ -5255,15 +9980,15 @@ WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 1 end error: ", p), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) String() string { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) String() string { if p == nil { return "" } - return fmt.Sprintf("PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs(%+v)", *p) + return fmt.Sprintf("PromptOpenAPIServiceExecuteStreamingArgs(%+v)", *p) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) DeepEqual(ano *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) bool { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) DeepEqual(ano *PromptOpenAPIServiceExecuteStreamingArgs) bool { if p == ano { return true } else if p == nil || ano == nil { @@ -5275,7 +10000,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) DeepEqual(ano *Promp return true } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Field1DeepEqual(src *BatchGetPromptByPromptKeyRequest) bool { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) Field1DeepEqual(src *ExecuteRequest) bool { if !p.Req.DeepEqual(src) { return false @@ -5283,41 +10008,41 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) Field1DeepEqual(src return true } -type PromptOpenAPIServiceBatchGetPromptByPromptKeyResult struct { - Success *BatchGetPromptByPromptKeyResponse `thrift:"success,0,optional" frugal:"0,optional,BatchGetPromptByPromptKeyResponse"` +type PromptOpenAPIServiceExecuteStreamingResult struct { + Success *ExecuteStreamingResponse `thrift:"success,0,optional" frugal:"0,optional,ExecuteStreamingResponse"` } -func NewPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult { - return &PromptOpenAPIServiceBatchGetPromptByPromptKeyResult{} +func NewPromptOpenAPIServiceExecuteStreamingResult() *PromptOpenAPIServiceExecuteStreamingResult { + return &PromptOpenAPIServiceExecuteStreamingResult{} } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) InitDefault() { +func (p *PromptOpenAPIServiceExecuteStreamingResult) InitDefault() { } -var PromptOpenAPIServiceBatchGetPromptByPromptKeyResult_Success_DEFAULT *BatchGetPromptByPromptKeyResponse +var PromptOpenAPIServiceExecuteStreamingResult_Success_DEFAULT *ExecuteStreamingResponse -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) GetSuccess() (v *BatchGetPromptByPromptKeyResponse) { +func (p *PromptOpenAPIServiceExecuteStreamingResult) GetSuccess() (v *ExecuteStreamingResponse) { if p == nil { return } if !p.IsSetSuccess() { - return PromptOpenAPIServiceBatchGetPromptByPromptKeyResult_Success_DEFAULT + return PromptOpenAPIServiceExecuteStreamingResult_Success_DEFAULT } return p.Success } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) SetSuccess(x interface{}) { - p.Success = x.(*BatchGetPromptByPromptKeyResponse) +func (p *PromptOpenAPIServiceExecuteStreamingResult) SetSuccess(x interface{}) { + p.Success = x.(*ExecuteStreamingResponse) } -var fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyResult = map[int16]string{ +var fieldIDToName_PromptOpenAPIServiceExecuteStreamingResult = map[int16]string{ 0: "success", } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) IsSetSuccess() bool { +func (p *PromptOpenAPIServiceExecuteStreamingResult) IsSetSuccess() bool { return p.Success != nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) Read(iprot thrift.TProtocol) (err error) { +func (p *PromptOpenAPIServiceExecuteStreamingResult) Read(iprot thrift.TProtocol) (err error) { var fieldTypeId thrift.TType var fieldId int16 @@ -5362,7 +10087,7 @@ ReadStructBeginError: ReadFieldBeginError: return thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyResult[fieldId]), err) + return thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteStreamingResult[fieldId]), err) SkipFieldError: return thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) @@ -5372,8 +10097,8 @@ ReadStructEndError: return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) ReadField0(iprot thrift.TProtocol) error { - _field := NewBatchGetPromptByPromptKeyResponse() +func (p *PromptOpenAPIServiceExecuteStreamingResult) ReadField0(iprot thrift.TProtocol) error { + _field := NewExecuteStreamingResponse() if err := _field.Read(iprot); err != nil { return err } @@ -5381,9 +10106,9 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) ReadField0(iprot t return nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) Write(oprot thrift.TProtocol) (err error) { +func (p *PromptOpenAPIServiceExecuteStreamingResult) Write(oprot thrift.TProtocol) (err error) { var fieldId int16 - if err = oprot.WriteStructBegin("BatchGetPromptByPromptKey_result"); err != nil { + if err = oprot.WriteStructBegin("ExecuteStreaming_result"); err != nil { goto WriteStructBeginError } if p != nil { @@ -5409,7 +10134,7 @@ WriteStructEndError: return thrift.PrependError(fmt.Sprintf("%T write struct end error: ", p), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) writeField0(oprot thrift.TProtocol) (err error) { +func (p *PromptOpenAPIServiceExecuteStreamingResult) writeField0(oprot thrift.TProtocol) (err error) { if p.IsSetSuccess() { if err = oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { goto WriteFieldBeginError @@ -5428,15 +10153,15 @@ WriteFieldEndError: return thrift.PrependError(fmt.Sprintf("%T write field 0 end error: ", p), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) String() string { +func (p *PromptOpenAPIServiceExecuteStreamingResult) String() string { if p == nil { return "" } - return fmt.Sprintf("PromptOpenAPIServiceBatchGetPromptByPromptKeyResult(%+v)", *p) + return fmt.Sprintf("PromptOpenAPIServiceExecuteStreamingResult(%+v)", *p) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) DeepEqual(ano *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) bool { +func (p *PromptOpenAPIServiceExecuteStreamingResult) DeepEqual(ano *PromptOpenAPIServiceExecuteStreamingResult) bool { if p == ano { return true } else if p == nil || ano == nil { @@ -5448,7 +10173,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) DeepEqual(ano *Pro return true } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) Field0DeepEqual(src *BatchGetPromptByPromptKeyResponse) bool { +func (p *PromptOpenAPIServiceExecuteStreamingResult) Field0DeepEqual(src *ExecuteStreamingResponse) bool { if !p.Success.DeepEqual(src) { return false diff --git a/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi_validator.go b/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi_validator.go index bba0690d3..92804fba6 100644 --- a/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi_validator.go +++ b/backend/kitex_gen/coze/loop/prompt/openapi/coze.loop.prompt.openapi_validator.go @@ -45,6 +45,71 @@ func (p *BatchGetPromptByPromptKeyResponse) IsValid() error { func (p *PromptResultData) IsValid() error { return nil } +func (p *ExecuteRequest) IsValid() error { + if p.PromptIdentifier != nil { + if err := p.PromptIdentifier.IsValid(); err != nil { + return fmt.Errorf("field PromptIdentifier not valid, %w", err) + } + } + if p.Base != nil { + if err := p.Base.IsValid(); err != nil { + return fmt.Errorf("field Base not valid, %w", err) + } + } + return nil +} +func (p *ExecuteResponse) IsValid() error { + if p.Data != nil { + if err := p.Data.IsValid(); err != nil { + return fmt.Errorf("field Data not valid, %w", err) + } + } + if p.BaseResp != nil { + if err := p.BaseResp.IsValid(); err != nil { + return fmt.Errorf("field BaseResp not valid, %w", err) + } + } + return nil +} +func (p *ExecuteData) IsValid() error { + if p.Message != nil { + if err := p.Message.IsValid(); err != nil { + return fmt.Errorf("field Message not valid, %w", err) + } + } + if p.Usage != nil { + if err := p.Usage.IsValid(); err != nil { + return fmt.Errorf("field Usage not valid, %w", err) + } + } + return nil +} +func (p *ExecuteStreamingResponse) IsValid() error { + if p.Data != nil { + if err := p.Data.IsValid(); err != nil { + return fmt.Errorf("field Data not valid, %w", err) + } + } + if p.BaseResp != nil { + if err := p.BaseResp.IsValid(); err != nil { + return fmt.Errorf("field BaseResp not valid, %w", err) + } + } + return nil +} +func (p *ExecuteStreamingData) IsValid() error { + if p.Message != nil { + if err := p.Message.IsValid(); err != nil { + return fmt.Errorf("field Message not valid, %w", err) + } + } + if p.Usage != nil { + if err := p.Usage.IsValid(); err != nil { + return fmt.Errorf("field Usage not valid, %w", err) + } + } + return nil +} func (p *PromptQuery) IsValid() error { return nil } @@ -105,6 +170,23 @@ func (p *Tool) IsValid() error { func (p *Function) IsValid() error { return nil } +func (p *ToolCall) IsValid() error { + if p.FunctionCall != nil { + if err := p.FunctionCall.IsValid(); err != nil { + return fmt.Errorf("field FunctionCall not valid, %w", err) + } + } + return nil +} +func (p *FunctionCall) IsValid() error { + return nil +} func (p *LLMConfig) IsValid() error { return nil } +func (p *VariableVal) IsValid() error { + return nil +} +func (p *TokenUsage) IsValid() error { + return nil +} diff --git a/backend/kitex_gen/coze/loop/prompt/openapi/k-coze.loop.prompt.openapi.go b/backend/kitex_gen/coze/loop/prompt/openapi/k-coze.loop.prompt.openapi.go index 7c6197c0e..878e2b3a9 100644 --- a/backend/kitex_gen/coze/loop/prompt/openapi/k-coze.loop.prompt.openapi.go +++ b/backend/kitex_gen/coze/loop/prompt/openapi/k-coze.loop.prompt.openapi.go @@ -718,7 +718,7 @@ func (p *PromptResultData) DeepCopy(s interface{}) error { return nil } -func (p *PromptQuery) FastRead(buf []byte) (int, error) { +func (p *ExecuteRequest) FastRead(buf []byte) (int, error) { var err error var offset int @@ -736,7 +736,7 @@ func (p *PromptQuery) FastRead(buf []byte) (int, error) { } switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.I64 { l, err = p.FastReadField1(buf[offset:]) offset += l if err != nil { @@ -750,7 +750,7 @@ func (p *PromptQuery) FastRead(buf []byte) (int, error) { } } case 2: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.STRUCT { l, err = p.FastReadField2(buf[offset:]) offset += l if err != nil { @@ -763,9 +763,37 @@ func (p *PromptQuery) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - case 3: - if fieldTypeId == thrift.STRING { - l, err = p.FastReadField3(buf[offset:]) + case 10: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField10(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 11: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField11(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 255: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField255(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -790,167 +818,304 @@ func (p *PromptQuery) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptQuery[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteRequest[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *PromptQuery) FastReadField1(buf []byte) (int, error) { +func (p *ExecuteRequest) FastReadField1(buf []byte) (int, error) { offset := 0 - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + var _field *int64 + if v, l, err := thrift.Binary.ReadI64(buf[offset:]); err != nil { return offset, err } else { offset += l _field = &v } - p.PromptKey = _field + p.WorkspaceID = _field return offset, nil } -func (p *PromptQuery) FastReadField2(buf []byte) (int, error) { +func (p *ExecuteRequest) FastReadField2(buf []byte) (int, error) { offset := 0 - - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + _field := NewPromptQuery() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.Version = _field + p.PromptIdentifier = _field return offset, nil } -func (p *PromptQuery) FastReadField3(buf []byte) (int, error) { +func (p *ExecuteRequest) FastReadField10(buf []byte) (int, error) { offset := 0 - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*VariableVal, 0, size) + values := make([]VariableVal, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.VariableVals = _field + return offset, nil +} + +func (p *ExecuteRequest) FastReadField11(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*Message, 0, size) + values := make([]Message, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.Messages = _field + return offset, nil +} + +func (p *ExecuteRequest) FastReadField255(buf []byte) (int, error) { + offset := 0 + _field := base.NewBase() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.Label = _field + p.Base = _field return offset, nil } -func (p *PromptQuery) FastWrite(buf []byte) int { +func (p *ExecuteRequest) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *PromptQuery) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteRequest) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) - offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField10(buf[offset:], w) + offset += p.fastWriteField11(buf[offset:], w) + offset += p.fastWriteField255(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *PromptQuery) BLength() int { +func (p *ExecuteRequest) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() - l += p.field3Length() + l += p.field10Length() + l += p.field11Length() + l += p.field255Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *PromptQuery) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteRequest) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetPromptKey() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.PromptKey) + if p.IsSetWorkspaceID() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I64, 1) + offset += thrift.Binary.WriteI64(buf[offset:], *p.WorkspaceID) } return offset } -func (p *PromptQuery) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteRequest) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetVersion() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Version) + if p.IsSetPromptIdentifier() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 2) + offset += p.PromptIdentifier.FastWriteNocopy(buf[offset:], w) } return offset } -func (p *PromptQuery) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteRequest) fastWriteField10(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetLabel() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Label) + if p.IsSetVariableVals() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 10) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.VariableVals { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) } return offset } -func (p *PromptQuery) field1Length() int { +func (p *ExecuteRequest) fastWriteField11(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetMessages() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 11) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.Messages { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *ExecuteRequest) fastWriteField255(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetBase() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 255) + offset += p.Base.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ExecuteRequest) field1Length() int { l := 0 - if p.IsSetPromptKey() { + if p.IsSetWorkspaceID() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.PromptKey) + l += thrift.Binary.I64Length() } return l } -func (p *PromptQuery) field2Length() int { +func (p *ExecuteRequest) field2Length() int { l := 0 - if p.IsSetVersion() { + if p.IsSetPromptIdentifier() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Version) + l += p.PromptIdentifier.BLength() } return l } -func (p *PromptQuery) field3Length() int { +func (p *ExecuteRequest) field10Length() int { l := 0 - if p.IsSetLabel() { + if p.IsSetVariableVals() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Label) + l += thrift.Binary.ListBeginLength() + for _, v := range p.VariableVals { + _ = v + l += v.BLength() + } } return l } -func (p *PromptQuery) DeepCopy(s interface{}) error { - src, ok := s.(*PromptQuery) +func (p *ExecuteRequest) field11Length() int { + l := 0 + if p.IsSetMessages() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.Messages { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *ExecuteRequest) field255Length() int { + l := 0 + if p.IsSetBase() { + l += thrift.Binary.FieldBeginLength() + l += p.Base.BLength() + } + return l +} + +func (p *ExecuteRequest) DeepCopy(s interface{}) error { + src, ok := s.(*ExecuteRequest) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.PromptKey != nil { - var tmp string - if *src.PromptKey != "" { - tmp = kutils.StringDeepCopy(*src.PromptKey) + if src.WorkspaceID != nil { + tmp := *src.WorkspaceID + p.WorkspaceID = &tmp + } + + var _promptIdentifier *PromptQuery + if src.PromptIdentifier != nil { + _promptIdentifier = &PromptQuery{} + if err := _promptIdentifier.DeepCopy(src.PromptIdentifier); err != nil { + return err } - p.PromptKey = &tmp } + p.PromptIdentifier = _promptIdentifier - if src.Version != nil { - var tmp string - if *src.Version != "" { - tmp = kutils.StringDeepCopy(*src.Version) + if src.VariableVals != nil { + p.VariableVals = make([]*VariableVal, 0, len(src.VariableVals)) + for _, elem := range src.VariableVals { + var _elem *VariableVal + if elem != nil { + _elem = &VariableVal{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.VariableVals = append(p.VariableVals, _elem) } - p.Version = &tmp } - if src.Label != nil { - var tmp string - if *src.Label != "" { - tmp = kutils.StringDeepCopy(*src.Label) + if src.Messages != nil { + p.Messages = make([]*Message, 0, len(src.Messages)) + for _, elem := range src.Messages { + var _elem *Message + if elem != nil { + _elem = &Message{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.Messages = append(p.Messages, _elem) + } + } + + var _base *base.Base + if src.Base != nil { + _base = &base.Base{} + if err := _base.DeepCopy(src.Base); err != nil { + return err } - p.Label = &tmp } + p.Base = _base return nil } -func (p *PromptResult_) FastRead(buf []byte) (int, error) { +func (p *ExecuteResponse) FastRead(buf []byte) (int, error) { var err error var offset int @@ -968,7 +1133,7 @@ func (p *PromptResult_) FastRead(buf []byte) (int, error) { } switch fieldId { case 1: - if fieldTypeId == thrift.STRUCT { + if fieldTypeId == thrift.I32 { l, err = p.FastReadField1(buf[offset:]) offset += l if err != nil { @@ -982,7 +1147,7 @@ func (p *PromptResult_) FastRead(buf []byte) (int, error) { } } case 2: - if fieldTypeId == thrift.STRUCT { + if fieldTypeId == thrift.STRING { l, err = p.FastReadField2(buf[offset:]) offset += l if err != nil { @@ -995,136 +1160,245 @@ func (p *PromptResult_) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - default: - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - } - - return offset, nil -ReadFieldBeginError: + case 3: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 255: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField255(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptResult_[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteResponse[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *PromptResult_) FastReadField1(buf []byte) (int, error) { +func (p *ExecuteResponse) FastReadField1(buf []byte) (int, error) { offset := 0 - _field := NewPromptQuery() + + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Code = _field + return offset, nil +} + +func (p *ExecuteResponse) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Msg = _field + return offset, nil +} + +func (p *ExecuteResponse) FastReadField3(buf []byte) (int, error) { + offset := 0 + _field := NewExecuteData() if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l } - p.Query = _field + p.Data = _field return offset, nil } -func (p *PromptResult_) FastReadField2(buf []byte) (int, error) { +func (p *ExecuteResponse) FastReadField255(buf []byte) (int, error) { offset := 0 - _field := NewPrompt() + _field := base.NewBaseResp() if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l } - p.Prompt = _field + p.BaseResp = _field return offset, nil } -func (p *PromptResult_) FastWrite(buf []byte) int { +func (p *ExecuteResponse) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *PromptResult_) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteResponse) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField255(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *PromptResult_) BLength() int { +func (p *ExecuteResponse) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() + l += p.field3Length() + l += p.field255Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *PromptResult_) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteResponse) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetQuery() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 1) - offset += p.Query.FastWriteNocopy(buf[offset:], w) + if p.IsSetCode() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 1) + offset += thrift.Binary.WriteI32(buf[offset:], *p.Code) } return offset } -func (p *PromptResult_) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteResponse) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetPrompt() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 2) - offset += p.Prompt.FastWriteNocopy(buf[offset:], w) + if p.IsSetMsg() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Msg) } return offset } -func (p *PromptResult_) field1Length() int { +func (p *ExecuteResponse) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetData() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 3) + offset += p.Data.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ExecuteResponse) fastWriteField255(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetBaseResp() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 255) + offset += p.BaseResp.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ExecuteResponse) field1Length() int { l := 0 - if p.IsSetQuery() { + if p.IsSetCode() { l += thrift.Binary.FieldBeginLength() - l += p.Query.BLength() + l += thrift.Binary.I32Length() } return l } -func (p *PromptResult_) field2Length() int { +func (p *ExecuteResponse) field2Length() int { l := 0 - if p.IsSetPrompt() { + if p.IsSetMsg() { l += thrift.Binary.FieldBeginLength() - l += p.Prompt.BLength() + l += thrift.Binary.StringLengthNocopy(*p.Msg) } return l } -func (p *PromptResult_) DeepCopy(s interface{}) error { - src, ok := s.(*PromptResult_) +func (p *ExecuteResponse) field3Length() int { + l := 0 + if p.IsSetData() { + l += thrift.Binary.FieldBeginLength() + l += p.Data.BLength() + } + return l +} + +func (p *ExecuteResponse) field255Length() int { + l := 0 + if p.IsSetBaseResp() { + l += thrift.Binary.FieldBeginLength() + l += p.BaseResp.BLength() + } + return l +} + +func (p *ExecuteResponse) DeepCopy(s interface{}) error { + src, ok := s.(*ExecuteResponse) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - var _query *PromptQuery - if src.Query != nil { - _query = &PromptQuery{} - if err := _query.DeepCopy(src.Query); err != nil { + if src.Code != nil { + tmp := *src.Code + p.Code = &tmp + } + + if src.Msg != nil { + var tmp string + if *src.Msg != "" { + tmp = kutils.StringDeepCopy(*src.Msg) + } + p.Msg = &tmp + } + + var _data *ExecuteData + if src.Data != nil { + _data = &ExecuteData{} + if err := _data.DeepCopy(src.Data); err != nil { return err } } - p.Query = _query + p.Data = _data - var _prompt *Prompt - if src.Prompt != nil { - _prompt = &Prompt{} - if err := _prompt.DeepCopy(src.Prompt); err != nil { + var _baseResp *base.BaseResp + if src.BaseResp != nil { + _baseResp = &base.BaseResp{} + if err := _baseResp.DeepCopy(src.BaseResp); err != nil { return err } } - p.Prompt = _prompt + p.BaseResp = _baseResp return nil } -func (p *Prompt) FastRead(buf []byte) (int, error) { +func (p *ExecuteData) FastRead(buf []byte) (int, error) { var err error var offset int @@ -1142,7 +1416,7 @@ func (p *Prompt) FastRead(buf []byte) (int, error) { } switch fieldId { case 1: - if fieldTypeId == thrift.I64 { + if fieldTypeId == thrift.STRUCT { l, err = p.FastReadField1(buf[offset:]) offset += l if err != nil { @@ -1170,64 +1444,8 @@ func (p *Prompt) FastRead(buf []byte) (int, error) { } } case 3: - if fieldTypeId == thrift.STRING { - l, err = p.FastReadField3(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 4: - if fieldTypeId == thrift.STRUCT { - l, err = p.FastReadField4(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 5: - if fieldTypeId == thrift.LIST { - l, err = p.FastReadField5(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 6: - if fieldTypeId == thrift.STRUCT { - l, err = p.FastReadField6(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 7: if fieldTypeId == thrift.STRUCT { - l, err = p.FastReadField7(buf[offset:]) + l, err = p.FastReadField3(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -1252,26 +1470,24 @@ func (p *Prompt) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Prompt[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteData[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *Prompt) FastReadField1(buf []byte) (int, error) { +func (p *ExecuteData) FastReadField1(buf []byte) (int, error) { offset := 0 - - var _field *int64 - if v, l, err := thrift.Binary.ReadI64(buf[offset:]); err != nil { + _field := NewMessage() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.WorkspaceID = _field + p.Message = _field return offset, nil } -func (p *Prompt) FastReadField2(buf []byte) (int, error) { +func (p *ExecuteData) FastReadField2(buf []byte) (int, error) { offset := 0 var _field *string @@ -1281,329 +1497,138 @@ func (p *Prompt) FastReadField2(buf []byte) (int, error) { offset += l _field = &v } - p.PromptKey = _field + p.FinishReason = _field return offset, nil } -func (p *Prompt) FastReadField3(buf []byte) (int, error) { +func (p *ExecuteData) FastReadField3(buf []byte) (int, error) { offset := 0 - - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + _field := NewTokenUsage() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.Version = _field + p.Usage = _field return offset, nil } -func (p *Prompt) FastReadField4(buf []byte) (int, error) { - offset := 0 - _field := NewPromptTemplate() - if l, err := _field.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } - p.PromptTemplate = _field - return offset, nil -} - -func (p *Prompt) FastReadField5(buf []byte) (int, error) { - offset := 0 - - _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) - offset += l - if err != nil { - return offset, err - } - _field := make([]*Tool, 0, size) - values := make([]Tool, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - if l, err := _elem.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } - - _field = append(_field, _elem) - } - p.Tools = _field - return offset, nil -} - -func (p *Prompt) FastReadField6(buf []byte) (int, error) { - offset := 0 - _field := NewToolCallConfig() - if l, err := _field.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } - p.ToolCallConfig = _field - return offset, nil -} - -func (p *Prompt) FastReadField7(buf []byte) (int, error) { - offset := 0 - _field := NewLLMConfig() - if l, err := _field.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } - p.LlmConfig = _field - return offset, nil -} - -func (p *Prompt) FastWrite(buf []byte) int { - return p.FastWriteNocopy(buf, nil) -} - -func (p *Prompt) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteData) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *ExecuteData) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) offset += p.fastWriteField3(buf[offset:], w) - offset += p.fastWriteField4(buf[offset:], w) - offset += p.fastWriteField5(buf[offset:], w) - offset += p.fastWriteField6(buf[offset:], w) - offset += p.fastWriteField7(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *Prompt) BLength() int { +func (p *ExecuteData) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() l += p.field3Length() - l += p.field4Length() - l += p.field5Length() - l += p.field6Length() - l += p.field7Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *Prompt) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteData) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetWorkspaceID() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I64, 1) - offset += thrift.Binary.WriteI64(buf[offset:], *p.WorkspaceID) + if p.IsSetMessage() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 1) + offset += p.Message.FastWriteNocopy(buf[offset:], w) } return offset } -func (p *Prompt) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteData) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetPromptKey() { + if p.IsSetFinishReason() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.PromptKey) - } - return offset -} - -func (p *Prompt) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetVersion() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Version) - } - return offset -} - -func (p *Prompt) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetPromptTemplate() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 4) - offset += p.PromptTemplate.FastWriteNocopy(buf[offset:], w) - } - return offset -} - -func (p *Prompt) fastWriteField5(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetTools() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 5) - listBeginOffset := offset - offset += thrift.Binary.ListBeginLength() - var length int - for _, v := range p.Tools { - length++ - offset += v.FastWriteNocopy(buf[offset:], w) - } - thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) - } - return offset -} - -func (p *Prompt) fastWriteField6(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetToolCallConfig() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 6) - offset += p.ToolCallConfig.FastWriteNocopy(buf[offset:], w) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.FinishReason) } return offset } -func (p *Prompt) fastWriteField7(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteData) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetLlmConfig() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 7) - offset += p.LlmConfig.FastWriteNocopy(buf[offset:], w) + if p.IsSetUsage() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 3) + offset += p.Usage.FastWriteNocopy(buf[offset:], w) } return offset } -func (p *Prompt) field1Length() int { - l := 0 - if p.IsSetWorkspaceID() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.I64Length() - } - return l -} - -func (p *Prompt) field2Length() int { - l := 0 - if p.IsSetPromptKey() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.PromptKey) - } - return l -} - -func (p *Prompt) field3Length() int { - l := 0 - if p.IsSetVersion() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Version) - } - return l -} - -func (p *Prompt) field4Length() int { - l := 0 - if p.IsSetPromptTemplate() { - l += thrift.Binary.FieldBeginLength() - l += p.PromptTemplate.BLength() - } - return l -} - -func (p *Prompt) field5Length() int { +func (p *ExecuteData) field1Length() int { l := 0 - if p.IsSetTools() { + if p.IsSetMessage() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.ListBeginLength() - for _, v := range p.Tools { - _ = v - l += v.BLength() - } + l += p.Message.BLength() } return l } -func (p *Prompt) field6Length() int { +func (p *ExecuteData) field2Length() int { l := 0 - if p.IsSetToolCallConfig() { + if p.IsSetFinishReason() { l += thrift.Binary.FieldBeginLength() - l += p.ToolCallConfig.BLength() + l += thrift.Binary.StringLengthNocopy(*p.FinishReason) } return l } -func (p *Prompt) field7Length() int { +func (p *ExecuteData) field3Length() int { l := 0 - if p.IsSetLlmConfig() { + if p.IsSetUsage() { l += thrift.Binary.FieldBeginLength() - l += p.LlmConfig.BLength() + l += p.Usage.BLength() } return l } -func (p *Prompt) DeepCopy(s interface{}) error { - src, ok := s.(*Prompt) +func (p *ExecuteData) DeepCopy(s interface{}) error { + src, ok := s.(*ExecuteData) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.WorkspaceID != nil { - tmp := *src.WorkspaceID - p.WorkspaceID = &tmp - } - - if src.PromptKey != nil { - var tmp string - if *src.PromptKey != "" { - tmp = kutils.StringDeepCopy(*src.PromptKey) - } - p.PromptKey = &tmp - } - - if src.Version != nil { - var tmp string - if *src.Version != "" { - tmp = kutils.StringDeepCopy(*src.Version) - } - p.Version = &tmp - } - - var _promptTemplate *PromptTemplate - if src.PromptTemplate != nil { - _promptTemplate = &PromptTemplate{} - if err := _promptTemplate.DeepCopy(src.PromptTemplate); err != nil { + var _message *Message + if src.Message != nil { + _message = &Message{} + if err := _message.DeepCopy(src.Message); err != nil { return err } } - p.PromptTemplate = _promptTemplate - - if src.Tools != nil { - p.Tools = make([]*Tool, 0, len(src.Tools)) - for _, elem := range src.Tools { - var _elem *Tool - if elem != nil { - _elem = &Tool{} - if err := _elem.DeepCopy(elem); err != nil { - return err - } - } - - p.Tools = append(p.Tools, _elem) - } - } + p.Message = _message - var _toolCallConfig *ToolCallConfig - if src.ToolCallConfig != nil { - _toolCallConfig = &ToolCallConfig{} - if err := _toolCallConfig.DeepCopy(src.ToolCallConfig); err != nil { - return err + if src.FinishReason != nil { + var tmp string + if *src.FinishReason != "" { + tmp = kutils.StringDeepCopy(*src.FinishReason) } + p.FinishReason = &tmp } - p.ToolCallConfig = _toolCallConfig - var _llmConfig *LLMConfig - if src.LlmConfig != nil { - _llmConfig = &LLMConfig{} - if err := _llmConfig.DeepCopy(src.LlmConfig); err != nil { + var _usage *TokenUsage + if src.Usage != nil { + _usage = &TokenUsage{} + if err := _usage.DeepCopy(src.Usage); err != nil { return err } } - p.LlmConfig = _llmConfig + p.Usage = _usage return nil } -func (p *PromptTemplate) FastRead(buf []byte) (int, error) { +func (p *ExecuteStreamingResponse) FastRead(buf []byte) (int, error) { var err error var offset int @@ -1635,7 +1660,7 @@ func (p *PromptTemplate) FastRead(buf []byte) (int, error) { } } case 2: - if fieldTypeId == thrift.LIST { + if fieldTypeId == thrift.STRING { l, err = p.FastReadField2(buf[offset:]) offset += l if err != nil { @@ -1649,7 +1674,7 @@ func (p *PromptTemplate) FastRead(buf []byte) (int, error) { } } case 3: - if fieldTypeId == thrift.LIST { + if fieldTypeId == thrift.I64 { l, err = p.FastReadField3(buf[offset:]) offset += l if err != nil { @@ -1662,235 +1687,287 @@ func (p *PromptTemplate) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - default: - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError + case 4: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField4(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } } - } - } + case 255: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField255(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } return offset, nil ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptTemplate[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteStreamingResponse[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *PromptTemplate) FastReadField1(buf []byte) (int, error) { +func (p *ExecuteStreamingResponse) FastReadField1(buf []byte) (int, error) { offset := 0 - var _field *TemplateType + var _field *string if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { return offset, err } else { offset += l _field = &v } - p.TemplateType = _field + p.ID = _field return offset, nil } -func (p *PromptTemplate) FastReadField2(buf []byte) (int, error) { +func (p *ExecuteStreamingResponse) FastReadField2(buf []byte) (int, error) { offset := 0 - _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) - offset += l - if err != nil { + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { return offset, err + } else { + offset += l + _field = &v } - _field := make([]*Message, 0, size) - values := make([]Message, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - if l, err := _elem.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } + p.Event = _field + return offset, nil +} - _field = append(_field, _elem) +func (p *ExecuteStreamingResponse) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *int64 + if v, l, err := thrift.Binary.ReadI64(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v } - p.Messages = _field + p.Retry = _field return offset, nil } -func (p *PromptTemplate) FastReadField3(buf []byte) (int, error) { +func (p *ExecuteStreamingResponse) FastReadField4(buf []byte) (int, error) { offset := 0 - - _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) - offset += l - if err != nil { + _field := NewExecuteStreamingData() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err + } else { + offset += l } - _field := make([]*VariableDef, 0, size) - values := make([]VariableDef, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - if l, err := _elem.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } + p.Data = _field + return offset, nil +} - _field = append(_field, _elem) +func (p *ExecuteStreamingResponse) FastReadField255(buf []byte) (int, error) { + offset := 0 + _field := base.NewBaseResp() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l } - p.VariableDefs = _field + p.BaseResp = _field return offset, nil } -func (p *PromptTemplate) FastWrite(buf []byte) int { +func (p *ExecuteStreamingResponse) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *PromptTemplate) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingResponse) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { + offset += p.fastWriteField3(buf[offset:], w) offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) - offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + offset += p.fastWriteField255(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *PromptTemplate) BLength() int { +func (p *ExecuteStreamingResponse) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() l += p.field3Length() + l += p.field4Length() + l += p.field255Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *PromptTemplate) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingResponse) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetTemplateType() { + if p.IsSetID() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.TemplateType) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ID) } return offset } -func (p *PromptTemplate) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingResponse) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetMessages() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 2) - listBeginOffset := offset - offset += thrift.Binary.ListBeginLength() - var length int - for _, v := range p.Messages { - length++ - offset += v.FastWriteNocopy(buf[offset:], w) - } - thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + if p.IsSetEvent() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Event) } return offset } -func (p *PromptTemplate) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingResponse) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetVariableDefs() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 3) - listBeginOffset := offset - offset += thrift.Binary.ListBeginLength() - var length int - for _, v := range p.VariableDefs { - length++ - offset += v.FastWriteNocopy(buf[offset:], w) - } - thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + if p.IsSetRetry() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I64, 3) + offset += thrift.Binary.WriteI64(buf[offset:], *p.Retry) } return offset } -func (p *PromptTemplate) field1Length() int { +func (p *ExecuteStreamingResponse) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetData() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 4) + offset += p.Data.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ExecuteStreamingResponse) fastWriteField255(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetBaseResp() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 255) + offset += p.BaseResp.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ExecuteStreamingResponse) field1Length() int { l := 0 - if p.IsSetTemplateType() { + if p.IsSetID() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.TemplateType) + l += thrift.Binary.StringLengthNocopy(*p.ID) } return l } -func (p *PromptTemplate) field2Length() int { +func (p *ExecuteStreamingResponse) field2Length() int { l := 0 - if p.IsSetMessages() { + if p.IsSetEvent() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.ListBeginLength() - for _, v := range p.Messages { - _ = v - l += v.BLength() - } + l += thrift.Binary.StringLengthNocopy(*p.Event) } return l } -func (p *PromptTemplate) field3Length() int { +func (p *ExecuteStreamingResponse) field3Length() int { l := 0 - if p.IsSetVariableDefs() { + if p.IsSetRetry() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.ListBeginLength() - for _, v := range p.VariableDefs { - _ = v - l += v.BLength() - } + l += thrift.Binary.I64Length() } return l } -func (p *PromptTemplate) DeepCopy(s interface{}) error { - src, ok := s.(*PromptTemplate) +func (p *ExecuteStreamingResponse) field4Length() int { + l := 0 + if p.IsSetData() { + l += thrift.Binary.FieldBeginLength() + l += p.Data.BLength() + } + return l +} + +func (p *ExecuteStreamingResponse) field255Length() int { + l := 0 + if p.IsSetBaseResp() { + l += thrift.Binary.FieldBeginLength() + l += p.BaseResp.BLength() + } + return l +} + +func (p *ExecuteStreamingResponse) DeepCopy(s interface{}) error { + src, ok := s.(*ExecuteStreamingResponse) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.TemplateType != nil { - tmp := *src.TemplateType - p.TemplateType = &tmp + if src.ID != nil { + var tmp string + if *src.ID != "" { + tmp = kutils.StringDeepCopy(*src.ID) + } + p.ID = &tmp } - if src.Messages != nil { - p.Messages = make([]*Message, 0, len(src.Messages)) - for _, elem := range src.Messages { - var _elem *Message - if elem != nil { - _elem = &Message{} - if err := _elem.DeepCopy(elem); err != nil { - return err - } - } - - p.Messages = append(p.Messages, _elem) + if src.Event != nil { + var tmp string + if *src.Event != "" { + tmp = kutils.StringDeepCopy(*src.Event) } + p.Event = &tmp } - if src.VariableDefs != nil { - p.VariableDefs = make([]*VariableDef, 0, len(src.VariableDefs)) - for _, elem := range src.VariableDefs { - var _elem *VariableDef - if elem != nil { - _elem = &VariableDef{} - if err := _elem.DeepCopy(elem); err != nil { - return err - } - } + if src.Retry != nil { + tmp := *src.Retry + p.Retry = &tmp + } - p.VariableDefs = append(p.VariableDefs, _elem) + var _data *ExecuteStreamingData + if src.Data != nil { + _data = &ExecuteStreamingData{} + if err := _data.DeepCopy(src.Data); err != nil { + return err } } + p.Data = _data + + var _baseResp *base.BaseResp + if src.BaseResp != nil { + _baseResp = &base.BaseResp{} + if err := _baseResp.DeepCopy(src.BaseResp); err != nil { + return err + } + } + p.BaseResp = _baseResp return nil } -func (p *ToolCallConfig) FastRead(buf []byte) (int, error) { +func (p *ExecuteStreamingData) FastRead(buf []byte) (int, error) { var err error var offset int @@ -1908,7 +1985,7 @@ func (p *ToolCallConfig) FastRead(buf []byte) (int, error) { } switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.I32 { l, err = p.FastReadField1(buf[offset:]) offset += l if err != nil { @@ -1921,112 +1998,23 @@ func (p *ToolCallConfig) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - default: - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } } - } - } - - return offset, nil -ReadFieldBeginError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) -ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ToolCallConfig[fieldId]), err) -SkipFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) -} - -func (p *ToolCallConfig) FastReadField1(buf []byte) (int, error) { - offset := 0 - - var _field *ToolChoiceType - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v - } - p.ToolChoice = _field - return offset, nil -} - -func (p *ToolCallConfig) FastWrite(buf []byte) int { - return p.FastWriteNocopy(buf, nil) -} - -func (p *ToolCallConfig) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p != nil { - offset += p.fastWriteField1(buf[offset:], w) - } - offset += thrift.Binary.WriteFieldStop(buf[offset:]) - return offset -} - -func (p *ToolCallConfig) BLength() int { - l := 0 - if p != nil { - l += p.field1Length() - } - l += thrift.Binary.FieldStopLength() - return l -} - -func (p *ToolCallConfig) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetToolChoice() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ToolChoice) - } - return offset -} - -func (p *ToolCallConfig) field1Length() int { - l := 0 - if p.IsSetToolChoice() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.ToolChoice) - } - return l -} - -func (p *ToolCallConfig) DeepCopy(s interface{}) error { - src, ok := s.(*ToolCallConfig) - if !ok { - return fmt.Errorf("%T's type not matched %T", s, p) - } - - if src.ToolChoice != nil { - tmp := *src.ToolChoice - p.ToolChoice = &tmp - } - - return nil -} - -func (p *Message) FastRead(buf []byte) (int, error) { - - var err error - var offset int - var l int - var fieldTypeId thrift.TType - var fieldId int16 - for { - fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldBeginError - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if fieldTypeId == thrift.STRING { - l, err = p.FastReadField1(buf[offset:]) + case 3: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField3(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -2038,9 +2026,9 @@ func (p *Message) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - case 2: + case 4: if fieldTypeId == thrift.STRING { - l, err = p.FastReadField2(buf[offset:]) + l, err = p.FastReadField4(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -2052,9 +2040,9 @@ func (p *Message) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - case 3: - if fieldTypeId == thrift.LIST { - l, err = p.FastReadField3(buf[offset:]) + case 5: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField5(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -2079,26 +2067,26 @@ func (p *Message) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Message[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ExecuteStreamingData[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *Message) FastReadField1(buf []byte) (int, error) { +func (p *ExecuteStreamingData) FastReadField1(buf []byte) (int, error) { offset := 0 - var _field *Role - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { return offset, err } else { offset += l _field = &v } - p.Role = _field + p.Code = _field return offset, nil } -func (p *Message) FastReadField2(buf []byte) (int, error) { +func (p *ExecuteStreamingData) FastReadField2(buf []byte) (int, error) { offset := 0 var _field *string @@ -2108,164 +2096,217 @@ func (p *Message) FastReadField2(buf []byte) (int, error) { offset += l _field = &v } - p.Content = _field + p.Msg = _field return offset, nil } -func (p *Message) FastReadField3(buf []byte) (int, error) { +func (p *ExecuteStreamingData) FastReadField3(buf []byte) (int, error) { + offset := 0 + _field := NewMessage() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + p.Message = _field + return offset, nil +} + +func (p *ExecuteStreamingData) FastReadField4(buf []byte) (int, error) { offset := 0 - _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) - offset += l - if err != nil { + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { return offset, err + } else { + offset += l + _field = &v } - _field := make([]*ContentPart, 0, size) - values := make([]ContentPart, size) - for i := 0; i < size; i++ { - _elem := &values[i] - _elem.InitDefault() - if l, err := _elem.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } + p.FinishReason = _field + return offset, nil +} - _field = append(_field, _elem) +func (p *ExecuteStreamingData) FastReadField5(buf []byte) (int, error) { + offset := 0 + _field := NewTokenUsage() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l } - p.Parts = _field + p.Usage = _field return offset, nil } -func (p *Message) FastWrite(buf []byte) int { +func (p *ExecuteStreamingData) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *Message) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingData) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + offset += p.fastWriteField5(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *Message) BLength() int { +func (p *ExecuteStreamingData) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() l += p.field3Length() + l += p.field4Length() + l += p.field5Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *Message) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingData) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetRole() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Role) + if p.IsSetCode() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 1) + offset += thrift.Binary.WriteI32(buf[offset:], *p.Code) } return offset } -func (p *Message) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingData) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetContent() { + if p.IsSetMsg() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Content) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Msg) } return offset } -func (p *Message) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { +func (p *ExecuteStreamingData) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetParts() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 3) - listBeginOffset := offset - offset += thrift.Binary.ListBeginLength() - var length int - for _, v := range p.Parts { - length++ - offset += v.FastWriteNocopy(buf[offset:], w) - } - thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + if p.IsSetMessage() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 3) + offset += p.Message.FastWriteNocopy(buf[offset:], w) } return offset } -func (p *Message) field1Length() int { +func (p *ExecuteStreamingData) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetFinishReason() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 4) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.FinishReason) + } + return offset +} + +func (p *ExecuteStreamingData) fastWriteField5(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetUsage() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 5) + offset += p.Usage.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ExecuteStreamingData) field1Length() int { l := 0 - if p.IsSetRole() { + if p.IsSetCode() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Role) + l += thrift.Binary.I32Length() } return l } -func (p *Message) field2Length() int { +func (p *ExecuteStreamingData) field2Length() int { l := 0 - if p.IsSetContent() { + if p.IsSetMsg() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Content) + l += thrift.Binary.StringLengthNocopy(*p.Msg) } return l } -func (p *Message) field3Length() int { +func (p *ExecuteStreamingData) field3Length() int { l := 0 - if p.IsSetParts() { + if p.IsSetMessage() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.ListBeginLength() - for _, v := range p.Parts { - _ = v - l += v.BLength() - } + l += p.Message.BLength() } return l } -func (p *Message) DeepCopy(s interface{}) error { - src, ok := s.(*Message) +func (p *ExecuteStreamingData) field4Length() int { + l := 0 + if p.IsSetFinishReason() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.FinishReason) + } + return l +} + +func (p *ExecuteStreamingData) field5Length() int { + l := 0 + if p.IsSetUsage() { + l += thrift.Binary.FieldBeginLength() + l += p.Usage.BLength() + } + return l +} + +func (p *ExecuteStreamingData) DeepCopy(s interface{}) error { + src, ok := s.(*ExecuteStreamingData) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.Role != nil { - tmp := *src.Role - p.Role = &tmp + if src.Code != nil { + tmp := *src.Code + p.Code = &tmp } - if src.Content != nil { + if src.Msg != nil { var tmp string - if *src.Content != "" { - tmp = kutils.StringDeepCopy(*src.Content) + if *src.Msg != "" { + tmp = kutils.StringDeepCopy(*src.Msg) } - p.Content = &tmp + p.Msg = &tmp } - if src.Parts != nil { - p.Parts = make([]*ContentPart, 0, len(src.Parts)) - for _, elem := range src.Parts { - var _elem *ContentPart - if elem != nil { - _elem = &ContentPart{} - if err := _elem.DeepCopy(elem); err != nil { - return err - } - } + var _message *Message + if src.Message != nil { + _message = &Message{} + if err := _message.DeepCopy(src.Message); err != nil { + return err + } + } + p.Message = _message - p.Parts = append(p.Parts, _elem) + if src.FinishReason != nil { + var tmp string + if *src.FinishReason != "" { + tmp = kutils.StringDeepCopy(*src.FinishReason) + } + p.FinishReason = &tmp + } + + var _usage *TokenUsage + if src.Usage != nil { + _usage = &TokenUsage{} + if err := _usage.DeepCopy(src.Usage); err != nil { + return err } } + p.Usage = _usage return nil } -func (p *ContentPart) FastRead(buf []byte) (int, error) { +func (p *PromptQuery) FastRead(buf []byte) (int, error) { var err error var offset int @@ -2310,11 +2351,25 @@ func (p *ContentPart) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - default: - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError + case 3: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError } } } @@ -2323,26 +2378,26 @@ func (p *ContentPart) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ContentPart[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptQuery[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *ContentPart) FastReadField1(buf []byte) (int, error) { +func (p *PromptQuery) FastReadField1(buf []byte) (int, error) { offset := 0 - var _field *ContentType + var _field *string if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { return offset, err } else { offset += l _field = &v } - p.Type = _field + p.PromptKey = _field return offset, nil } -func (p *ContentPart) FastReadField2(buf []byte) (int, error) { +func (p *PromptQuery) FastReadField2(buf []byte) (int, error) { offset := 0 var _field *string @@ -2352,93 +2407,138 @@ func (p *ContentPart) FastReadField2(buf []byte) (int, error) { offset += l _field = &v } - p.Text = _field + p.Version = _field return offset, nil } -func (p *ContentPart) FastWrite(buf []byte) int { +func (p *PromptQuery) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Label = _field + return offset, nil +} + +func (p *PromptQuery) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *ContentPart) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptQuery) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *ContentPart) BLength() int { +func (p *PromptQuery) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() + l += p.field3Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *ContentPart) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptQuery) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetType() { + if p.IsSetPromptKey() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.PromptKey) } return offset } -func (p *ContentPart) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptQuery) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetText() { + if p.IsSetVersion() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Text) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Version) } return offset } -func (p *ContentPart) field1Length() int { +func (p *PromptQuery) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetLabel() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Label) + } + return offset +} + +func (p *PromptQuery) field1Length() int { l := 0 - if p.IsSetType() { + if p.IsSetPromptKey() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Type) + l += thrift.Binary.StringLengthNocopy(*p.PromptKey) } return l } -func (p *ContentPart) field2Length() int { +func (p *PromptQuery) field2Length() int { l := 0 - if p.IsSetText() { + if p.IsSetVersion() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Text) + l += thrift.Binary.StringLengthNocopy(*p.Version) } return l } -func (p *ContentPart) DeepCopy(s interface{}) error { - src, ok := s.(*ContentPart) +func (p *PromptQuery) field3Length() int { + l := 0 + if p.IsSetLabel() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Label) + } + return l +} + +func (p *PromptQuery) DeepCopy(s interface{}) error { + src, ok := s.(*PromptQuery) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.Type != nil { - tmp := *src.Type - p.Type = &tmp + if src.PromptKey != nil { + var tmp string + if *src.PromptKey != "" { + tmp = kutils.StringDeepCopy(*src.PromptKey) + } + p.PromptKey = &tmp } - if src.Text != nil { + if src.Version != nil { var tmp string - if *src.Text != "" { - tmp = kutils.StringDeepCopy(*src.Text) + if *src.Version != "" { + tmp = kutils.StringDeepCopy(*src.Version) } - p.Text = &tmp + p.Version = &tmp + } + + if src.Label != nil { + var tmp string + if *src.Label != "" { + tmp = kutils.StringDeepCopy(*src.Label) + } + p.Label = &tmp } return nil } -func (p *VariableDef) FastRead(buf []byte) (int, error) { +func (p *PromptResult_) FastRead(buf []byte) (int, error) { var err error var offset int @@ -2456,7 +2556,7 @@ func (p *VariableDef) FastRead(buf []byte) (int, error) { } switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.STRUCT { l, err = p.FastReadField1(buf[offset:]) offset += l if err != nil { @@ -2470,7 +2570,7 @@ func (p *VariableDef) FastRead(buf []byte) (int, error) { } } case 2: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.STRUCT { l, err = p.FastReadField2(buf[offset:]) offset += l if err != nil { @@ -2483,20 +2583,6 @@ func (p *VariableDef) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - case 3: - if fieldTypeId == thrift.STRING { - l, err = p.FastReadField3(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } default: l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) offset += l @@ -2510,164 +2596,123 @@ func (p *VariableDef) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_VariableDef[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptResult_[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *VariableDef) FastReadField1(buf []byte) (int, error) { - offset := 0 - - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v - } - p.Key = _field - return offset, nil -} - -func (p *VariableDef) FastReadField2(buf []byte) (int, error) { +func (p *PromptResult_) FastReadField1(buf []byte) (int, error) { offset := 0 - - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + _field := NewPromptQuery() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.Desc = _field + p.Query = _field return offset, nil } -func (p *VariableDef) FastReadField3(buf []byte) (int, error) { +func (p *PromptResult_) FastReadField2(buf []byte) (int, error) { offset := 0 - - var _field *VariableType - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + _field := NewPrompt() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.Type = _field + p.Prompt = _field return offset, nil } -func (p *VariableDef) FastWrite(buf []byte) int { +func (p *PromptResult_) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *VariableDef) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptResult_) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) offset += p.fastWriteField2(buf[offset:], w) - offset += p.fastWriteField3(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *VariableDef) BLength() int { +func (p *PromptResult_) BLength() int { l := 0 if p != nil { l += p.field1Length() l += p.field2Length() - l += p.field3Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *VariableDef) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetKey() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Key) - } - return offset -} - -func (p *VariableDef) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptResult_) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetDesc() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Desc) + if p.IsSetQuery() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 1) + offset += p.Query.FastWriteNocopy(buf[offset:], w) } return offset } -func (p *VariableDef) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptResult_) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetType() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) + if p.IsSetPrompt() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 2) + offset += p.Prompt.FastWriteNocopy(buf[offset:], w) } return offset } -func (p *VariableDef) field1Length() int { - l := 0 - if p.IsSetKey() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Key) - } - return l -} - -func (p *VariableDef) field2Length() int { +func (p *PromptResult_) field1Length() int { l := 0 - if p.IsSetDesc() { + if p.IsSetQuery() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Desc) + l += p.Query.BLength() } return l } -func (p *VariableDef) field3Length() int { +func (p *PromptResult_) field2Length() int { l := 0 - if p.IsSetType() { + if p.IsSetPrompt() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Type) + l += p.Prompt.BLength() } return l } -func (p *VariableDef) DeepCopy(s interface{}) error { - src, ok := s.(*VariableDef) +func (p *PromptResult_) DeepCopy(s interface{}) error { + src, ok := s.(*PromptResult_) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.Key != nil { - var tmp string - if *src.Key != "" { - tmp = kutils.StringDeepCopy(*src.Key) + var _query *PromptQuery + if src.Query != nil { + _query = &PromptQuery{} + if err := _query.DeepCopy(src.Query); err != nil { + return err } - p.Key = &tmp } + p.Query = _query - if src.Desc != nil { - var tmp string - if *src.Desc != "" { - tmp = kutils.StringDeepCopy(*src.Desc) - } - p.Desc = &tmp - } - - if src.Type != nil { - tmp := *src.Type - p.Type = &tmp + var _prompt *Prompt + if src.Prompt != nil { + _prompt = &Prompt{} + if err := _prompt.DeepCopy(src.Prompt); err != nil { + return err + } } + p.Prompt = _prompt return nil } -func (p *Tool) FastRead(buf []byte) (int, error) { +func (p *Prompt) FastRead(buf []byte) (int, error) { var err error var offset int @@ -2685,7 +2730,7 @@ func (p *Tool) FastRead(buf []byte) (int, error) { } switch fieldId { case 1: - if fieldTypeId == thrift.STRING { + if fieldTypeId == thrift.I64 { l, err = p.FastReadField1(buf[offset:]) offset += l if err != nil { @@ -2699,7 +2744,7 @@ func (p *Tool) FastRead(buf []byte) (int, error) { } } case 2: - if fieldTypeId == thrift.STRUCT { + if fieldTypeId == thrift.STRING { l, err = p.FastReadField2(buf[offset:]) offset += l if err != nil { @@ -2712,153 +2757,9 @@ func (p *Tool) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - default: - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - } - - return offset, nil -ReadFieldBeginError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) -ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Tool[fieldId]), err) -SkipFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) -} - -func (p *Tool) FastReadField1(buf []byte) (int, error) { - offset := 0 - - var _field *ToolType - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v - } - p.Type = _field - return offset, nil -} - -func (p *Tool) FastReadField2(buf []byte) (int, error) { - offset := 0 - _field := NewFunction() - if l, err := _field.FastRead(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - } - p.Function = _field - return offset, nil -} - -func (p *Tool) FastWrite(buf []byte) int { - return p.FastWriteNocopy(buf, nil) -} - -func (p *Tool) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p != nil { - offset += p.fastWriteField1(buf[offset:], w) - offset += p.fastWriteField2(buf[offset:], w) - } - offset += thrift.Binary.WriteFieldStop(buf[offset:]) - return offset -} - -func (p *Tool) BLength() int { - l := 0 - if p != nil { - l += p.field1Length() - l += p.field2Length() - } - l += thrift.Binary.FieldStopLength() - return l -} - -func (p *Tool) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetType() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) - } - return offset -} - -func (p *Tool) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetFunction() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 2) - offset += p.Function.FastWriteNocopy(buf[offset:], w) - } - return offset -} - -func (p *Tool) field1Length() int { - l := 0 - if p.IsSetType() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Type) - } - return l -} - -func (p *Tool) field2Length() int { - l := 0 - if p.IsSetFunction() { - l += thrift.Binary.FieldBeginLength() - l += p.Function.BLength() - } - return l -} - -func (p *Tool) DeepCopy(s interface{}) error { - src, ok := s.(*Tool) - if !ok { - return fmt.Errorf("%T's type not matched %T", s, p) - } - - if src.Type != nil { - tmp := *src.Type - p.Type = &tmp - } - - var _function *Function - if src.Function != nil { - _function = &Function{} - if err := _function.DeepCopy(src.Function); err != nil { - return err - } - } - p.Function = _function - - return nil -} - -func (p *Function) FastRead(buf []byte) (int, error) { - - var err error - var offset int - var l int - var fieldTypeId thrift.TType - var fieldId int16 - for { - fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldBeginError - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: + case 3: if fieldTypeId == thrift.STRING { - l, err = p.FastReadField1(buf[offset:]) + l, err = p.FastReadField3(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -2870,9 +2771,9 @@ func (p *Function) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - case 2: - if fieldTypeId == thrift.STRING { - l, err = p.FastReadField2(buf[offset:]) + case 4: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField4(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -2884,9 +2785,37 @@ func (p *Function) FastRead(buf []byte) (int, error) { goto SkipFieldError } } - case 3: - if fieldTypeId == thrift.STRING { - l, err = p.FastReadField3(buf[offset:]) + case 5: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField5(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 6: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField6(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 7: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField7(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -2911,26 +2840,26 @@ func (p *Function) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Function[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Prompt[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *Function) FastReadField1(buf []byte) (int, error) { +func (p *Prompt) FastReadField1(buf []byte) (int, error) { offset := 0 - var _field *string - if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + var _field *int64 + if v, l, err := thrift.Binary.ReadI64(buf[offset:]); err != nil { return offset, err } else { offset += l _field = &v } - p.Name = _field + p.WorkspaceID = _field return offset, nil } -func (p *Function) FastReadField2(buf []byte) (int, error) { +func (p *Prompt) FastReadField2(buf []byte) (int, error) { offset := 0 var _field *string @@ -2940,11 +2869,11 @@ func (p *Function) FastReadField2(buf []byte) (int, error) { offset += l _field = &v } - p.Description = _field + p.PromptKey = _field return offset, nil } -func (p *Function) FastReadField3(buf []byte) (int, error) { +func (p *Prompt) FastReadField3(buf []byte) (int, error) { offset := 0 var _field *string @@ -2954,124 +2883,3615 @@ func (p *Function) FastReadField3(buf []byte) (int, error) { offset += l _field = &v } - p.Parameters = _field + p.Version = _field return offset, nil } -func (p *Function) FastWrite(buf []byte) int { - return p.FastWriteNocopy(buf, nil) -} - -func (p *Function) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *Prompt) FastReadField4(buf []byte) (int, error) { offset := 0 - if p != nil { - offset += p.fastWriteField1(buf[offset:], w) - offset += p.fastWriteField2(buf[offset:], w) - offset += p.fastWriteField3(buf[offset:], w) - } - offset += thrift.Binary.WriteFieldStop(buf[offset:]) - return offset -} - -func (p *Function) BLength() int { - l := 0 - if p != nil { - l += p.field1Length() - l += p.field2Length() - l += p.field3Length() + _field := NewPromptTemplate() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l } - l += thrift.Binary.FieldStopLength() - return l + p.PromptTemplate = _field + return offset, nil } -func (p *Function) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *Prompt) FastReadField5(buf []byte) (int, error) { offset := 0 - if p.IsSetName() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Name) + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*Tool, 0, size) + values := make([]Tool, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.Tools = _field + return offset, nil +} + +func (p *Prompt) FastReadField6(buf []byte) (int, error) { + offset := 0 + _field := NewToolCallConfig() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + p.ToolCallConfig = _field + return offset, nil +} + +func (p *Prompt) FastReadField7(buf []byte) (int, error) { + offset := 0 + _field := NewLLMConfig() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + p.LlmConfig = _field + return offset, nil +} + +func (p *Prompt) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *Prompt) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + offset += p.fastWriteField5(buf[offset:], w) + offset += p.fastWriteField6(buf[offset:], w) + offset += p.fastWriteField7(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *Prompt) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + l += p.field4Length() + l += p.field5Length() + l += p.field6Length() + l += p.field7Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *Prompt) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetWorkspaceID() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I64, 1) + offset += thrift.Binary.WriteI64(buf[offset:], *p.WorkspaceID) } return offset } -func (p *Function) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { +func (p *Prompt) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetDescription() { + if p.IsSetPromptKey() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Description) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.PromptKey) } return offset } -func (p *Function) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { +func (p *Prompt) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetParameters() { + if p.IsSetVersion() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) - offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Parameters) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Version) } return offset } -func (p *Function) field1Length() int { +func (p *Prompt) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetPromptTemplate() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 4) + offset += p.PromptTemplate.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *Prompt) fastWriteField5(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetTools() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 5) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.Tools { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *Prompt) fastWriteField6(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetToolCallConfig() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 6) + offset += p.ToolCallConfig.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *Prompt) fastWriteField7(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetLlmConfig() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 7) + offset += p.LlmConfig.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *Prompt) field1Length() int { l := 0 - if p.IsSetName() { + if p.IsSetWorkspaceID() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Name) + l += thrift.Binary.I64Length() } return l } -func (p *Function) field2Length() int { +func (p *Prompt) field2Length() int { l := 0 - if p.IsSetDescription() { + if p.IsSetPromptKey() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Description) + l += thrift.Binary.StringLengthNocopy(*p.PromptKey) } return l } -func (p *Function) field3Length() int { +func (p *Prompt) field3Length() int { l := 0 - if p.IsSetParameters() { + if p.IsSetVersion() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.StringLengthNocopy(*p.Parameters) + l += thrift.Binary.StringLengthNocopy(*p.Version) } return l } -func (p *Function) DeepCopy(s interface{}) error { - src, ok := s.(*Function) +func (p *Prompt) field4Length() int { + l := 0 + if p.IsSetPromptTemplate() { + l += thrift.Binary.FieldBeginLength() + l += p.PromptTemplate.BLength() + } + return l +} + +func (p *Prompt) field5Length() int { + l := 0 + if p.IsSetTools() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.Tools { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *Prompt) field6Length() int { + l := 0 + if p.IsSetToolCallConfig() { + l += thrift.Binary.FieldBeginLength() + l += p.ToolCallConfig.BLength() + } + return l +} + +func (p *Prompt) field7Length() int { + l := 0 + if p.IsSetLlmConfig() { + l += thrift.Binary.FieldBeginLength() + l += p.LlmConfig.BLength() + } + return l +} + +func (p *Prompt) DeepCopy(s interface{}) error { + src, ok := s.(*Prompt) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.Name != nil { + if src.WorkspaceID != nil { + tmp := *src.WorkspaceID + p.WorkspaceID = &tmp + } + + if src.PromptKey != nil { var tmp string - if *src.Name != "" { - tmp = kutils.StringDeepCopy(*src.Name) + if *src.PromptKey != "" { + tmp = kutils.StringDeepCopy(*src.PromptKey) } - p.Name = &tmp + p.PromptKey = &tmp } - if src.Description != nil { + if src.Version != nil { var tmp string - if *src.Description != "" { - tmp = kutils.StringDeepCopy(*src.Description) + if *src.Version != "" { + tmp = kutils.StringDeepCopy(*src.Version) } - p.Description = &tmp + p.Version = &tmp } - if src.Parameters != nil { - var tmp string - if *src.Parameters != "" { - tmp = kutils.StringDeepCopy(*src.Parameters) + var _promptTemplate *PromptTemplate + if src.PromptTemplate != nil { + _promptTemplate = &PromptTemplate{} + if err := _promptTemplate.DeepCopy(src.PromptTemplate); err != nil { + return err + } + } + p.PromptTemplate = _promptTemplate + + if src.Tools != nil { + p.Tools = make([]*Tool, 0, len(src.Tools)) + for _, elem := range src.Tools { + var _elem *Tool + if elem != nil { + _elem = &Tool{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.Tools = append(p.Tools, _elem) } - p.Parameters = &tmp } + var _toolCallConfig *ToolCallConfig + if src.ToolCallConfig != nil { + _toolCallConfig = &ToolCallConfig{} + if err := _toolCallConfig.DeepCopy(src.ToolCallConfig); err != nil { + return err + } + } + p.ToolCallConfig = _toolCallConfig + + var _llmConfig *LLMConfig + if src.LlmConfig != nil { + _llmConfig = &LLMConfig{} + if err := _llmConfig.DeepCopy(src.LlmConfig); err != nil { + return err + } + } + p.LlmConfig = _llmConfig + + return nil +} + +func (p *PromptTemplate) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptTemplate[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *PromptTemplate) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *TemplateType + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.TemplateType = _field + return offset, nil +} + +func (p *PromptTemplate) FastReadField2(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*Message, 0, size) + values := make([]Message, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.Messages = _field + return offset, nil +} + +func (p *PromptTemplate) FastReadField3(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*VariableDef, 0, size) + values := make([]VariableDef, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.VariableDefs = _field + return offset, nil +} + +func (p *PromptTemplate) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *PromptTemplate) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *PromptTemplate) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *PromptTemplate) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetTemplateType() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.TemplateType) + } + return offset +} + +func (p *PromptTemplate) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetMessages() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 2) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.Messages { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *PromptTemplate) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetVariableDefs() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 3) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.VariableDefs { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *PromptTemplate) field1Length() int { + l := 0 + if p.IsSetTemplateType() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.TemplateType) + } + return l +} + +func (p *PromptTemplate) field2Length() int { + l := 0 + if p.IsSetMessages() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.Messages { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *PromptTemplate) field3Length() int { + l := 0 + if p.IsSetVariableDefs() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.VariableDefs { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *PromptTemplate) DeepCopy(s interface{}) error { + src, ok := s.(*PromptTemplate) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.TemplateType != nil { + tmp := *src.TemplateType + p.TemplateType = &tmp + } + + if src.Messages != nil { + p.Messages = make([]*Message, 0, len(src.Messages)) + for _, elem := range src.Messages { + var _elem *Message + if elem != nil { + _elem = &Message{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.Messages = append(p.Messages, _elem) + } + } + + if src.VariableDefs != nil { + p.VariableDefs = make([]*VariableDef, 0, len(src.VariableDefs)) + for _, elem := range src.VariableDefs { + var _elem *VariableDef + if elem != nil { + _elem = &VariableDef{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.VariableDefs = append(p.VariableDefs, _elem) + } + } + + return nil +} + +func (p *ToolCallConfig) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ToolCallConfig[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *ToolCallConfig) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *ToolChoiceType + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.ToolChoice = _field + return offset, nil +} + +func (p *ToolCallConfig) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *ToolCallConfig) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *ToolCallConfig) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *ToolCallConfig) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetToolChoice() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ToolChoice) + } + return offset +} + +func (p *ToolCallConfig) field1Length() int { + l := 0 + if p.IsSetToolChoice() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.ToolChoice) + } + return l +} + +func (p *ToolCallConfig) DeepCopy(s interface{}) error { + src, ok := s.(*ToolCallConfig) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.ToolChoice != nil { + tmp := *src.ToolChoice + p.ToolChoice = &tmp + } + + return nil +} + +func (p *Message) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 4: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField4(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 5: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField5(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 6: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField6(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Message[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *Message) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *Role + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Role = _field + return offset, nil +} + +func (p *Message) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Content = _field + return offset, nil +} + +func (p *Message) FastReadField3(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*ContentPart, 0, size) + values := make([]ContentPart, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.Parts = _field + return offset, nil +} + +func (p *Message) FastReadField4(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.ReasoningContent = _field + return offset, nil +} + +func (p *Message) FastReadField5(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.ToolCallID = _field + return offset, nil +} + +func (p *Message) FastReadField6(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*ToolCall, 0, size) + values := make([]ToolCall, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.ToolCalls = _field + return offset, nil +} + +func (p *Message) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *Message) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + offset += p.fastWriteField5(buf[offset:], w) + offset += p.fastWriteField6(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *Message) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + l += p.field4Length() + l += p.field5Length() + l += p.field6Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *Message) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetRole() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Role) + } + return offset +} + +func (p *Message) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetContent() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Content) + } + return offset +} + +func (p *Message) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetParts() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 3) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.Parts { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *Message) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetReasoningContent() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 4) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ReasoningContent) + } + return offset +} + +func (p *Message) fastWriteField5(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetToolCallID() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 5) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ToolCallID) + } + return offset +} + +func (p *Message) fastWriteField6(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetToolCalls() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 6) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.ToolCalls { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *Message) field1Length() int { + l := 0 + if p.IsSetRole() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Role) + } + return l +} + +func (p *Message) field2Length() int { + l := 0 + if p.IsSetContent() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Content) + } + return l +} + +func (p *Message) field3Length() int { + l := 0 + if p.IsSetParts() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.Parts { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *Message) field4Length() int { + l := 0 + if p.IsSetReasoningContent() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.ReasoningContent) + } + return l +} + +func (p *Message) field5Length() int { + l := 0 + if p.IsSetToolCallID() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.ToolCallID) + } + return l +} + +func (p *Message) field6Length() int { + l := 0 + if p.IsSetToolCalls() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.ToolCalls { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *Message) DeepCopy(s interface{}) error { + src, ok := s.(*Message) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Role != nil { + tmp := *src.Role + p.Role = &tmp + } + + if src.Content != nil { + var tmp string + if *src.Content != "" { + tmp = kutils.StringDeepCopy(*src.Content) + } + p.Content = &tmp + } + + if src.Parts != nil { + p.Parts = make([]*ContentPart, 0, len(src.Parts)) + for _, elem := range src.Parts { + var _elem *ContentPart + if elem != nil { + _elem = &ContentPart{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.Parts = append(p.Parts, _elem) + } + } + + if src.ReasoningContent != nil { + var tmp string + if *src.ReasoningContent != "" { + tmp = kutils.StringDeepCopy(*src.ReasoningContent) + } + p.ReasoningContent = &tmp + } + + if src.ToolCallID != nil { + var tmp string + if *src.ToolCallID != "" { + tmp = kutils.StringDeepCopy(*src.ToolCallID) + } + p.ToolCallID = &tmp + } + + if src.ToolCalls != nil { + p.ToolCalls = make([]*ToolCall, 0, len(src.ToolCalls)) + for _, elem := range src.ToolCalls { + var _elem *ToolCall + if elem != nil { + _elem = &ToolCall{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.ToolCalls = append(p.ToolCalls, _elem) + } + } + + return nil +} + +func (p *ContentPart) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 4: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField4(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ContentPart[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *ContentPart) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *ContentType + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Type = _field + return offset, nil +} + +func (p *ContentPart) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Text = _field + return offset, nil +} + +func (p *ContentPart) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.ImageURL = _field + return offset, nil +} + +func (p *ContentPart) FastReadField4(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Base64Data = _field + return offset, nil +} + +func (p *ContentPart) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *ContentPart) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *ContentPart) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + l += p.field4Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *ContentPart) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetType() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) + } + return offset +} + +func (p *ContentPart) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetText() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Text) + } + return offset +} + +func (p *ContentPart) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetImageURL() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ImageURL) + } + return offset +} + +func (p *ContentPart) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetBase64Data() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 4) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Base64Data) + } + return offset +} + +func (p *ContentPart) field1Length() int { + l := 0 + if p.IsSetType() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Type) + } + return l +} + +func (p *ContentPart) field2Length() int { + l := 0 + if p.IsSetText() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Text) + } + return l +} + +func (p *ContentPart) field3Length() int { + l := 0 + if p.IsSetImageURL() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.ImageURL) + } + return l +} + +func (p *ContentPart) field4Length() int { + l := 0 + if p.IsSetBase64Data() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Base64Data) + } + return l +} + +func (p *ContentPart) DeepCopy(s interface{}) error { + src, ok := s.(*ContentPart) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Type != nil { + tmp := *src.Type + p.Type = &tmp + } + + if src.Text != nil { + var tmp string + if *src.Text != "" { + tmp = kutils.StringDeepCopy(*src.Text) + } + p.Text = &tmp + } + + if src.ImageURL != nil { + var tmp string + if *src.ImageURL != "" { + tmp = kutils.StringDeepCopy(*src.ImageURL) + } + p.ImageURL = &tmp + } + + if src.Base64Data != nil { + var tmp string + if *src.Base64Data != "" { + tmp = kutils.StringDeepCopy(*src.Base64Data) + } + p.Base64Data = &tmp + } + + return nil +} + +func (p *VariableDef) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_VariableDef[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *VariableDef) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Key = _field + return offset, nil +} + +func (p *VariableDef) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Desc = _field + return offset, nil +} + +func (p *VariableDef) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *VariableType + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Type = _field + return offset, nil +} + +func (p *VariableDef) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *VariableDef) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *VariableDef) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *VariableDef) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetKey() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Key) + } + return offset +} + +func (p *VariableDef) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetDesc() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Desc) + } + return offset +} + +func (p *VariableDef) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetType() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) + } + return offset +} + +func (p *VariableDef) field1Length() int { + l := 0 + if p.IsSetKey() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Key) + } + return l +} + +func (p *VariableDef) field2Length() int { + l := 0 + if p.IsSetDesc() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Desc) + } + return l +} + +func (p *VariableDef) field3Length() int { + l := 0 + if p.IsSetType() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Type) + } + return l +} + +func (p *VariableDef) DeepCopy(s interface{}) error { + src, ok := s.(*VariableDef) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Key != nil { + var tmp string + if *src.Key != "" { + tmp = kutils.StringDeepCopy(*src.Key) + } + p.Key = &tmp + } + + if src.Desc != nil { + var tmp string + if *src.Desc != "" { + tmp = kutils.StringDeepCopy(*src.Desc) + } + p.Desc = &tmp + } + + if src.Type != nil { + tmp := *src.Type + p.Type = &tmp + } + + return nil +} + +func (p *Tool) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Tool[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *Tool) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *ToolType + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Type = _field + return offset, nil +} + +func (p *Tool) FastReadField2(buf []byte) (int, error) { + offset := 0 + _field := NewFunction() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + p.Function = _field + return offset, nil +} + +func (p *Tool) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *Tool) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *Tool) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *Tool) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetType() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) + } + return offset +} + +func (p *Tool) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetFunction() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 2) + offset += p.Function.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *Tool) field1Length() int { + l := 0 + if p.IsSetType() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Type) + } + return l +} + +func (p *Tool) field2Length() int { + l := 0 + if p.IsSetFunction() { + l += thrift.Binary.FieldBeginLength() + l += p.Function.BLength() + } + return l +} + +func (p *Tool) DeepCopy(s interface{}) error { + src, ok := s.(*Tool) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Type != nil { + tmp := *src.Type + p.Type = &tmp + } + + var _function *Function + if src.Function != nil { + _function = &Function{} + if err := _function.DeepCopy(src.Function); err != nil { + return err + } + } + p.Function = _function + + return nil +} + +func (p *Function) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_Function[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *Function) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Name = _field + return offset, nil +} + +func (p *Function) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Description = _field + return offset, nil +} + +func (p *Function) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Parameters = _field + return offset, nil +} + +func (p *Function) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *Function) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *Function) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *Function) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetName() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Name) + } + return offset +} + +func (p *Function) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetDescription() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Description) + } + return offset +} + +func (p *Function) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetParameters() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Parameters) + } + return offset +} + +func (p *Function) field1Length() int { + l := 0 + if p.IsSetName() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Name) + } + return l +} + +func (p *Function) field2Length() int { + l := 0 + if p.IsSetDescription() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Description) + } + return l +} + +func (p *Function) field3Length() int { + l := 0 + if p.IsSetParameters() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Parameters) + } + return l +} + +func (p *Function) DeepCopy(s interface{}) error { + src, ok := s.(*Function) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Name != nil { + var tmp string + if *src.Name != "" { + tmp = kutils.StringDeepCopy(*src.Name) + } + p.Name = &tmp + } + + if src.Description != nil { + var tmp string + if *src.Description != "" { + tmp = kutils.StringDeepCopy(*src.Description) + } + p.Description = &tmp + } + + if src.Parameters != nil { + var tmp string + if *src.Parameters != "" { + tmp = kutils.StringDeepCopy(*src.Parameters) + } + p.Parameters = &tmp + } + + return nil +} + +func (p *ToolCall) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 4: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField4(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_ToolCall[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *ToolCall) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Index = _field + return offset, nil +} + +func (p *ToolCall) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.ID = _field + return offset, nil +} + +func (p *ToolCall) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *ToolType + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Type = _field + return offset, nil +} + +func (p *ToolCall) FastReadField4(buf []byte) (int, error) { + offset := 0 + _field := NewFunctionCall() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + p.FunctionCall = _field + return offset, nil +} + +func (p *ToolCall) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *ToolCall) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *ToolCall) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + l += p.field4Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *ToolCall) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetIndex() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 1) + offset += thrift.Binary.WriteI32(buf[offset:], *p.Index) + } + return offset +} + +func (p *ToolCall) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetID() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.ID) + } + return offset +} + +func (p *ToolCall) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetType() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 3) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Type) + } + return offset +} + +func (p *ToolCall) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetFunctionCall() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 4) + offset += p.FunctionCall.FastWriteNocopy(buf[offset:], w) + } + return offset +} + +func (p *ToolCall) field1Length() int { + l := 0 + if p.IsSetIndex() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.I32Length() + } + return l +} + +func (p *ToolCall) field2Length() int { + l := 0 + if p.IsSetID() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.ID) + } + return l +} + +func (p *ToolCall) field3Length() int { + l := 0 + if p.IsSetType() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Type) + } + return l +} + +func (p *ToolCall) field4Length() int { + l := 0 + if p.IsSetFunctionCall() { + l += thrift.Binary.FieldBeginLength() + l += p.FunctionCall.BLength() + } + return l +} + +func (p *ToolCall) DeepCopy(s interface{}) error { + src, ok := s.(*ToolCall) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Index != nil { + tmp := *src.Index + p.Index = &tmp + } + + if src.ID != nil { + var tmp string + if *src.ID != "" { + tmp = kutils.StringDeepCopy(*src.ID) + } + p.ID = &tmp + } + + if src.Type != nil { + tmp := *src.Type + p.Type = &tmp + } + + var _functionCall *FunctionCall + if src.FunctionCall != nil { + _functionCall = &FunctionCall{} + if err := _functionCall.DeepCopy(src.FunctionCall); err != nil { + return err + } + } + p.FunctionCall = _functionCall + + return nil +} + +func (p *FunctionCall) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_FunctionCall[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *FunctionCall) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Name = _field + return offset, nil +} + +func (p *FunctionCall) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Arguments = _field + return offset, nil +} + +func (p *FunctionCall) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *FunctionCall) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *FunctionCall) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *FunctionCall) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetName() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Name) + } + return offset +} + +func (p *FunctionCall) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetArguments() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Arguments) + } + return offset +} + +func (p *FunctionCall) field1Length() int { + l := 0 + if p.IsSetName() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Name) + } + return l +} + +func (p *FunctionCall) field2Length() int { + l := 0 + if p.IsSetArguments() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Arguments) + } + return l +} + +func (p *FunctionCall) DeepCopy(s interface{}) error { + src, ok := s.(*FunctionCall) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Name != nil { + var tmp string + if *src.Name != "" { + tmp = kutils.StringDeepCopy(*src.Name) + } + p.Name = &tmp + } + + if src.Arguments != nil { + var tmp string + if *src.Arguments != "" { + tmp = kutils.StringDeepCopy(*src.Arguments) + } + p.Arguments = &tmp + } + + return nil +} + +func (p *LLMConfig) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.DOUBLE { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.I32 { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.I32 { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 4: + if fieldTypeId == thrift.DOUBLE { + l, err = p.FastReadField4(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 5: + if fieldTypeId == thrift.DOUBLE { + l, err = p.FastReadField5(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 6: + if fieldTypeId == thrift.DOUBLE { + l, err = p.FastReadField6(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 7: + if fieldTypeId == thrift.BOOL { + l, err = p.FastReadField7(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_LLMConfig[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *LLMConfig) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *float64 + if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Temperature = _field + return offset, nil +} + +func (p *LLMConfig) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.MaxTokens = _field + return offset, nil +} + +func (p *LLMConfig) FastReadField3(buf []byte) (int, error) { + offset := 0 + + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.TopK = _field + return offset, nil +} + +func (p *LLMConfig) FastReadField4(buf []byte) (int, error) { + offset := 0 + + var _field *float64 + if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.TopP = _field + return offset, nil +} + +func (p *LLMConfig) FastReadField5(buf []byte) (int, error) { + offset := 0 + + var _field *float64 + if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.PresencePenalty = _field + return offset, nil +} + +func (p *LLMConfig) FastReadField6(buf []byte) (int, error) { + offset := 0 + + var _field *float64 + if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.FrequencyPenalty = _field + return offset, nil +} + +func (p *LLMConfig) FastReadField7(buf []byte) (int, error) { + offset := 0 + + var _field *bool + if v, l, err := thrift.Binary.ReadBool(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.JSONMode = _field + return offset, nil +} + +func (p *LLMConfig) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *LLMConfig) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + offset += p.fastWriteField5(buf[offset:], w) + offset += p.fastWriteField6(buf[offset:], w) + offset += p.fastWriteField7(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *LLMConfig) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + l += p.field4Length() + l += p.field5Length() + l += p.field6Length() + l += p.field7Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *LLMConfig) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetTemperature() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 1) + offset += thrift.Binary.WriteDouble(buf[offset:], *p.Temperature) + } + return offset +} + +func (p *LLMConfig) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetMaxTokens() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 2) + offset += thrift.Binary.WriteI32(buf[offset:], *p.MaxTokens) + } + return offset +} + +func (p *LLMConfig) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetTopK() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 3) + offset += thrift.Binary.WriteI32(buf[offset:], *p.TopK) + } + return offset +} + +func (p *LLMConfig) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetTopP() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 4) + offset += thrift.Binary.WriteDouble(buf[offset:], *p.TopP) + } + return offset +} + +func (p *LLMConfig) fastWriteField5(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetPresencePenalty() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 5) + offset += thrift.Binary.WriteDouble(buf[offset:], *p.PresencePenalty) + } + return offset +} + +func (p *LLMConfig) fastWriteField6(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetFrequencyPenalty() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 6) + offset += thrift.Binary.WriteDouble(buf[offset:], *p.FrequencyPenalty) + } + return offset +} + +func (p *LLMConfig) fastWriteField7(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetJSONMode() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.BOOL, 7) + offset += thrift.Binary.WriteBool(buf[offset:], *p.JSONMode) + } + return offset +} + +func (p *LLMConfig) field1Length() int { + l := 0 + if p.IsSetTemperature() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.DoubleLength() + } + return l +} + +func (p *LLMConfig) field2Length() int { + l := 0 + if p.IsSetMaxTokens() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.I32Length() + } + return l +} + +func (p *LLMConfig) field3Length() int { + l := 0 + if p.IsSetTopK() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.I32Length() + } + return l +} + +func (p *LLMConfig) field4Length() int { + l := 0 + if p.IsSetTopP() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.DoubleLength() + } + return l +} + +func (p *LLMConfig) field5Length() int { + l := 0 + if p.IsSetPresencePenalty() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.DoubleLength() + } + return l +} + +func (p *LLMConfig) field6Length() int { + l := 0 + if p.IsSetFrequencyPenalty() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.DoubleLength() + } + return l +} + +func (p *LLMConfig) field7Length() int { + l := 0 + if p.IsSetJSONMode() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.BoolLength() + } + return l +} + +func (p *LLMConfig) DeepCopy(s interface{}) error { + src, ok := s.(*LLMConfig) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Temperature != nil { + tmp := *src.Temperature + p.Temperature = &tmp + } + + if src.MaxTokens != nil { + tmp := *src.MaxTokens + p.MaxTokens = &tmp + } + + if src.TopK != nil { + tmp := *src.TopK + p.TopK = &tmp + } + + if src.TopP != nil { + tmp := *src.TopP + p.TopP = &tmp + } + + if src.PresencePenalty != nil { + tmp := *src.PresencePenalty + p.PresencePenalty = &tmp + } + + if src.FrequencyPenalty != nil { + tmp := *src.FrequencyPenalty + p.FrequencyPenalty = &tmp + } + + if src.JSONMode != nil { + tmp := *src.JSONMode + p.JSONMode = &tmp + } + + return nil +} + +func (p *VariableVal) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.STRING { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 3: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField3(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 4: + if fieldTypeId == thrift.LIST { + l, err = p.FastReadField4(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_VariableVal[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *VariableVal) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Key = _field + return offset, nil +} + +func (p *VariableVal) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *string + if v, l, err := thrift.Binary.ReadString(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.Value = _field + return offset, nil +} + +func (p *VariableVal) FastReadField3(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*Message, 0, size) + values := make([]Message, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.PlaceholderMessages = _field + return offset, nil +} + +func (p *VariableVal) FastReadField4(buf []byte) (int, error) { + offset := 0 + + _, size, l, err := thrift.Binary.ReadListBegin(buf[offset:]) + offset += l + if err != nil { + return offset, err + } + _field := make([]*ContentPart, 0, size) + values := make([]ContentPart, size) + for i := 0; i < size; i++ { + _elem := &values[i] + _elem.InitDefault() + if l, err := _elem.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + + _field = append(_field, _elem) + } + p.MultiPartValues = _field + return offset, nil +} + +func (p *VariableVal) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *VariableVal) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + offset += p.fastWriteField3(buf[offset:], w) + offset += p.fastWriteField4(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *VariableVal) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + l += p.field3Length() + l += p.field4Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *VariableVal) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetKey() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 1) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Key) + } + return offset +} + +func (p *VariableVal) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetValue() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRING, 2) + offset += thrift.Binary.WriteStringNocopy(buf[offset:], w, *p.Value) + } + return offset +} + +func (p *VariableVal) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetPlaceholderMessages() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 3) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.PlaceholderMessages { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *VariableVal) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetMultiPartValues() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.LIST, 4) + listBeginOffset := offset + offset += thrift.Binary.ListBeginLength() + var length int + for _, v := range p.MultiPartValues { + length++ + offset += v.FastWriteNocopy(buf[offset:], w) + } + thrift.Binary.WriteListBegin(buf[listBeginOffset:], thrift.STRUCT, length) + } + return offset +} + +func (p *VariableVal) field1Length() int { + l := 0 + if p.IsSetKey() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Key) + } + return l +} + +func (p *VariableVal) field2Length() int { + l := 0 + if p.IsSetValue() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.StringLengthNocopy(*p.Value) + } + return l +} + +func (p *VariableVal) field3Length() int { + l := 0 + if p.IsSetPlaceholderMessages() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.PlaceholderMessages { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *VariableVal) field4Length() int { + l := 0 + if p.IsSetMultiPartValues() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.ListBeginLength() + for _, v := range p.MultiPartValues { + _ = v + l += v.BLength() + } + } + return l +} + +func (p *VariableVal) DeepCopy(s interface{}) error { + src, ok := s.(*VariableVal) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.Key != nil { + var tmp string + if *src.Key != "" { + tmp = kutils.StringDeepCopy(*src.Key) + } + p.Key = &tmp + } + + if src.Value != nil { + var tmp string + if *src.Value != "" { + tmp = kutils.StringDeepCopy(*src.Value) + } + p.Value = &tmp + } + + if src.PlaceholderMessages != nil { + p.PlaceholderMessages = make([]*Message, 0, len(src.PlaceholderMessages)) + for _, elem := range src.PlaceholderMessages { + var _elem *Message + if elem != nil { + _elem = &Message{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.PlaceholderMessages = append(p.PlaceholderMessages, _elem) + } + } + + if src.MultiPartValues != nil { + p.MultiPartValues = make([]*ContentPart, 0, len(src.MultiPartValues)) + for _, elem := range src.MultiPartValues { + var _elem *ContentPart + if elem != nil { + _elem = &ContentPart{} + if err := _elem.DeepCopy(elem); err != nil { + return err + } + } + + p.MultiPartValues = append(p.MultiPartValues, _elem) + } + } + + return nil +} + +func (p *TokenUsage) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + case 2: + if fieldTypeId == thrift.I32 { + l, err = p.FastReadField2(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_TokenUsage[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *TokenUsage) FastReadField1(buf []byte) (int, error) { + offset := 0 + + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.InputTokens = _field + return offset, nil +} + +func (p *TokenUsage) FastReadField2(buf []byte) (int, error) { + offset := 0 + + var _field *int32 + if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + _field = &v + } + p.OutputTokens = _field + return offset, nil +} + +func (p *TokenUsage) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *TokenUsage) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + offset += p.fastWriteField2(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *TokenUsage) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + l += p.field2Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *TokenUsage) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetInputTokens() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 1) + offset += thrift.Binary.WriteI32(buf[offset:], *p.InputTokens) + } + return offset +} + +func (p *TokenUsage) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetOutputTokens() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 2) + offset += thrift.Binary.WriteI32(buf[offset:], *p.OutputTokens) + } + return offset +} + +func (p *TokenUsage) field1Length() int { + l := 0 + if p.IsSetInputTokens() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.I32Length() + } + return l +} + +func (p *TokenUsage) field2Length() int { + l := 0 + if p.IsSetOutputTokens() { + l += thrift.Binary.FieldBeginLength() + l += thrift.Binary.I32Length() + } + return l +} + +func (p *TokenUsage) DeepCopy(s interface{}) error { + src, ok := s.(*TokenUsage) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + if src.InputTokens != nil { + tmp := *src.InputTokens + p.InputTokens = &tmp + } + + if src.OutputTokens != nil { + tmp := *src.OutputTokens + p.OutputTokens = &tmp + } + + return nil +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastRead(buf []byte) (int, error) { + + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + } + + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastReadField1(buf []byte) (int, error) { + offset := 0 + _field := NewBatchGetPromptByPromptKeyRequest() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l + } + p.Req = _field + return offset, nil +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) BLength() int { + l := 0 + if p != nil { + l += p.field1Length() + } + l += thrift.Binary.FieldStopLength() + return l +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 1) + offset += p.Req.FastWriteNocopy(buf[offset:], w) + return offset +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) field1Length() int { + l := 0 + l += thrift.Binary.FieldBeginLength() + l += p.Req.BLength() + return l +} + +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) DeepCopy(s interface{}) error { + src, ok := s.(*PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } + + var _req *BatchGetPromptByPromptKeyRequest + if src.Req != nil { + _req = &BatchGetPromptByPromptKeyRequest{} + if err := _req.DeepCopy(src.Req); err != nil { + return err + } + } + p.Req = _req + return nil } -func (p *LLMConfig) FastRead(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastRead(buf []byte) (int, error) { var err error var offset int @@ -3088,93 +6508,9 @@ func (p *LLMConfig) FastRead(buf []byte) (int, error) { break } switch fieldId { - case 1: - if fieldTypeId == thrift.DOUBLE { - l, err = p.FastReadField1(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 2: - if fieldTypeId == thrift.I32 { - l, err = p.FastReadField2(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 3: - if fieldTypeId == thrift.I32 { - l, err = p.FastReadField3(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 4: - if fieldTypeId == thrift.DOUBLE { - l, err = p.FastReadField4(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 5: - if fieldTypeId == thrift.DOUBLE { - l, err = p.FastReadField5(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 6: - if fieldTypeId == thrift.DOUBLE { - l, err = p.FastReadField6(buf[offset:]) - offset += l - if err != nil { - goto ReadFieldError - } - } else { - l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) - offset += l - if err != nil { - goto SkipFieldError - } - } - case 7: - if fieldTypeId == thrift.BOOL { - l, err = p.FastReadField7(buf[offset:]) + case 0: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField0(buf[offset:]) offset += l if err != nil { goto ReadFieldError @@ -3199,314 +6535,316 @@ func (p *LLMConfig) FastRead(buf []byte) (int, error) { ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_LLMConfig[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyResult[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *LLMConfig) FastReadField1(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastReadField0(buf []byte) (int, error) { offset := 0 - - var _field *float64 - if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { + _field := NewBatchGetPromptByPromptKeyResponse() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.Temperature = _field + p.Success = _field return offset, nil } -func (p *LLMConfig) FastReadField2(buf []byte) (int, error) { - offset := 0 - - var _field *int32 - if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v - } - p.MaxTokens = _field - return offset, nil +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) } -func (p *LLMConfig) FastReadField3(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 + if p != nil { + offset += p.fastWriteField0(buf[offset:], w) + } + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset +} - var _field *int32 - if v, l, err := thrift.Binary.ReadI32(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) BLength() int { + l := 0 + if p != nil { + l += p.field0Length() } - p.TopK = _field - return offset, nil + l += thrift.Binary.FieldStopLength() + return l } -func (p *LLMConfig) FastReadField4(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) fastWriteField0(buf []byte, w thrift.NocopyWriter) int { offset := 0 + if p.IsSetSuccess() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 0) + offset += p.Success.FastWriteNocopy(buf[offset:], w) + } + return offset +} - var _field *float64 - if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) field0Length() int { + l := 0 + if p.IsSetSuccess() { + l += thrift.Binary.FieldBeginLength() + l += p.Success.BLength() } - p.TopP = _field - return offset, nil + return l } -func (p *LLMConfig) FastReadField5(buf []byte) (int, error) { - offset := 0 +func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) DeepCopy(s interface{}) error { + src, ok := s.(*PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) + } - var _field *float64 - if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { - return offset, err - } else { - offset += l - _field = &v + var _success *BatchGetPromptByPromptKeyResponse + if src.Success != nil { + _success = &BatchGetPromptByPromptKeyResponse{} + if err := _success.DeepCopy(src.Success); err != nil { + return err + } } - p.PresencePenalty = _field - return offset, nil + p.Success = _success + + return nil } -func (p *LLMConfig) FastReadField6(buf []byte) (int, error) { - offset := 0 +func (p *PromptOpenAPIServiceExecuteArgs) FastRead(buf []byte) (int, error) { - var _field *float64 - if v, l, err := thrift.Binary.ReadDouble(buf[offset:]); err != nil { - return offset, err - } else { + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) offset += l - _field = &v + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField1(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } } - p.FrequencyPenalty = _field + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteArgs[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *LLMConfig) FastReadField7(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceExecuteArgs) FastReadField1(buf []byte) (int, error) { offset := 0 - - var _field *bool - if v, l, err := thrift.Binary.ReadBool(buf[offset:]); err != nil { + _field := NewExecuteRequest() + if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { offset += l - _field = &v } - p.JSONMode = _field + p.Req = _field return offset, nil } -func (p *LLMConfig) FastWrite(buf []byte) int { +func (p *PromptOpenAPIServiceExecuteArgs) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) -} - -func (p *LLMConfig) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p != nil { - offset += p.fastWriteField1(buf[offset:], w) - offset += p.fastWriteField2(buf[offset:], w) - offset += p.fastWriteField3(buf[offset:], w) - offset += p.fastWriteField4(buf[offset:], w) - offset += p.fastWriteField5(buf[offset:], w) - offset += p.fastWriteField6(buf[offset:], w) - offset += p.fastWriteField7(buf[offset:], w) +} + +func (p *PromptOpenAPIServiceExecuteArgs) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField1(buf[offset:], w) } offset += thrift.Binary.WriteFieldStop(buf[offset:]) return offset } -func (p *LLMConfig) BLength() int { +func (p *PromptOpenAPIServiceExecuteArgs) BLength() int { l := 0 if p != nil { l += p.field1Length() - l += p.field2Length() - l += p.field3Length() - l += p.field4Length() - l += p.field5Length() - l += p.field6Length() - l += p.field7Length() } l += thrift.Binary.FieldStopLength() return l } -func (p *LLMConfig) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptOpenAPIServiceExecuteArgs) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 - if p.IsSetTemperature() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 1) - offset += thrift.Binary.WriteDouble(buf[offset:], *p.Temperature) - } + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 1) + offset += p.Req.FastWriteNocopy(buf[offset:], w) return offset } -func (p *LLMConfig) fastWriteField2(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetMaxTokens() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 2) - offset += thrift.Binary.WriteI32(buf[offset:], *p.MaxTokens) - } - return offset +func (p *PromptOpenAPIServiceExecuteArgs) field1Length() int { + l := 0 + l += thrift.Binary.FieldBeginLength() + l += p.Req.BLength() + return l } -func (p *LLMConfig) fastWriteField3(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetTopK() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.I32, 3) - offset += thrift.Binary.WriteI32(buf[offset:], *p.TopK) +func (p *PromptOpenAPIServiceExecuteArgs) DeepCopy(s interface{}) error { + src, ok := s.(*PromptOpenAPIServiceExecuteArgs) + if !ok { + return fmt.Errorf("%T's type not matched %T", s, p) } - return offset -} -func (p *LLMConfig) fastWriteField4(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetTopP() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 4) - offset += thrift.Binary.WriteDouble(buf[offset:], *p.TopP) + var _req *ExecuteRequest + if src.Req != nil { + _req = &ExecuteRequest{} + if err := _req.DeepCopy(src.Req); err != nil { + return err + } } - return offset -} + p.Req = _req -func (p *LLMConfig) fastWriteField5(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetPresencePenalty() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 5) - offset += thrift.Binary.WriteDouble(buf[offset:], *p.PresencePenalty) - } - return offset + return nil } -func (p *LLMConfig) fastWriteField6(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetFrequencyPenalty() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.DOUBLE, 6) - offset += thrift.Binary.WriteDouble(buf[offset:], *p.FrequencyPenalty) - } - return offset -} +func (p *PromptOpenAPIServiceExecuteResult) FastRead(buf []byte) (int, error) { -func (p *LLMConfig) fastWriteField7(buf []byte, w thrift.NocopyWriter) int { - offset := 0 - if p.IsSetJSONMode() { - offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.BOOL, 7) - offset += thrift.Binary.WriteBool(buf[offset:], *p.JSONMode) + var err error + var offset int + var l int + var fieldTypeId thrift.TType + var fieldId int16 + for { + fieldTypeId, fieldId, l, err = thrift.Binary.ReadFieldBegin(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldBeginError + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 0: + if fieldTypeId == thrift.STRUCT { + l, err = p.FastReadField0(buf[offset:]) + offset += l + if err != nil { + goto ReadFieldError + } + } else { + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } + default: + l, err = thrift.Binary.Skip(buf[offset:], fieldTypeId) + offset += l + if err != nil { + goto SkipFieldError + } + } } - return offset -} -func (p *LLMConfig) field1Length() int { - l := 0 - if p.IsSetTemperature() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.DoubleLength() - } - return l + return offset, nil +ReadFieldBeginError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) +ReadFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteResult[fieldId]), err) +SkipFieldError: + return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *LLMConfig) field2Length() int { - l := 0 - if p.IsSetMaxTokens() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.I32Length() +func (p *PromptOpenAPIServiceExecuteResult) FastReadField0(buf []byte) (int, error) { + offset := 0 + _field := NewExecuteResponse() + if l, err := _field.FastRead(buf[offset:]); err != nil { + return offset, err + } else { + offset += l } - return l + p.Success = _field + return offset, nil } -func (p *LLMConfig) field3Length() int { - l := 0 - if p.IsSetTopK() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.I32Length() - } - return l +func (p *PromptOpenAPIServiceExecuteResult) FastWrite(buf []byte) int { + return p.FastWriteNocopy(buf, nil) } -func (p *LLMConfig) field4Length() int { - l := 0 - if p.IsSetTopP() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.DoubleLength() +func (p *PromptOpenAPIServiceExecuteResult) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p != nil { + offset += p.fastWriteField0(buf[offset:], w) } - return l + offset += thrift.Binary.WriteFieldStop(buf[offset:]) + return offset } -func (p *LLMConfig) field5Length() int { +func (p *PromptOpenAPIServiceExecuteResult) BLength() int { l := 0 - if p.IsSetPresencePenalty() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.DoubleLength() + if p != nil { + l += p.field0Length() } + l += thrift.Binary.FieldStopLength() return l } -func (p *LLMConfig) field6Length() int { - l := 0 - if p.IsSetFrequencyPenalty() { - l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.DoubleLength() +func (p *PromptOpenAPIServiceExecuteResult) fastWriteField0(buf []byte, w thrift.NocopyWriter) int { + offset := 0 + if p.IsSetSuccess() { + offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 0) + offset += p.Success.FastWriteNocopy(buf[offset:], w) } - return l + return offset } -func (p *LLMConfig) field7Length() int { +func (p *PromptOpenAPIServiceExecuteResult) field0Length() int { l := 0 - if p.IsSetJSONMode() { + if p.IsSetSuccess() { l += thrift.Binary.FieldBeginLength() - l += thrift.Binary.BoolLength() + l += p.Success.BLength() } return l } -func (p *LLMConfig) DeepCopy(s interface{}) error { - src, ok := s.(*LLMConfig) +func (p *PromptOpenAPIServiceExecuteResult) DeepCopy(s interface{}) error { + src, ok := s.(*PromptOpenAPIServiceExecuteResult) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - if src.Temperature != nil { - tmp := *src.Temperature - p.Temperature = &tmp - } - - if src.MaxTokens != nil { - tmp := *src.MaxTokens - p.MaxTokens = &tmp - } - - if src.TopK != nil { - tmp := *src.TopK - p.TopK = &tmp - } - - if src.TopP != nil { - tmp := *src.TopP - p.TopP = &tmp - } - - if src.PresencePenalty != nil { - tmp := *src.PresencePenalty - p.PresencePenalty = &tmp - } - - if src.FrequencyPenalty != nil { - tmp := *src.FrequencyPenalty - p.FrequencyPenalty = &tmp - } - - if src.JSONMode != nil { - tmp := *src.JSONMode - p.JSONMode = &tmp + var _success *ExecuteResponse + if src.Success != nil { + _success = &ExecuteResponse{} + if err := _success.DeepCopy(src.Success); err != nil { + return err + } } + p.Success = _success return nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastRead(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) FastRead(buf []byte) (int, error) { var err error var offset int @@ -3550,14 +6888,14 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastRead(buf []byte) ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteStreamingArgs[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastReadField1(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) FastReadField1(buf []byte) (int, error) { offset := 0 - _field := NewBatchGetPromptByPromptKeyRequest() + _field := NewExecuteRequest() if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { @@ -3567,11 +6905,11 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastReadField1(buf [ return offset, nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastWrite(buf []byte) int { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField1(buf[offset:], w) @@ -3580,7 +6918,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) FastWriteNocopy(buf return offset } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) BLength() int { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) BLength() int { l := 0 if p != nil { l += p.field1Length() @@ -3589,29 +6927,29 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) BLength() int { return l } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) fastWriteField1(buf []byte, w thrift.NocopyWriter) int { offset := 0 offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 1) offset += p.Req.FastWriteNocopy(buf[offset:], w) return offset } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) field1Length() int { +func (p *PromptOpenAPIServiceExecuteStreamingArgs) field1Length() int { l := 0 l += thrift.Binary.FieldBeginLength() l += p.Req.BLength() return l } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) DeepCopy(s interface{}) error { - src, ok := s.(*PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) +func (p *PromptOpenAPIServiceExecuteStreamingArgs) DeepCopy(s interface{}) error { + src, ok := s.(*PromptOpenAPIServiceExecuteStreamingArgs) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - var _req *BatchGetPromptByPromptKeyRequest + var _req *ExecuteRequest if src.Req != nil { - _req = &BatchGetPromptByPromptKeyRequest{} + _req = &ExecuteRequest{} if err := _req.DeepCopy(src.Req); err != nil { return err } @@ -3621,7 +6959,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) DeepCopy(s interface return nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastRead(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceExecuteStreamingResult) FastRead(buf []byte) (int, error) { var err error var offset int @@ -3665,14 +7003,14 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastRead(buf []byt ReadFieldBeginError: return offset, thrift.PrependError(fmt.Sprintf("%T read field %d begin error: ", p, fieldId), err) ReadFieldError: - return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceBatchGetPromptByPromptKeyResult[fieldId]), err) + return offset, thrift.PrependError(fmt.Sprintf("%T read field %d '%s' error: ", p, fieldId, fieldIDToName_PromptOpenAPIServiceExecuteStreamingResult[fieldId]), err) SkipFieldError: return offset, thrift.PrependError(fmt.Sprintf("%T field %d skip type %d error: ", p, fieldId, fieldTypeId), err) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastReadField0(buf []byte) (int, error) { +func (p *PromptOpenAPIServiceExecuteStreamingResult) FastReadField0(buf []byte) (int, error) { offset := 0 - _field := NewBatchGetPromptByPromptKeyResponse() + _field := NewExecuteStreamingResponse() if l, err := _field.FastRead(buf[offset:]); err != nil { return offset, err } else { @@ -3682,11 +7020,11 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastReadField0(buf return offset, nil } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastWrite(buf []byte) int { +func (p *PromptOpenAPIServiceExecuteStreamingResult) FastWrite(buf []byte) int { return p.FastWriteNocopy(buf, nil) } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptOpenAPIServiceExecuteStreamingResult) FastWriteNocopy(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p != nil { offset += p.fastWriteField0(buf[offset:], w) @@ -3695,7 +7033,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) FastWriteNocopy(bu return offset } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) BLength() int { +func (p *PromptOpenAPIServiceExecuteStreamingResult) BLength() int { l := 0 if p != nil { l += p.field0Length() @@ -3704,7 +7042,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) BLength() int { return l } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) fastWriteField0(buf []byte, w thrift.NocopyWriter) int { +func (p *PromptOpenAPIServiceExecuteStreamingResult) fastWriteField0(buf []byte, w thrift.NocopyWriter) int { offset := 0 if p.IsSetSuccess() { offset += thrift.Binary.WriteFieldBegin(buf[offset:], thrift.STRUCT, 0) @@ -3713,7 +7051,7 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) fastWriteField0(bu return offset } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) field0Length() int { +func (p *PromptOpenAPIServiceExecuteStreamingResult) field0Length() int { l := 0 if p.IsSetSuccess() { l += thrift.Binary.FieldBeginLength() @@ -3722,15 +7060,15 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) field0Length() int return l } -func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) DeepCopy(s interface{}) error { - src, ok := s.(*PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) +func (p *PromptOpenAPIServiceExecuteStreamingResult) DeepCopy(s interface{}) error { + src, ok := s.(*PromptOpenAPIServiceExecuteStreamingResult) if !ok { return fmt.Errorf("%T's type not matched %T", s, p) } - var _success *BatchGetPromptByPromptKeyResponse + var _success *ExecuteStreamingResponse if src.Success != nil { - _success = &BatchGetPromptByPromptKeyResponse{} + _success = &ExecuteStreamingResponse{} if err := _success.DeepCopy(src.Success); err != nil { return err } @@ -3747,3 +7085,19 @@ func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyArgs) GetFirstArgument() i func (p *PromptOpenAPIServiceBatchGetPromptByPromptKeyResult) GetResult() interface{} { return p.Success } + +func (p *PromptOpenAPIServiceExecuteArgs) GetFirstArgument() interface{} { + return p.Req +} + +func (p *PromptOpenAPIServiceExecuteResult) GetResult() interface{} { + return p.Success +} + +func (p *PromptOpenAPIServiceExecuteStreamingArgs) GetFirstArgument() interface{} { + return p.Req +} + +func (p *PromptOpenAPIServiceExecuteStreamingResult) GetResult() interface{} { + return p.Success +} diff --git a/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/client.go b/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/client.go index f826f07a9..32724c2e7 100644 --- a/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/client.go +++ b/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/client.go @@ -6,19 +6,28 @@ import ( "context" client "github.com/cloudwego/kitex/client" callopt "github.com/cloudwego/kitex/client/callopt" + streamcall "github.com/cloudwego/kitex/client/callopt/streamcall" + streaming "github.com/cloudwego/kitex/pkg/streaming" + transport "github.com/cloudwego/kitex/transport" openapi "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" ) // Client is designed to provide IDL-compatible methods with call-option parameter for kitex framework. type Client interface { BatchGetPromptByPromptKey(ctx context.Context, req *openapi.BatchGetPromptByPromptKeyRequest, callOptions ...callopt.Option) (r *openapi.BatchGetPromptByPromptKeyResponse, err error) + Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (r *openapi.ExecuteResponse, err error) + ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream PromptOpenAPIService_ExecuteStreamingClient, err error) } +type PromptOpenAPIService_ExecuteStreamingClient streaming.ServerStreamingClient[openapi.ExecuteStreamingResponse] + // NewClient creates a client for the service defined in IDL. func NewClient(destService string, opts ...client.Option) (Client, error) { var options []client.Option options = append(options, client.WithDestService(destService)) + options = append(options, client.WithTransportProtocol(transport.TTHeaderStreaming)) + options = append(options, opts...) kc, err := client.NewClient(serviceInfo(), options...) @@ -47,3 +56,13 @@ func (p *kPromptOpenAPIServiceClient) BatchGetPromptByPromptKey(ctx context.Cont ctx = client.NewCtxWithCallOptions(ctx, callOptions) return p.kClient.BatchGetPromptByPromptKey(ctx, req) } + +func (p *kPromptOpenAPIServiceClient) Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (r *openapi.ExecuteResponse, err error) { + ctx = client.NewCtxWithCallOptions(ctx, callOptions) + return p.kClient.Execute(ctx, req) +} + +func (p *kPromptOpenAPIServiceClient) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream PromptOpenAPIService_ExecuteStreamingClient, err error) { + ctx = client.NewCtxWithCallOptions(ctx, streamcall.GetCallOptions(callOptions)) + return p.kClient.ExecuteStreaming(ctx, req) +} diff --git a/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/promptopenapiservice.go b/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/promptopenapiservice.go index 9985fdba3..9c47b8a42 100644 --- a/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/promptopenapiservice.go +++ b/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice/promptopenapiservice.go @@ -7,6 +7,7 @@ import ( "errors" client "github.com/cloudwego/kitex/client" kitex "github.com/cloudwego/kitex/pkg/serviceinfo" + streaming "github.com/cloudwego/kitex/pkg/streaming" openapi "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" ) @@ -20,6 +21,20 @@ var serviceMethods = map[string]kitex.MethodInfo{ false, kitex.WithStreamingMode(kitex.StreamingNone), ), + "Execute": kitex.NewMethodInfo( + executeHandler, + newPromptOpenAPIServiceExecuteArgs, + newPromptOpenAPIServiceExecuteResult, + false, + kitex.WithStreamingMode(kitex.StreamingNone), + ), + "ExecuteStreaming": kitex.NewMethodInfo( + executeStreamingHandler, + newPromptOpenAPIServiceExecuteStreamingArgs, + newPromptOpenAPIServiceExecuteStreamingResult, + false, + kitex.WithStreamingMode(kitex.StreamingServer), + ), } var ( @@ -72,6 +87,46 @@ func newPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() interface{} { return openapi.NewPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() } +func executeHandler(ctx context.Context, handler interface{}, arg, result interface{}) error { + realArg := arg.(*openapi.PromptOpenAPIServiceExecuteArgs) + realResult := result.(*openapi.PromptOpenAPIServiceExecuteResult) + success, err := handler.(openapi.PromptOpenAPIService).Execute(ctx, realArg.Req) + if err != nil { + return err + } + realResult.Success = success + return nil +} + +func newPromptOpenAPIServiceExecuteArgs() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteArgs() +} + +func newPromptOpenAPIServiceExecuteResult() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteResult() +} + +func executeStreamingHandler(ctx context.Context, handler interface{}, arg, result interface{}) error { + st, err := streaming.GetServerStreamFromArg(arg) + if err != nil { + return err + } + stream := streaming.NewServerStreamingServer[openapi.ExecuteStreamingResponse](st) + req := new(openapi.ExecuteRequest) + if err := stream.RecvMsg(ctx, req); err != nil { + return err + } + return handler.(openapi.PromptOpenAPIService).ExecuteStreaming(ctx, req, stream) +} + +func newPromptOpenAPIServiceExecuteStreamingArgs() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteStreamingArgs() +} + +func newPromptOpenAPIServiceExecuteStreamingResult() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteStreamingResult() +} + type kClient struct { c client.Client sc client.Streaming @@ -93,3 +148,28 @@ func (p *kClient) BatchGetPromptByPromptKey(ctx context.Context, req *openapi.Ba } return _result.GetSuccess(), nil } + +func (p *kClient) Execute(ctx context.Context, req *openapi.ExecuteRequest) (r *openapi.ExecuteResponse, err error) { + var _args openapi.PromptOpenAPIServiceExecuteArgs + _args.Req = req + var _result openapi.PromptOpenAPIServiceExecuteResult + if err = p.c.Call(ctx, "Execute", &_args, &_result); err != nil { + return + } + return _result.GetSuccess(), nil +} + +func (p *kClient) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest) (PromptOpenAPIService_ExecuteStreamingClient, error) { + st, err := p.sc.StreamX(ctx, "ExecuteStreaming") + if err != nil { + return nil, err + } + stream := streaming.NewServerStreamingClient[openapi.ExecuteStreamingResponse](st) + if err := stream.SendMsg(ctx, req); err != nil { + return nil, err + } + if err := stream.CloseSend(ctx); err != nil { + return nil, err + } + return stream, nil +} diff --git a/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/client.go b/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/client.go index f826f07a9..32724c2e7 100644 --- a/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/client.go +++ b/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/client.go @@ -6,19 +6,28 @@ import ( "context" client "github.com/cloudwego/kitex/client" callopt "github.com/cloudwego/kitex/client/callopt" + streamcall "github.com/cloudwego/kitex/client/callopt/streamcall" + streaming "github.com/cloudwego/kitex/pkg/streaming" + transport "github.com/cloudwego/kitex/transport" openapi "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" ) // Client is designed to provide IDL-compatible methods with call-option parameter for kitex framework. type Client interface { BatchGetPromptByPromptKey(ctx context.Context, req *openapi.BatchGetPromptByPromptKeyRequest, callOptions ...callopt.Option) (r *openapi.BatchGetPromptByPromptKeyResponse, err error) + Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (r *openapi.ExecuteResponse, err error) + ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream PromptOpenAPIService_ExecuteStreamingClient, err error) } +type PromptOpenAPIService_ExecuteStreamingClient streaming.ServerStreamingClient[openapi.ExecuteStreamingResponse] + // NewClient creates a client for the service defined in IDL. func NewClient(destService string, opts ...client.Option) (Client, error) { var options []client.Option options = append(options, client.WithDestService(destService)) + options = append(options, client.WithTransportProtocol(transport.TTHeaderStreaming)) + options = append(options, opts...) kc, err := client.NewClient(serviceInfo(), options...) @@ -47,3 +56,13 @@ func (p *kPromptOpenAPIServiceClient) BatchGetPromptByPromptKey(ctx context.Cont ctx = client.NewCtxWithCallOptions(ctx, callOptions) return p.kClient.BatchGetPromptByPromptKey(ctx, req) } + +func (p *kPromptOpenAPIServiceClient) Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (r *openapi.ExecuteResponse, err error) { + ctx = client.NewCtxWithCallOptions(ctx, callOptions) + return p.kClient.Execute(ctx, req) +} + +func (p *kPromptOpenAPIServiceClient) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream PromptOpenAPIService_ExecuteStreamingClient, err error) { + ctx = client.NewCtxWithCallOptions(ctx, streamcall.GetCallOptions(callOptions)) + return p.kClient.ExecuteStreaming(ctx, req) +} diff --git a/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/promptopenapiservice.go b/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/promptopenapiservice.go index 0738d01c3..28331e999 100644 --- a/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/promptopenapiservice.go +++ b/backend/kitex_gen/coze/loop/prompt/promptopenapiservice/promptopenapiservice.go @@ -7,6 +7,7 @@ import ( "errors" client "github.com/cloudwego/kitex/client" kitex "github.com/cloudwego/kitex/pkg/serviceinfo" + streaming "github.com/cloudwego/kitex/pkg/streaming" prompt "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt" openapi "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" ) @@ -21,6 +22,20 @@ var serviceMethods = map[string]kitex.MethodInfo{ false, kitex.WithStreamingMode(kitex.StreamingNone), ), + "Execute": kitex.NewMethodInfo( + executeHandler, + newPromptOpenAPIServiceExecuteArgs, + newPromptOpenAPIServiceExecuteResult, + false, + kitex.WithStreamingMode(kitex.StreamingNone), + ), + "ExecuteStreaming": kitex.NewMethodInfo( + executeStreamingHandler, + newPromptOpenAPIServiceExecuteStreamingArgs, + newPromptOpenAPIServiceExecuteStreamingResult, + false, + kitex.WithStreamingMode(kitex.StreamingServer), + ), } var ( @@ -73,6 +88,46 @@ func newPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() interface{} { return openapi.NewPromptOpenAPIServiceBatchGetPromptByPromptKeyResult() } +func executeHandler(ctx context.Context, handler interface{}, arg, result interface{}) error { + realArg := arg.(*openapi.PromptOpenAPIServiceExecuteArgs) + realResult := result.(*openapi.PromptOpenAPIServiceExecuteResult) + success, err := handler.(openapi.PromptOpenAPIService).Execute(ctx, realArg.Req) + if err != nil { + return err + } + realResult.Success = success + return nil +} + +func newPromptOpenAPIServiceExecuteArgs() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteArgs() +} + +func newPromptOpenAPIServiceExecuteResult() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteResult() +} + +func executeStreamingHandler(ctx context.Context, handler interface{}, arg, result interface{}) error { + st, err := streaming.GetServerStreamFromArg(arg) + if err != nil { + return err + } + stream := streaming.NewServerStreamingServer[openapi.ExecuteStreamingResponse](st) + req := new(openapi.ExecuteRequest) + if err := stream.RecvMsg(ctx, req); err != nil { + return err + } + return handler.(openapi.PromptOpenAPIService).ExecuteStreaming(ctx, req, stream) +} + +func newPromptOpenAPIServiceExecuteStreamingArgs() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteStreamingArgs() +} + +func newPromptOpenAPIServiceExecuteStreamingResult() interface{} { + return openapi.NewPromptOpenAPIServiceExecuteStreamingResult() +} + type kClient struct { c client.Client sc client.Streaming @@ -94,3 +149,28 @@ func (p *kClient) BatchGetPromptByPromptKey(ctx context.Context, req *openapi.Ba } return _result.GetSuccess(), nil } + +func (p *kClient) Execute(ctx context.Context, req *openapi.ExecuteRequest) (r *openapi.ExecuteResponse, err error) { + var _args openapi.PromptOpenAPIServiceExecuteArgs + _args.Req = req + var _result openapi.PromptOpenAPIServiceExecuteResult + if err = p.c.Call(ctx, "Execute", &_args, &_result); err != nil { + return + } + return _result.GetSuccess(), nil +} + +func (p *kClient) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest) (PromptOpenAPIService_ExecuteStreamingClient, error) { + st, err := p.sc.StreamX(ctx, "ExecuteStreaming") + if err != nil { + return nil, err + } + stream := streaming.NewServerStreamingClient[openapi.ExecuteStreamingResponse](st) + if err := stream.SendMsg(ctx, req); err != nil { + return nil, err + } + if err := stream.CloseSend(ctx); err != nil { + return nil, err + } + return stream, nil +} diff --git a/backend/loop_gen/coze/loop/prompt/loopenapi/local_promptopenapiservice.go b/backend/loop_gen/coze/loop/prompt/loopenapi/local_promptopenapiservice.go index fe8770c9a..db5f7cf57 100644 --- a/backend/loop_gen/coze/loop/prompt/loopenapi/local_promptopenapiservice.go +++ b/backend/loop_gen/coze/loop/prompt/loopenapi/local_promptopenapiservice.go @@ -3,11 +3,15 @@ package loopenapi // import github.com/coze-dev/coze-loop/backend/loopenapi import ( "context" + "fmt" "github.com/cloudwego/kitex/client/callopt" + "github.com/cloudwego/kitex/client/callopt/streamcall" "github.com/cloudwego/kitex/pkg/endpoint" "github.com/cloudwego/kitex/pkg/rpcinfo" "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" + "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi/promptopenapiservice" + "github.com/coze-dev/coze-loop/backend/loop_gen/infra/kitex/localstream" ) type LocalPromptOpenAPIService struct { @@ -43,6 +47,49 @@ func (l *LocalPromptOpenAPIService) BatchGetPromptByPromptKey(ctx context.Contex return result.GetSuccess(), nil } +func (l *LocalPromptOpenAPIService) Execute(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...callopt.Option) (*openapi.ExecuteResponse, error) { + chain := l.mds(func(ctx context.Context, in, out interface{}) error { + arg := in.(*openapi.PromptOpenAPIServiceExecuteArgs) + result := out.(*openapi.PromptOpenAPIServiceExecuteResult) + resp, err := l.impl.Execute(ctx, arg.Req) + if err != nil { + return err + } + result.SetSuccess(resp) + return nil + }) + + arg := &openapi.PromptOpenAPIServiceExecuteArgs{Req: req} + result := &openapi.PromptOpenAPIServiceExecuteResult{} + ctx = l.injectRPCInfo(ctx, "Execute") + if err := chain(ctx, arg, result); err != nil { + return nil, err + } + return result.GetSuccess(), nil +} + +func (l *LocalPromptOpenAPIService) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, callOptions ...streamcall.Option) (stream promptopenapiservice.PromptOpenAPIService_ExecuteStreamingClient, err error) { + ctx = l.injectRPCInfo(ctx, "ExecuteStreaming") + errCh := make(chan error) + msgCh := make(chan *openapi.ExecuteStreamingResponse) + ls := localstream.NewInMemStream(ctx, msgCh, errCh) + + go func() { + defer func() { + if r := recover(); r != nil { + errCh <- fmt.Errorf("panic recovered: %v", r) + } + }() + defer func() { _ = ls.CloseSend(ctx) }() + + if err := l.impl.ExecuteStreaming(ctx, req, ls); err != nil { + errCh <- err + } + }() + + return ls, nil +} + func (l *LocalPromptOpenAPIService) injectRPCInfo(ctx context.Context, method string) context.Context { rpcStats := rpcinfo.AsMutableRPCStats(rpcinfo.NewRPCStats()) ri := rpcinfo.NewRPCInfo( diff --git a/backend/modules/llm/domain/entity/common.go b/backend/modules/llm/domain/entity/common.go index e60fc05dd..e710567f2 100644 --- a/backend/modules/llm/domain/entity/common.go +++ b/backend/modules/llm/domain/entity/common.go @@ -6,10 +6,11 @@ package entity type Scenario string const ( - ScenarioDefault Scenario = "default" - ScenarioPromptDebug Scenario = "prompt_debug" - ScenarioEvalTarget Scenario = "eval_target" - ScenarioEvaluator Scenario = "evaluator" + ScenarioDefault Scenario = "default" + ScenarioPromptDebug Scenario = "prompt_debug" + ScenarioEvalTarget Scenario = "eval_target" + ScenarioEvaluator Scenario = "evaluator" + ScenarioPromptAsAService Scenario = "prompt_as_a_service" // ptaas ) func ScenarioValue(scenario *Scenario) Scenario { diff --git a/backend/modules/prompt/application/convertor/openapi.go b/backend/modules/prompt/application/convertor/openapi.go index af4fa56b8..f0b2836d4 100644 --- a/backend/modules/prompt/application/convertor/openapi.go +++ b/backend/modules/prompt/application/convertor/openapi.go @@ -65,9 +65,12 @@ func OpenAPIMessageDO2DTO(do *entity.Message) *openapi.Message { return nil } return &openapi.Message{ - Role: ptr.Of(RoleDO2DTO(do.Role)), - Content: do.Content, - Parts: OpenAPIBatchContentPartDO2DTO(do.Parts), + Role: ptr.Of(RoleDO2DTO(do.Role)), + ReasoningContent: do.ReasoningContent, + Content: do.Content, + Parts: OpenAPIBatchContentPartDO2DTO(do.Parts), + ToolCallID: do.ToolCallID, + ToolCalls: OpenAPIBatchToolCallDO2DTO(do.ToolCalls), } } @@ -170,9 +173,15 @@ func OpenAPIContentPartDO2DTO(do *entity.ContentPart) *openapi.ContentPart { if do == nil { return nil } + var imageURL *string + if do.ImageURL != nil { + imageURL = ptr.Of(do.ImageURL.URL) + } return &openapi.ContentPart{ - Type: ptr.Of(OpenAPIContentTypeDO2DTO(do.Type)), - Text: do.Text, + Type: ptr.Of(OpenAPIContentTypeDO2DTO(do.Type)), + Text: do.Text, + ImageURL: imageURL, + Base64Data: do.Base64Data, } } @@ -180,9 +189,230 @@ func OpenAPIContentTypeDO2DTO(do entity.ContentType) openapi.ContentType { switch do { case entity.ContentTypeText: return openapi.ContentTypeText + case entity.ContentTypeImageURL: + return openapi.ContentTypeImageURL + case entity.ContentTypeBase64Data: + return openapi.ContentTypeBase64Data case entity.ContentTypeMultiPartVariable: return openapi.ContentTypeMultiPartVariable default: return openapi.ContentTypeText } } + +// OpenAPIBatchMessageDTO2DO 将openapi Message转换为entity Message +func OpenAPIBatchMessageDTO2DO(dtos []*openapi.Message) []*entity.Message { + if len(dtos) == 0 { + return nil + } + dos := make([]*entity.Message, 0, len(dtos)) + for _, dto := range dtos { + if dto == nil { + continue + } + dos = append(dos, OpenAPIMessageDTO2DO(dto)) + } + return dos +} + +// OpenAPIMessageDTO2DO 将openapi Message转换为entity Message +func OpenAPIMessageDTO2DO(dto *openapi.Message) *entity.Message { + if dto == nil { + return nil + } + return &entity.Message{ + Role: RoleDTO2DO(dto.GetRole()), + ReasoningContent: dto.ReasoningContent, + Content: dto.Content, + Parts: OpenAPIBatchContentPartDTO2DO(dto.Parts), + ToolCallID: dto.ToolCallID, + ToolCalls: OpenAPIBatchToolCallDTO2DO(dto.ToolCalls), + } +} + +// OpenAPIBatchContentPartDTO2DO 将openapi ContentPart转换为entity ContentPart +func OpenAPIBatchContentPartDTO2DO(dtos []*openapi.ContentPart) []*entity.ContentPart { + if dtos == nil { + return nil + } + parts := make([]*entity.ContentPart, 0, len(dtos)) + for _, dto := range dtos { + if dto == nil { + continue + } + parts = append(parts, OpenAPIContentPartDTO2DO(dto)) + } + return parts +} + +// OpenAPIContentPartDTO2DO 将openapi ContentPart转换为entity ContentPart +func OpenAPIContentPartDTO2DO(dto *openapi.ContentPart) *entity.ContentPart { + if dto == nil { + return nil + } + var imageURL *entity.ImageURL + if dto.ImageURL != nil && *dto.ImageURL != "" { + imageURL = &entity.ImageURL{ + URL: *dto.ImageURL, + } + } + return &entity.ContentPart{ + Type: OpenAPIContentTypeDTO2DO(dto.GetType()), + Text: dto.Text, + ImageURL: imageURL, + Base64Data: dto.Base64Data, + } +} + +// OpenAPIContentTypeDTO2DO 将openapi ContentType转换为entity ContentType +func OpenAPIContentTypeDTO2DO(dto openapi.ContentType) entity.ContentType { + switch dto { + case openapi.ContentTypeText: + return entity.ContentTypeText + case openapi.ContentTypeImageURL: + return entity.ContentTypeImageURL + case openapi.ContentTypeBase64Data: + return entity.ContentTypeBase64Data + case openapi.ContentTypeMultiPartVariable: + return entity.ContentTypeMultiPartVariable + default: + return entity.ContentTypeText + } +} + +// OpenAPIBatchVariableValDTO2DO 将openapi VariableVal转换为entity VariableVal +func OpenAPIBatchVariableValDTO2DO(dtos []*openapi.VariableVal) []*entity.VariableVal { + if len(dtos) == 0 { + return nil + } + dos := make([]*entity.VariableVal, 0, len(dtos)) + for _, dto := range dtos { + if dto == nil { + continue + } + dos = append(dos, OpenAPIVariableValDTO2DO(dto)) + } + return dos +} + +// OpenAPIVariableValDTO2DO 将openapi VariableVal转换为entity VariableVal +func OpenAPIVariableValDTO2DO(dto *openapi.VariableVal) *entity.VariableVal { + if dto == nil { + return nil + } + return &entity.VariableVal{ + Key: dto.GetKey(), + Value: dto.Value, + PlaceholderMessages: OpenAPIBatchMessageDTO2DO(dto.PlaceholderMessages), + MultiPartValues: OpenAPIBatchContentPartDTO2DO(dto.MultiPartValues), + } +} + +// OpenAPITokenUsageDO2DTO 将entity TokenUsage转换为openapi TokenUsage +func OpenAPITokenUsageDO2DTO(do *entity.TokenUsage) *openapi.TokenUsage { + if do == nil { + return nil + } + return &openapi.TokenUsage{ + InputTokens: ptr.Of(int32(do.InputTokens)), + OutputTokens: ptr.Of(int32(do.OutputTokens)), + } +} + +// OpenAPIBatchToolCallDO2DTO 将entity ToolCall转换为openapi ToolCall +func OpenAPIBatchToolCallDO2DTO(dos []*entity.ToolCall) []*openapi.ToolCall { + if dos == nil { + return nil + } + toolCalls := make([]*openapi.ToolCall, 0, len(dos)) + for _, do := range dos { + if do == nil { + continue + } + toolCalls = append(toolCalls, OpenAPIToolCallDO2DTO(do)) + } + return toolCalls +} + +// OpenAPIToolCallDO2DTO 将entity ToolCall转换为openapi ToolCall +func OpenAPIToolCallDO2DTO(do *entity.ToolCall) *openapi.ToolCall { + if do == nil { + return nil + } + return &openapi.ToolCall{ + Index: ptr.Of(int32(do.Index)), + ID: ptr.Of(do.ID), + Type: ptr.Of(OpenAPIToolTypeDO2DTO(do.Type)), + FunctionCall: OpenAPIFunctionCallDO2DTO(do.FunctionCall), + } +} + +// OpenAPIToolTypeDO2DTO 将entity ToolType转换为openapi ToolType +func OpenAPIToolTypeDO2DTO(do entity.ToolType) openapi.ToolType { + switch do { + case entity.ToolTypeFunction: + return openapi.ToolTypeFunction + default: + return openapi.ToolTypeFunction + } +} + +// OpenAPIFunctionCallDO2DTO 将entity FunctionCall转换为openapi FunctionCall +func OpenAPIFunctionCallDO2DTO(do *entity.FunctionCall) *openapi.FunctionCall { + if do == nil { + return nil + } + return &openapi.FunctionCall{ + Name: ptr.Of(do.Name), + Arguments: do.Arguments, + } +} + +// OpenAPIBatchToolCallDTO2DO 将openapi ToolCall转换为entity ToolCall +func OpenAPIBatchToolCallDTO2DO(dtos []*openapi.ToolCall) []*entity.ToolCall { + if dtos == nil { + return nil + } + toolCalls := make([]*entity.ToolCall, 0, len(dtos)) + for _, dto := range dtos { + if dto == nil { + continue + } + toolCalls = append(toolCalls, OpenAPIToolCallDTO2DO(dto)) + } + return toolCalls +} + +// OpenAPIToolCallDTO2DO 将openapi ToolCall转换为entity ToolCall +func OpenAPIToolCallDTO2DO(dto *openapi.ToolCall) *entity.ToolCall { + if dto == nil { + return nil + } + return &entity.ToolCall{ + Index: int64(dto.GetIndex()), + ID: dto.GetID(), + Type: OpenAPIToolTypeDTO2DO(dto.GetType()), + FunctionCall: OpenAPIFunctionCallDTO2DO(dto.FunctionCall), + } +} + +// OpenAPIToolTypeDTO2DO 将openapi ToolType转换为entity ToolType +func OpenAPIToolTypeDTO2DO(dto openapi.ToolType) entity.ToolType { + switch dto { + case openapi.ToolTypeFunction: + return entity.ToolTypeFunction + default: + return entity.ToolTypeFunction + } +} + +// OpenAPIFunctionCallDTO2DO 将openapi FunctionCall转换为entity FunctionCall +func OpenAPIFunctionCallDTO2DO(dto *openapi.FunctionCall) *entity.FunctionCall { + if dto == nil { + return nil + } + return &entity.FunctionCall{ + Name: dto.GetName(), + Arguments: dto.Arguments, + } +} diff --git a/backend/modules/prompt/application/convertor/openapi_test.go b/backend/modules/prompt/application/convertor/openapi_test.go old mode 100644 new mode 100755 index f03f70c81..176bb4956 --- a/backend/modules/prompt/application/convertor/openapi_test.go +++ b/backend/modules/prompt/application/convertor/openapi_test.go @@ -506,9 +506,9 @@ func TestOpenAPIContentTypeDO2DTO(t *testing.T) { want: openapi.ContentTypeMultiPartVariable, }, { - name: "image url content type - should default to text", + name: "image url content type", do: entity.ContentTypeImageURL, - want: openapi.ContentTypeText, + want: openapi.ContentTypeImageURL, }, { name: "unknown content type - should default to text", @@ -569,7 +569,7 @@ func TestOpenAPIContentPartDO2DTO(t *testing.T) { }, }, { - name: "image url content part - type converts to text", + name: "image url content part", do: &entity.ContentPart{ Type: entity.ContentTypeImageURL, Text: ptr.Of("image description"), @@ -579,8 +579,9 @@ func TestOpenAPIContentPartDO2DTO(t *testing.T) { }, }, want: &openapi.ContentPart{ - Type: ptr.Of(openapi.ContentTypeText), - Text: ptr.Of("image description"), + Type: ptr.Of(openapi.ContentTypeImageURL), + Text: ptr.Of("image description"), + ImageURL: ptr.Of("https://example.com/image.jpg"), }, }, { @@ -685,8 +686,9 @@ func TestOpenAPIBatchContentPartDO2DTO(t *testing.T) { Text: ptr.Of("Text content"), }, { - Type: ptr.Of(openapi.ContentTypeText), - Text: ptr.Of("Image description"), + Type: ptr.Of(openapi.ContentTypeImageURL), + Text: ptr.Of("Image description"), + ImageURL: ptr.Of("https://example.com/image.jpg"), }, { Type: ptr.Of(openapi.ContentTypeMultiPartVariable), @@ -711,3 +713,1002 @@ func TestOpenAPIBatchContentPartDO2DTO(t *testing.T) { }) } } + +// ============ 新增字段的增量测试 ============ + +func TestOpenAPIMessageDO2DTO_NewFields(t *testing.T) { + tests := []struct { + name string + do *entity.Message + want *openapi.Message + }{ + { + name: "nil input", + do: nil, + want: nil, + }, + { + name: "message with reasoning content", + do: &entity.Message{ + Role: entity.RoleAssistant, + ReasoningContent: ptr.Of("thinking..."), + Content: ptr.Of("response"), + }, + want: &openapi.Message{ + Role: ptr.Of(prompt.RoleAssistant), + ReasoningContent: ptr.Of("thinking..."), + Content: ptr.Of("response"), + }, + }, + { + name: "message with tool call id", + do: &entity.Message{ + Role: entity.RoleTool, + Content: ptr.Of("tool response"), + ToolCallID: ptr.Of("call_123"), + }, + want: &openapi.Message{ + Role: ptr.Of(prompt.RoleTool), + Content: ptr.Of("tool response"), + ToolCallID: ptr.Of("call_123"), + }, + }, + { + name: "message with tool calls", + do: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("I'll use a tool"), + ToolCalls: []*entity.ToolCall{ + { + Index: 0, + ID: "call_123", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "test_function", + Arguments: ptr.Of(`{"arg1": "value1"}`), + }, + }, + }, + }, + want: &openapi.Message{ + Role: ptr.Of(prompt.RoleAssistant), + Content: ptr.Of("I'll use a tool"), + ToolCalls: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_123"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("test_function"), + Arguments: ptr.Of(`{"arg1": "value1"}`), + }, + }, + }, + }, + }, + { + name: "message with all new fields", + do: &entity.Message{ + Role: entity.RoleAssistant, + ReasoningContent: ptr.Of("analyzing the request"), + Content: ptr.Of("I need to call a function"), + ToolCallID: ptr.Of("call_456"), + ToolCalls: []*entity.ToolCall{ + { + Index: 1, + ID: "call_789", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "another_function", + Arguments: ptr.Of(`{"param": "test"}`), + }, + }, + }, + }, + want: &openapi.Message{ + Role: ptr.Of(prompt.RoleAssistant), + ReasoningContent: ptr.Of("analyzing the request"), + Content: ptr.Of("I need to call a function"), + ToolCallID: ptr.Of("call_456"), + ToolCalls: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(1)), + ID: ptr.Of("call_789"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("another_function"), + Arguments: ptr.Of(`{"param": "test"}`), + }, + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIMessageDO2DTO(tt.do)) + }) + } +} + +func TestOpenAPIContentPartDO2DTO_NewFields(t *testing.T) { + tests := []struct { + name string + do *entity.ContentPart + want *openapi.ContentPart + }{ + { + name: "nil input", + do: nil, + want: nil, + }, + { + name: "content part with image url field", + do: &entity.ContentPart{ + Type: entity.ContentTypeImageURL, + Text: ptr.Of("image description"), + ImageURL: &entity.ImageURL{ + URI: "https://example.com/image.jpg", + URL: "https://example.com/image.jpg", + }, + }, + want: &openapi.ContentPart{ + Type: ptr.Of(openapi.ContentTypeImageURL), + Text: ptr.Of("image description"), + ImageURL: ptr.Of("https://example.com/image.jpg"), + }, + }, + { + name: "content part with base64 data field", + do: &entity.ContentPart{ + Type: entity.ContentTypeBase64Data, + Text: ptr.Of("base64 image"), + Base64Data: ptr.Of("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="), + }, + want: &openapi.ContentPart{ + Type: ptr.Of(openapi.ContentTypeBase64Data), + Text: ptr.Of("base64 image"), + Base64Data: ptr.Of("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="), + }, + }, + { + name: "content part with both image url and base64 data", + do: &entity.ContentPart{ + Type: entity.ContentTypeImageURL, + Text: ptr.Of("image with multiple formats"), + ImageURL: &entity.ImageURL{ + URI: "https://example.com/image.png", + URL: "https://example.com/image.png", + }, + Base64Data: ptr.Of("base64data"), + }, + want: &openapi.ContentPart{ + Type: ptr.Of(openapi.ContentTypeImageURL), + Text: ptr.Of("image with multiple formats"), + ImageURL: ptr.Of("https://example.com/image.png"), + Base64Data: ptr.Of("base64data"), + }, + }, + { + name: "content part with nil image url", + do: &entity.ContentPart{ + Type: entity.ContentTypeText, + Text: ptr.Of("just text"), + ImageURL: nil, + Base64Data: nil, + }, + want: &openapi.ContentPart{ + Type: ptr.Of(openapi.ContentTypeText), + Text: ptr.Of("just text"), + ImageURL: nil, + Base64Data: nil, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIContentPartDO2DTO(tt.do)) + }) + } +} + +func TestOpenAPIContentTypeDO2DTO_NewTypes(t *testing.T) { + tests := []struct { + name string + do entity.ContentType + want openapi.ContentType + }{ + { + name: "text content type", + do: entity.ContentTypeText, + want: openapi.ContentTypeText, + }, + { + name: "image url content type", + do: entity.ContentTypeImageURL, + want: openapi.ContentTypeImageURL, + }, + { + name: "base64 data content type", + do: entity.ContentTypeBase64Data, + want: openapi.ContentTypeBase64Data, + }, + { + name: "multi part variable content type", + do: entity.ContentTypeMultiPartVariable, + want: openapi.ContentTypeMultiPartVariable, + }, + { + name: "unknown content type - should default to text", + do: entity.ContentType("unknown"), + want: openapi.ContentTypeText, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIContentTypeDO2DTO(tt.do)) + }) + } +} + +// ============ 新增顶层函数的完整测试 ============ + +func TestOpenAPIBatchMessageDTO2DO(t *testing.T) { + tests := []struct { + name string + dtos []*openapi.Message + want []*entity.Message + }{ + { + name: "nil input", + dtos: nil, + want: nil, + }, + { + name: "empty array", + dtos: []*openapi.Message{}, + want: nil, + }, + { + name: "array with nil elements", + dtos: []*openapi.Message{ + nil, + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + nil, + }, + want: []*entity.Message{ + { + Role: entity.RoleUser, + Content: ptr.Of("Hello"), + }, + }, + }, + { + name: "normal array conversion", + dtos: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleSystem), + Content: ptr.Of("You are a helpful assistant."), + }, + { + Role: ptr.Of(prompt.RoleAssistant), + ReasoningContent: ptr.Of("thinking..."), + Content: ptr.Of("I can help you."), + }, + }, + want: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + { + Role: entity.RoleAssistant, + ReasoningContent: ptr.Of("thinking..."), + Content: ptr.Of("I can help you."), + }, + }, + }, + { + name: "complex messages with tool calls", + dtos: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Calculate 2+2"), + }, + { + Role: ptr.Of(prompt.RoleAssistant), + Content: ptr.Of("I'll calculate that for you."), + ToolCalls: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_123"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("calculator"), + Arguments: ptr.Of(`{"expression": "2+2"}`), + }, + }, + }, + }, + { + Role: ptr.Of(prompt.RoleTool), + Content: ptr.Of("4"), + ToolCallID: ptr.Of("call_123"), + }, + }, + want: []*entity.Message{ + { + Role: entity.RoleUser, + Content: ptr.Of("Calculate 2+2"), + }, + { + Role: entity.RoleAssistant, + Content: ptr.Of("I'll calculate that for you."), + ToolCalls: []*entity.ToolCall{ + { + Index: 0, + ID: "call_123", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "calculator", + Arguments: ptr.Of(`{"expression": "2+2"}`), + }, + }, + }, + }, + { + Role: entity.RoleTool, + Content: ptr.Of("4"), + ToolCallID: ptr.Of("call_123"), + }, + }, + }, + { + name: "messages with content parts", + dtos: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeText), + Text: ptr.Of("What's in this image?"), + }, + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: ptr.Of("https://example.com/image.jpg"), + }, + }, + }, + }, + want: []*entity.Message{ + { + Role: entity.RoleUser, + Parts: []*entity.ContentPart{ + { + Type: entity.ContentTypeText, + Text: ptr.Of("What's in this image?"), + }, + { + Type: entity.ContentTypeImageURL, + ImageURL: &entity.ImageURL{ + URL: "https://example.com/image.jpg", + }, + }, + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIBatchMessageDTO2DO(tt.dtos)) + }) + } +} + +func TestOpenAPIBatchContentPartDTO2DO(t *testing.T) { + tests := []struct { + name string + dtos []*openapi.ContentPart + want []*entity.ContentPart + }{ + { + name: "nil input", + dtos: nil, + want: nil, + }, + { + name: "empty array", + dtos: []*openapi.ContentPart{}, + want: []*entity.ContentPart{}, + }, + { + name: "array with nil elements", + dtos: []*openapi.ContentPart{ + nil, + { + Type: ptr.Of(openapi.ContentTypeText), + Text: ptr.Of("Hello"), + }, + nil, + }, + want: []*entity.ContentPart{ + { + Type: entity.ContentTypeText, + Text: ptr.Of("Hello"), + }, + }, + }, + { + name: "normal array conversion", + dtos: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeText), + Text: ptr.Of("Hello world"), + }, + { + Type: ptr.Of(openapi.ContentTypeMultiPartVariable), + Text: ptr.Of("{{variable}}"), + }, + }, + want: []*entity.ContentPart{ + { + Type: entity.ContentTypeText, + Text: ptr.Of("Hello world"), + }, + { + Type: entity.ContentTypeMultiPartVariable, + Text: ptr.Of("{{variable}}"), + }, + }, + }, + { + name: "mixed types with image url and base64", + dtos: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeText), + Text: ptr.Of("Text content"), + }, + { + Type: ptr.Of(openapi.ContentTypeImageURL), + Text: ptr.Of("Image description"), + ImageURL: ptr.Of("https://example.com/image.jpg"), + }, + { + Type: ptr.Of(openapi.ContentTypeBase64Data), + Text: ptr.Of("Base64 image"), + Base64Data: ptr.Of("base64data"), + }, + }, + want: []*entity.ContentPart{ + { + Type: entity.ContentTypeText, + Text: ptr.Of("Text content"), + }, + { + Type: entity.ContentTypeImageURL, + Text: ptr.Of("Image description"), + ImageURL: &entity.ImageURL{ + URL: "https://example.com/image.jpg", + }, + }, + { + Type: entity.ContentTypeBase64Data, + Text: ptr.Of("Base64 image"), + Base64Data: ptr.Of("base64data"), + }, + }, + }, + { + name: "empty image url handling", + dtos: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: ptr.Of(""), + }, + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: nil, + }, + }, + want: []*entity.ContentPart{ + { + Type: entity.ContentTypeImageURL, + ImageURL: nil, + }, + { + Type: entity.ContentTypeImageURL, + ImageURL: nil, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIBatchContentPartDTO2DO(tt.dtos)) + }) + } +} + +func TestOpenAPIBatchVariableValDTO2DO(t *testing.T) { + tests := []struct { + name string + dtos []*openapi.VariableVal + want []*entity.VariableVal + }{ + { + name: "nil input", + dtos: nil, + want: nil, + }, + { + name: "empty array", + dtos: []*openapi.VariableVal{}, + want: nil, + }, + { + name: "array with nil elements", + dtos: []*openapi.VariableVal{ + nil, + { + Key: ptr.Of("var1"), + Value: ptr.Of("value1"), + }, + nil, + }, + want: []*entity.VariableVal{ + { + Key: "var1", + Value: ptr.Of("value1"), + }, + }, + }, + { + name: "normal array conversion", + dtos: []*openapi.VariableVal{ + { + Key: ptr.Of("var1"), + Value: ptr.Of("simple value"), + }, + { + Key: ptr.Of("var2"), + Value: ptr.Of("another value"), + }, + }, + want: []*entity.VariableVal{ + { + Key: "var1", + Value: ptr.Of("simple value"), + }, + { + Key: "var2", + Value: ptr.Of("another value"), + }, + }, + }, + { + name: "complex variable values with placeholder messages", + dtos: []*openapi.VariableVal{ + { + Key: ptr.Of("placeholder_var"), + Value: ptr.Of("placeholder value"), + PlaceholderMessages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Placeholder content"), + }, + }, + }, + }, + want: []*entity.VariableVal{ + { + Key: "placeholder_var", + Value: ptr.Of("placeholder value"), + PlaceholderMessages: []*entity.Message{ + { + Role: entity.RoleUser, + Content: ptr.Of("Placeholder content"), + }, + }, + }, + }, + }, + { + name: "variable values with multi part values", + dtos: []*openapi.VariableVal{ + { + Key: ptr.Of("multipart_var"), + Value: ptr.Of("multipart value"), + MultiPartValues: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeText), + Text: ptr.Of("Part 1"), + }, + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: ptr.Of("https://example.com/image.jpg"), + }, + }, + }, + }, + want: []*entity.VariableVal{ + { + Key: "multipart_var", + Value: ptr.Of("multipart value"), + MultiPartValues: []*entity.ContentPart{ + { + Type: entity.ContentTypeText, + Text: ptr.Of("Part 1"), + }, + { + Type: entity.ContentTypeImageURL, + ImageURL: &entity.ImageURL{ + URL: "https://example.com/image.jpg", + }, + }, + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIBatchVariableValDTO2DO(tt.dtos)) + }) + } +} + +func TestOpenAPITokenUsageDO2DTO(t *testing.T) { + tests := []struct { + name string + do *entity.TokenUsage + want *openapi.TokenUsage + }{ + { + name: "nil input", + do: nil, + want: nil, + }, + { + name: "zero token usage", + do: &entity.TokenUsage{ + InputTokens: 0, + OutputTokens: 0, + }, + want: &openapi.TokenUsage{ + InputTokens: ptr.Of(int32(0)), + OutputTokens: ptr.Of(int32(0)), + }, + }, + { + name: "normal token usage", + do: &entity.TokenUsage{ + InputTokens: 100, + OutputTokens: 50, + }, + want: &openapi.TokenUsage{ + InputTokens: ptr.Of(int32(100)), + OutputTokens: ptr.Of(int32(50)), + }, + }, + { + name: "large token usage", + do: &entity.TokenUsage{ + InputTokens: 999999, + OutputTokens: 888888, + }, + want: &openapi.TokenUsage{ + InputTokens: ptr.Of(int32(999999)), + OutputTokens: ptr.Of(int32(888888)), + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPITokenUsageDO2DTO(tt.do)) + }) + } +} + +func TestOpenAPIBatchToolCallDO2DTO(t *testing.T) { + tests := []struct { + name string + dos []*entity.ToolCall + want []*openapi.ToolCall + }{ + { + name: "nil input", + dos: nil, + want: nil, + }, + { + name: "empty array", + dos: []*entity.ToolCall{}, + want: []*openapi.ToolCall{}, + }, + { + name: "array with nil elements", + dos: []*entity.ToolCall{ + nil, + { + Index: 0, + ID: "call_123", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "test_function", + Arguments: ptr.Of(`{"arg": "value"}`), + }, + }, + nil, + }, + want: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_123"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("test_function"), + Arguments: ptr.Of(`{"arg": "value"}`), + }, + }, + }, + }, + { + name: "normal array conversion", + dos: []*entity.ToolCall{ + { + Index: 0, + ID: "call_123", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "function1", + Arguments: ptr.Of(`{"param1": "value1"}`), + }, + }, + { + Index: 1, + ID: "call_456", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "function2", + Arguments: ptr.Of(`{"param2": "value2"}`), + }, + }, + }, + want: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_123"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("function1"), + Arguments: ptr.Of(`{"param1": "value1"}`), + }, + }, + { + Index: ptr.Of(int32(1)), + ID: ptr.Of("call_456"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("function2"), + Arguments: ptr.Of(`{"param2": "value2"}`), + }, + }, + }, + }, + { + name: "tool call with nil function call", + dos: []*entity.ToolCall{ + { + Index: 0, + ID: "call_789", + Type: entity.ToolTypeFunction, + FunctionCall: nil, + }, + }, + want: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_789"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: nil, + }, + }, + }, + { + name: "tool call with function call having nil arguments", + dos: []*entity.ToolCall{ + { + Index: 0, + ID: "call_999", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "function_no_args", + Arguments: nil, + }, + }, + }, + want: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_999"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("function_no_args"), + Arguments: nil, + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIBatchToolCallDO2DTO(tt.dos)) + }) + } +} + +func TestOpenAPIBatchToolCallDTO2DO(t *testing.T) { + tests := []struct { + name string + dtos []*openapi.ToolCall + want []*entity.ToolCall + }{ + { + name: "nil input", + dtos: nil, + want: nil, + }, + { + name: "empty array", + dtos: []*openapi.ToolCall{}, + want: []*entity.ToolCall{}, + }, + { + name: "array with nil elements", + dtos: []*openapi.ToolCall{ + nil, + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_123"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("test_function"), + Arguments: ptr.Of(`{"arg": "value"}`), + }, + }, + nil, + }, + want: []*entity.ToolCall{ + { + Index: 0, + ID: "call_123", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "test_function", + Arguments: ptr.Of(`{"arg": "value"}`), + }, + }, + }, + }, + { + name: "normal array conversion", + dtos: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_123"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("function1"), + Arguments: ptr.Of(`{"param1": "value1"}`), + }, + }, + { + Index: ptr.Of(int32(1)), + ID: ptr.Of("call_456"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("function2"), + Arguments: ptr.Of(`{"param2": "value2"}`), + }, + }, + }, + want: []*entity.ToolCall{ + { + Index: 0, + ID: "call_123", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "function1", + Arguments: ptr.Of(`{"param1": "value1"}`), + }, + }, + { + Index: 1, + ID: "call_456", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "function2", + Arguments: ptr.Of(`{"param2": "value2"}`), + }, + }, + }, + }, + { + name: "tool call with nil function call", + dtos: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_789"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: nil, + }, + }, + want: []*entity.ToolCall{ + { + Index: 0, + ID: "call_789", + Type: entity.ToolTypeFunction, + FunctionCall: nil, + }, + }, + }, + { + name: "tool call with function call having nil arguments", + dtos: []*openapi.ToolCall{ + { + Index: ptr.Of(int32(0)), + ID: ptr.Of("call_999"), + Type: ptr.Of(openapi.ToolTypeFunction), + FunctionCall: &openapi.FunctionCall{ + Name: ptr.Of("function_no_args"), + Arguments: nil, + }, + }, + }, + want: []*entity.ToolCall{ + { + Index: 0, + ID: "call_999", + Type: entity.ToolTypeFunction, + FunctionCall: &entity.FunctionCall{ + Name: "function_no_args", + Arguments: nil, + }, + }, + }, + }, + { + name: "tool call with default values from getters", + dtos: []*openapi.ToolCall{ + { + // 测试GetIndex()、GetID()、GetType()的默认值处理 + }, + }, + want: []*entity.ToolCall{ + { + Index: 0, // int32默认值转int64 + ID: "", // string默认值 + Type: entity.ToolTypeFunction, // 默认映射到Function + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, tt.want, OpenAPIBatchToolCallDTO2DO(tt.dtos)) + }) + } +} diff --git a/backend/modules/prompt/application/debug.go b/backend/modules/prompt/application/debug.go index 94a1fd300..5be6f8f7f 100644 --- a/backend/modules/prompt/application/debug.go +++ b/backend/modules/prompt/application/debug.go @@ -29,6 +29,7 @@ import ( "github.com/coze-dev/coze-loop/backend/modules/prompt/pkg/consts" prompterr "github.com/coze-dev/coze-loop/backend/modules/prompt/pkg/errno" "github.com/coze-dev/coze-loop/backend/pkg/errorx" + "github.com/coze-dev/coze-loop/backend/pkg/goroutine" "github.com/coze-dev/coze-loop/backend/pkg/json" "github.com/coze-dev/coze-loop/backend/pkg/lang/ptr" "github.com/coze-dev/coze-loop/backend/pkg/logs" @@ -228,7 +229,7 @@ func (p *PromptDebugApplicationImpl) doDebugStreaming(ctx context.Context, req * // execute resultStream := make(chan *entity.Reply) errChan := make(chan error) - go func() { + goroutine.GoSafe(ctx, func() { var executeErr error defer func() { e := recover() @@ -278,7 +279,7 @@ func (p *PromptDebugApplicationImpl) doDebugStreaming(ctx context.Context, req * if executeErr != nil { return } - }() + }) // send result for reply := range resultStream { if reply == nil || reply.Item == nil { diff --git a/backend/modules/prompt/application/openapi.go b/backend/modules/prompt/application/openapi.go index 0ad0b4471..29908d2a5 100644 --- a/backend/modules/prompt/application/openapi.go +++ b/backend/modules/prompt/application/openapi.go @@ -5,17 +5,27 @@ package application import ( "context" + "errors" "fmt" "strconv" "time" + "github.com/asaskevich/govalidator" + "github.com/cloudwego/kitex/pkg/remote/trans/nphttp2/codes" + "github.com/cloudwego/kitex/pkg/remote/trans/nphttp2/status" + "github.com/coze-dev/cozeloop-go" + loopentity "github.com/coze-dev/cozeloop-go/entity" + "github.com/coze-dev/cozeloop-go/spec/tracespec" + "github.com/vincent-petithory/dataurl" "golang.org/x/exp/maps" "github.com/coze-dev/coze-loop/backend/infra/limiter" + "github.com/coze-dev/coze-loop/backend/infra/looptracer" "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/openapi" "github.com/coze-dev/coze-loop/backend/modules/prompt/application/convertor" "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/component/conf" "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/component/rpc" + "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/component/trace" "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/entity" "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/repo" "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/service" @@ -23,7 +33,11 @@ import ( "github.com/coze-dev/coze-loop/backend/modules/prompt/pkg/consts" prompterr "github.com/coze-dev/coze-loop/backend/modules/prompt/pkg/errno" "github.com/coze-dev/coze-loop/backend/pkg/errorx" + "github.com/coze-dev/coze-loop/backend/pkg/goroutine" + "github.com/coze-dev/coze-loop/backend/pkg/json" + "github.com/coze-dev/coze-loop/backend/pkg/lang/ptr" "github.com/coze-dev/coze-loop/backend/pkg/logs" + "github.com/coze-dev/coze-loop/backend/pkg/traceutil" ) func NewPromptOpenAPIApplication( @@ -65,7 +79,7 @@ func (p *PromptOpenAPIApplicationImpl) BatchGetPromptByPromptKey(ctx context.Con }() // 限流检查 - if !p.AllowBySpace(ctx, req.GetWorkspaceID()) { + if !p.promptHubAllowBySpace(ctx, req.GetWorkspaceID()) { return r, errorx.NewByCode(prompterr.PromptHubQPSLimitCode, errorx.WithExtraMsg("qps limit exceeded")) } @@ -210,7 +224,7 @@ func (p *PromptOpenAPIApplicationImpl) fetchPromptResults(ctx context.Context, r return r, nil } -func (p *PromptOpenAPIApplicationImpl) AllowBySpace(ctx context.Context, workspaceID int64) bool { +func (p *PromptOpenAPIApplicationImpl) promptHubAllowBySpace(ctx context.Context, workspaceID int64) bool { maxQPS, err := p.config.GetPromptHubMaxQPSBySpace(ctx, workspaceID) if err != nil { logs.CtxError(ctx, "get prompt hub max qps failed, err=%v, space_id=%d", err, workspaceID) @@ -231,3 +245,447 @@ func (p *PromptOpenAPIApplicationImpl) AllowBySpace(ctx context.Context, workspa } return false } + +func (p *PromptOpenAPIApplicationImpl) Execute(ctx context.Context, req *openapi.ExecuteRequest) (r *openapi.ExecuteResponse, err error) { + var promptDO *entity.Prompt + var reply *entity.Reply + startTime := time.Now() + defer func() { + var errCode int32 + if err != nil { + logs.CtxError(ctx, "openapi execute prompt failed, err=%v", err) + errCode = prompterr.CommonInternalErrorCode + bizErr, ok := errorx.FromStatusError(err) + if ok { + errCode = bizErr.Code() + } + } + var intputTokens, outputTokens int64 + var version string + if promptDO != nil { + version = promptDO.GetVersion() + } + if reply != nil && reply.Item != nil { + intputTokens = reply.Item.TokenUsage.InputTokens + outputTokens = reply.Item.TokenUsage.OutputTokens + } + p.collector.CollectPTaaSEvent(ctx, &collector.ExecuteLog{ + SpaceID: req.GetWorkspaceID(), + PromptKey: req.GetPromptIdentifier().GetPromptKey(), + Version: version, + Stream: false, + InputTokens: intputTokens, + OutputTokens: outputTokens, + StartedAt: startTime, + EndedAt: time.Now(), + StatusCode: errCode, + }) + }() + r = openapi.NewExecuteResponse() + err = validateExecuteRequest(req) + if err != nil { + return r, err + } + var span cozeloop.Span + ctx, span = p.startPromptExecutorSpan(ctx, ptaasStartPromptExecutorSpanParam{ + workspaceID: req.GetWorkspaceID(), + stream: false, + reqPromptKey: req.GetPromptIdentifier().GetPromptKey(), + reqPromptVersion: req.GetPromptIdentifier().GetVersion(), + reqPromptLabel: req.GetPromptIdentifier().GetLabel(), + messages: convertor.OpenAPIBatchMessageDTO2DO(req.Messages), + variableVals: convertor.OpenAPIBatchVariableValDTO2DO(req.VariableVals), + }) + defer func() { + p.finishPromptExecutorSpan(ctx, span, promptDO, reply, err) + }() + + promptDO, reply, err = p.doExecute(ctx, req) + if err != nil { + return r, err + } + // 构建返回结果 + if reply != nil && reply.Item != nil { + r.Data = &openapi.ExecuteData{ + Message: convertor.OpenAPIMessageDO2DTO(reply.Item.Message), + FinishReason: &reply.Item.FinishReason, + Usage: convertor.OpenAPITokenUsageDO2DTO(reply.Item.TokenUsage), + } + } + + // 记录使用数据 + return r, nil +} + +func (p *PromptOpenAPIApplicationImpl) doExecute(ctx context.Context, req *openapi.ExecuteRequest) (promptDO *entity.Prompt, reply *entity.Reply, err error) { + // 按prompt_key限流检查 + if !p.ptaasAllowByPromptKey(ctx, req.GetWorkspaceID(), req.GetPromptIdentifier().GetPromptKey()) { + return promptDO, nil, errorx.NewByCode(prompterr.PTaaSQPSLimitCode, errorx.WithExtraMsg("qps limit exceeded")) + } + + // 获取prompt并执行 + promptDO, err = p.getPromptByPromptKey(ctx, req.GetWorkspaceID(), req.GetPromptIdentifier()) + if err != nil { + return promptDO, nil, err + } + + // 执行权限检查 + if err = p.auth.MCheckPromptPermission(ctx, req.GetWorkspaceID(), []int64{promptDO.ID}, consts.ActionLoopPromptExecute); err != nil { + return promptDO, nil, err + } + + // 执行prompt + reply, err = p.promptService.Execute(ctx, service.ExecuteParam{ + Prompt: promptDO, + Messages: convertor.OpenAPIBatchMessageDTO2DO(req.Messages), + VariableVals: convertor.OpenAPIBatchVariableValDTO2DO(req.VariableVals), + SingleStep: true, // PTaaS不支持非单步模式 + Scenario: entity.ScenarioPTaaS, // PTaaS场景 + }) + if err != nil { + return promptDO, nil, err + } + return promptDO, reply, nil +} + +func (p *PromptOpenAPIApplicationImpl) ExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, stream openapi.PromptOpenAPIService_ExecuteStreamingServer) (err error) { + var promptDO *entity.Prompt + var aggregatedReply *entity.Reply + startTime := time.Now() + defer func() { + var errCode int32 + if err != nil { + logs.CtxError(ctx, "openapi execute streaming prompt failed, err=%v", err) + errCode = prompterr.CommonInternalErrorCode + bizErr, ok := errorx.FromStatusError(err) + if ok { + errCode = bizErr.Code() + } + } + var intputTokens, outputTokens int64 + var version string + if promptDO != nil { + version = promptDO.GetVersion() + } + if aggregatedReply != nil && aggregatedReply.Item != nil { + intputTokens = aggregatedReply.Item.TokenUsage.InputTokens + outputTokens = aggregatedReply.Item.TokenUsage.OutputTokens + } + p.collector.CollectPTaaSEvent(ctx, &collector.ExecuteLog{ + SpaceID: req.GetWorkspaceID(), + PromptKey: req.GetPromptIdentifier().GetPromptKey(), + Version: version, + Stream: false, + InputTokens: intputTokens, + OutputTokens: outputTokens, + StartedAt: startTime, + EndedAt: time.Now(), + StatusCode: errCode, + }) + }() + err = validateExecuteRequest(req) + if err != nil { + return err + } + var span cozeloop.Span + ctx, span = p.startPromptExecutorSpan(ctx, ptaasStartPromptExecutorSpanParam{ + workspaceID: req.GetWorkspaceID(), + stream: true, + reqPromptKey: req.GetPromptIdentifier().GetPromptKey(), + reqPromptVersion: req.GetPromptIdentifier().GetVersion(), + reqPromptLabel: req.GetPromptIdentifier().GetLabel(), + messages: convertor.OpenAPIBatchMessageDTO2DO(req.Messages), + variableVals: convertor.OpenAPIBatchVariableValDTO2DO(req.VariableVals), + }) + defer func() { + p.finishPromptExecutorSpan(ctx, span, promptDO, aggregatedReply, err) + }() + promptDO, aggregatedReply, err = p.doExecuteStreaming(ctx, req, stream) + // 记录使用数据 + return err +} + +func (p *PromptOpenAPIApplicationImpl) doExecuteStreaming(ctx context.Context, req *openapi.ExecuteRequest, stream openapi.PromptOpenAPIService_ExecuteStreamingServer) (promptDO *entity.Prompt, aggregatedReply *entity.Reply, err error) { + // 按prompt_key限流检查 + if !p.ptaasAllowByPromptKey(ctx, req.GetWorkspaceID(), req.GetPromptIdentifier().GetPromptKey()) { + return promptDO, nil, errorx.NewByCode(prompterr.PTaaSQPSLimitCode, errorx.WithExtraMsg("qps limit exceeded")) + } + + // 获取prompt并执行 + promptDO, err = p.getPromptByPromptKey(ctx, req.GetWorkspaceID(), req.GetPromptIdentifier()) + if err != nil { + return promptDO, nil, err + } + + // 执行权限检查 + if err = p.auth.MCheckPromptPermission(ctx, req.GetWorkspaceID(), []int64{promptDO.ID}, consts.ActionLoopPromptExecute); err != nil { + return promptDO, nil, err + } + + // 执行prompt流式调用 + resultStream := make(chan *entity.Reply) + errChan := make(chan error) + replyResultChan := make(chan *entity.Reply, 1) // 用于接收aggregatedReply,避免数据竞争 + goroutine.GoSafe(ctx, func() { + var executeErr error + var localAggregatedReply *entity.Reply + defer func() { + e := recover() + if e != nil { + executeErr = errorx.New("panic occurred, reason=%v", e) + } + // 确保errChan和resultStream被关闭 + close(resultStream) + if executeErr != nil { + errChan <- executeErr + } else { + replyResultChan <- localAggregatedReply + } + close(errChan) + close(replyResultChan) + }() + + localAggregatedReply, executeErr = p.promptService.ExecuteStreaming(ctx, service.ExecuteStreamingParam{ + ExecuteParam: service.ExecuteParam{ + Prompt: promptDO, + Messages: convertor.OpenAPIBatchMessageDTO2DO(req.Messages), + VariableVals: convertor.OpenAPIBatchVariableValDTO2DO(req.VariableVals), + SingleStep: true, // PTaaS不支持非单步模式 + Scenario: entity.ScenarioPTaaS, // PTaaS场景 + }, + ResultStream: resultStream, + }) + if executeErr != nil { + return + } + }) + // send result + for reply := range resultStream { + if reply == nil || reply.Item == nil { + continue + } + chunk := &openapi.ExecuteStreamingResponse{ + Data: &openapi.ExecuteStreamingData{ + Message: convertor.OpenAPIMessageDO2DTO(reply.Item.Message), + FinishReason: ptr.Of(reply.Item.FinishReason), + Usage: convertor.OpenAPITokenUsageDO2DTO(reply.Item.TokenUsage), + }, + } + err = stream.Send(ctx, chunk) + if err != nil { + if st, ok := status.FromError(err); ok && st.Code() == codes.Canceled { + err = nil + logs.CtxWarn(ctx, "execute streaming canceled") + } else { + logs.CtxError(ctx, "send chunk failed, err=%v", err) + } + return promptDO, nil, err + } + } + var ok bool + select { //nolint:staticcheck + case err, ok = <-errChan: + if !ok { + logs.CtxInfo(ctx, "execute streaming finished") + } else { + if st, ok := status.FromError(err); ok && st.Code() == codes.Canceled { + err = nil + logs.CtxWarn(ctx, "execute streaming canceled") + } else { + logs.CtxError(ctx, "execute streaming failed, err=%v", err) + } + } + return promptDO, aggregatedReply, err + case aggregatedReply = <-replyResultChan: + logs.CtxInfo(ctx, "execute streaming finished") + return promptDO, aggregatedReply, nil + } +} + +// ptaasAllowByPromptKey 按prompt_key维度的限流检查 +func (p *PromptOpenAPIApplicationImpl) ptaasAllowByPromptKey(ctx context.Context, workspaceID int64, promptKey string) bool { + maxQPS, err := p.config.GetPTaaSMaxQPSByPromptKey(ctx, workspaceID, promptKey) + if err != nil { + logs.CtxError(ctx, "get ptaas max qps failed, err=%v, prompt_key=%s", err, promptKey) + return true + } + result, err := p.rateLimiter.AllowN(ctx, fmt.Sprintf("ptaas:qps:space_id:%d:prompt_key:%s", workspaceID, promptKey), 1, + limiter.WithLimit(&limiter.Limit{ + Rate: maxQPS, + Burst: maxQPS, + Period: time.Second, + })) + if err != nil { + logs.CtxError(ctx, "allow rate limit failed, err=%v", err) + return true + } + if result == nil || result.Allowed { + return true + } + return false +} + +// getPromptByPromptKey 根据prompt_key获取prompt +func (p *PromptOpenAPIApplicationImpl) getPromptByPromptKey(ctx context.Context, spaceID int64, promptIdentifier *openapi.PromptQuery) (prompt *entity.Prompt, err error) { + if promptIdentifier == nil { + return nil, errors.New("prompt identifier is nil") + } + var span looptracer.Span + ctx, span = looptracer.GetTracer().StartSpan(ctx, consts.SpanNamePromptHub, tracespec.VPromptHubSpanType, looptracer.WithSpanWorkspaceID(strconv.FormatInt(spaceID, 10))) + if span != nil { + span.SetInput(ctx, json.Jsonify(map[string]any{ + tracespec.PromptKey: promptIdentifier.GetPromptKey(), + tracespec.PromptVersion: promptIdentifier.GetVersion(), + tracespec.PromptLabel: promptIdentifier.GetLabel(), + })) + defer func() { + if prompt != nil { + span.SetPrompt(ctx, loopentity.Prompt{PromptKey: prompt.PromptKey, Version: prompt.GetVersion()}) + span.SetOutput(ctx, json.Jsonify(trace.PromptToSpanPrompt(prompt))) + } + if err != nil { + span.SetStatusCode(ctx, int(traceutil.GetTraceStatusCode(err))) + span.SetError(ctx, errors.New(errorx.ErrorWithoutStack(err))) + } + span.Finish(ctx) + }() + } + + // 根据prompt_key获取prompt_id + promptKeyIDMap, err := p.promptService.MGetPromptIDs(ctx, spaceID, []string{promptIdentifier.GetPromptKey()}) + if err != nil { + return nil, err + } + promptID := promptKeyIDMap[promptIdentifier.GetPromptKey()] + // 解析具体的提交版本 + queryParam := service.PromptQueryParam{ + PromptID: promptID, + PromptKey: promptIdentifier.GetPromptKey(), + Version: promptIdentifier.GetVersion(), + Label: promptIdentifier.GetLabel(), + } + promptKeyCommitVersionMap, err := p.promptService.MParseCommitVersion(ctx, spaceID, []service.PromptQueryParam{queryParam}) + if err != nil { + return nil, err + } + commitVersion := promptKeyCommitVersionMap[queryParam] + + // 根据prompt_id、version获取prompt DO + param := repo.GetPromptParam{ + PromptID: promptID, + WithCommit: true, + CommitVersion: commitVersion, + } + promptDOs, err := p.promptManageRepo.MGetPrompt(ctx, []repo.GetPromptParam{param}, repo.WithPromptCacheEnable()) + if err != nil { + if bizErr, ok := errorx.FromStatusError(err); ok && bizErr.Code() == prompterr.PromptVersionNotExistCode { + extra := bizErr.Extra() + extra["prompt_key"] = promptIdentifier.GetPromptKey() + bizErr.WithExtra(extra) + } + return nil, err + } + + return promptDOs[param], nil +} + +type ptaasStartPromptExecutorSpanParam struct { + workspaceID int64 + stream bool + reqPromptKey string + reqPromptVersion string + reqPromptLabel string + messages []*entity.Message + variableVals []*entity.VariableVal +} + +func (p *PromptOpenAPIApplicationImpl) startPromptExecutorSpan(ctx context.Context, param ptaasStartPromptExecutorSpanParam) (context.Context, cozeloop.Span) { + var span looptracer.Span + ctx, span = looptracer.GetTracer().StartSpan(ctx, consts.SpanNamePromptExecutor, consts.SpanTypePromptExecutor, + looptracer.WithSpanWorkspaceID(strconv.FormatInt(param.workspaceID, 10))) + if span != nil { + span.SetCallType(consts.SpanTagCallTypePTaaS) + intput := map[string]any{ + tracespec.PromptKey: param.reqPromptKey, + tracespec.PromptVersion: param.reqPromptVersion, + tracespec.PromptLabel: param.reqPromptLabel, + consts.SpanTagPromptVariables: trace.VariableValsToSpanPromptVariables(param.variableVals), + consts.SpanTagMessages: trace.MessagesToSpanMessages(param.messages), + } + span.SetInput(ctx, json.Jsonify(intput)) + span.SetTags(ctx, map[string]any{ + tracespec.Stream: param.stream, + }) + } + return ctx, span +} + +func (p *PromptOpenAPIApplicationImpl) finishPromptExecutorSpan(ctx context.Context, span cozeloop.Span, prompt *entity.Prompt, reply *entity.Reply, err error) { + if span == nil || prompt == nil { + return + } + var debugID int64 + var replyItem *entity.ReplyItem + if reply != nil { + debugID = reply.DebugID + replyItem = reply.Item + } + var inputTokens, outputTokens int64 + if replyItem != nil && replyItem.TokenUsage != nil { + inputTokens = replyItem.TokenUsage.InputTokens + outputTokens = replyItem.TokenUsage.OutputTokens + } + span.SetPrompt(ctx, loopentity.Prompt{PromptKey: prompt.PromptKey, Version: prompt.GetVersion()}) + span.SetOutput(ctx, json.Jsonify(trace.ReplyItemToSpanOutput(replyItem))) + span.SetInputTokens(ctx, int(inputTokens)) + span.SetOutputTokens(ctx, int(outputTokens)) + span.SetTags(ctx, map[string]any{ + consts.SpanTagDebugID: debugID, + }) + if err != nil { + span.SetStatusCode(ctx, int(traceutil.GetTraceStatusCode(err))) + span.SetError(ctx, errors.New(errorx.ErrorWithoutStack(err))) + } + span.Finish(ctx) +} + +func validateExecuteRequest(req *openapi.ExecuteRequest) error { + err := req.IsValid() + if err != nil { + return err + } + if req.GetWorkspaceID() == 0 { + return errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "workspace_id参数为空"})) + } + if req.GetPromptIdentifier() == nil || req.GetPromptIdentifier().GetPromptKey() == "" { + return errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "prompt_key参数为空"})) + } + validateParts := func(parts []*openapi.ContentPart) error { + for _, part := range parts { + switch part.GetType() { + case openapi.ContentTypeImageURL: + if !govalidator.IsURL(part.GetImageURL()) { + return errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": fmt.Sprintf("%s不是有效的URL", part.GetImageURL())})) + } + case openapi.ContentTypeBase64Data: + if _, err = dataurl.DecodeString(part.GetBase64Data()); err != nil { + return errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "存在无效的base64数据,数据格式应该符合data:[][;base64],"})) + } + } + } + return nil + } + for _, message := range req.Messages { + err = validateParts(message.Parts) + if err != nil { + return err + } + } + for _, val := range req.VariableVals { + err = validateParts(val.MultiPartValues) + if err != nil { + return err + } + } + return nil +} diff --git a/backend/modules/prompt/application/openapi_test.go b/backend/modules/prompt/application/openapi_test.go index b73708b05..dd6dbd8bd 100644 --- a/backend/modules/prompt/application/openapi_test.go +++ b/backend/modules/prompt/application/openapi_test.go @@ -9,8 +9,12 @@ import ( "testing" "time" + "github.com/cloudwego/kitex/pkg/streaming" + "github.com/coze-dev/cozeloop-go" "github.com/stretchr/testify/assert" "go.uber.org/mock/gomock" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "github.com/coze-dev/coze-loop/backend/infra/limiter" limitermocks "github.com/coze-dev/coze-loop/backend/infra/limiter/mocks" @@ -27,6 +31,7 @@ import ( servicemocks "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/service/mocks" "github.com/coze-dev/coze-loop/backend/modules/prompt/infra/collector" collectormocks "github.com/coze-dev/coze-loop/backend/modules/prompt/infra/collector/mocks" + "github.com/coze-dev/coze-loop/backend/modules/prompt/pkg/consts" prompterr "github.com/coze-dev/coze-loop/backend/modules/prompt/pkg/errno" "github.com/coze-dev/coze-loop/backend/pkg/errorx" "github.com/coze-dev/coze-loop/backend/pkg/lang/ptr" @@ -1327,7 +1332,7 @@ func TestPromptOpenAPIApplicationImpl_BatchGetPromptByPromptKey(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - t.Parallel() + // 移除 t.Parallel() 以避免数据竞争 ctrl := gomock.NewController(t) defer ctrl.Finish() ttFields := tt.fieldsGetter(ctrl) @@ -1345,3 +1350,2729 @@ func TestPromptOpenAPIApplicationImpl_BatchGetPromptByPromptKey(t *testing.T) { }) } } + +func TestValidateExecuteRequest(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + req *openapi.ExecuteRequest + wantErr error + }{ + { + name: "success: valid request", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + wantErr: nil, + }, + { + name: "error: workspace_id is zero", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(0)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "workspace_id参数为空"})), + }, + { + name: "error: workspace_id is nil", + req: &openapi.ExecuteRequest{ + WorkspaceID: nil, + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "workspace_id参数为空"})), + }, + { + name: "error: prompt_identifier is nil", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: nil, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "prompt_key参数为空"})), + }, + { + name: "error: prompt_key is empty", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of(""), + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "prompt_key参数为空"})), + }, + { + name: "error: prompt_key is nil", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: nil, + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "prompt_key参数为空"})), + }, + { + name: "error: invalid image URL", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: ptr.Of("invalid-url"), + }, + }, + }, + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "invalid-url不是有效的URL"})), + }, + { + name: "error: invalid base64 data", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeBase64Data), + Base64Data: ptr.Of("invalid-base64"), + }, + }, + }, + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "存在无效的base64数据,数据格式应该符合data:[][;base64],"})), + }, + { + name: "success: valid image URL", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: ptr.Of("https://example.com/image.jpg"), + }, + }, + }, + }, + }, + wantErr: nil, + }, + { + name: "success: valid base64 data", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeBase64Data), + Base64Data: ptr.Of("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg=="), + }, + }, + }, + }, + }, + wantErr: nil, + }, + { + name: "error: invalid base64 data in variable vals", + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + VariableVals: []*openapi.VariableVal{ + { + Key: ptr.Of("image_var"), + MultiPartValues: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeBase64Data), + Base64Data: ptr.Of("invalid-base64"), + }, + }, + }, + }, + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "存在无效的base64数据,数据格式应该符合data:[][;base64],"})), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + err := validateExecuteRequest(tt.req) + unittest.AssertErrorEqual(t, tt.wantErr, err) + }) + } +} + +func TestPromptOpenAPIApplicationImpl_ptaasAllowByPromptKey(t *testing.T) { + t.Parallel() + + type fields struct { + config conf.IConfigProvider + rateLimiter limiter.IRateLimiter + } + type args struct { + ctx context.Context + workspaceID int64 + promptKey string + } + + tests := []struct { + name string + fieldsGetter func(ctrl *gomock.Controller) fields + args args + want bool + }{ + { + name: "success: allowed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + workspaceID: 123456, + promptKey: "test_prompt", + }, + want: true, + }, + { + name: "rate limit exceeded", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(10, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: false, + }, nil) + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + workspaceID: 123456, + promptKey: "test_prompt", + }, + want: false, + }, + { + name: "config error: default allow", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(0, errors.New("config error")) + + return fields{ + config: mockConfig, + } + }, + args: args{ + ctx: context.Background(), + workspaceID: 123456, + promptKey: "test_prompt", + }, + want: true, + }, + { + name: "rate limiter error: default allow", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(nil, errors.New("limiter error")) + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + workspaceID: 123456, + promptKey: "test_prompt", + }, + want: true, + }, + { + name: "rate limiter returns nil result: default allow", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(nil, nil) + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + workspaceID: 123456, + promptKey: "test_prompt", + }, + want: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ttFields := tt.fieldsGetter(ctrl) + p := &PromptOpenAPIApplicationImpl{ + config: ttFields.config, + rateLimiter: ttFields.rateLimiter, + } + got := p.ptaasAllowByPromptKey(tt.args.ctx, tt.args.workspaceID, tt.args.promptKey) + assert.Equal(t, tt.want, got) + }) + } +} + +func TestPromptOpenAPIApplicationImpl_getPromptByPromptKey(t *testing.T) { + t.Parallel() + + type fields struct { + promptService service.IPromptService + promptManageRepo repo.IManageRepo + } + type args struct { + ctx context.Context + spaceID int64 + promptIdentifier *openapi.PromptQuery + } + + tests := []struct { + name string + fieldsGetter func(ctrl *gomock.Controller) fields + args args + wantPrompt *entity.Prompt + wantErr error + }{ + { + name: "success: get prompt by key and version", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), []service.PromptQueryParam{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}, + }).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + } + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + wantPrompt: &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + }, + wantErr: nil, + }, + { + name: "error: prompt identifier is nil", + fieldsGetter: func(ctrl *gomock.Controller) fields { + return fields{} + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: nil, + }, + wantPrompt: nil, + wantErr: errors.New("prompt identifier is nil"), + }, + { + name: "error: get prompt IDs failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(nil, errors.New("database error")) + + return fields{ + promptService: mockPromptService, + } + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + wantPrompt: nil, + wantErr: errors.New("database error"), + }, + { + name: "error: parse commit version failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), []service.PromptQueryParam{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}, + }).Return(nil, errors.New("parse version error")) + + return fields{ + promptService: mockPromptService, + } + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + wantPrompt: nil, + wantErr: errors.New("parse version error"), + }, + { + name: "error: get prompt failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), []service.PromptQueryParam{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}, + }).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, errors.New("database error")) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + } + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + wantPrompt: nil, + wantErr: errors.New("database error"), + }, + { + name: "error: prompt version not exist with enhanced error info", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), []service.PromptQueryParam{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}, + }).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, + errorx.NewByCode(prompterr.PromptVersionNotExistCode, + errorx.WithExtra(map[string]string{"prompt_id": "123"}))) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + } + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + wantPrompt: nil, + wantErr: errorx.NewByCode(prompterr.PromptVersionNotExistCode, + errorx.WithExtra(map[string]string{"prompt_id": "123", "prompt_key": "test_prompt"})), + }, + { + name: "success: get prompt by label", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), []service.PromptQueryParam{ + {PromptID: 123, PromptKey: "test_prompt", Label: "stable"}, + }).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Label: "stable"}: "2.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "2.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "2.0.0", + BaseVersion: "", + Description: "Stable version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "2.0.0"}: expectedPrompt, + }, nil) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + } + }, + args: args{ + ctx: context.Background(), + spaceID: 123456, + promptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Label: ptr.Of("stable"), + }, + }, + wantPrompt: &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "2.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "2.0.0", + BaseVersion: "", + Description: "Stable version", + CommittedBy: "test_user", + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + }, + wantErr: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ttFields := tt.fieldsGetter(ctrl) + p := &PromptOpenAPIApplicationImpl{ + promptService: ttFields.promptService, + promptManageRepo: ttFields.promptManageRepo, + } + gotPrompt, err := p.getPromptByPromptKey(tt.args.ctx, tt.args.spaceID, tt.args.promptIdentifier) + unittest.AssertErrorEqual(t, tt.wantErr, err) + if tt.wantPrompt != nil && gotPrompt != nil { + // 比较关键字段,忽略时间字段的差异 + assert.Equal(t, tt.wantPrompt.ID, gotPrompt.ID) + assert.Equal(t, tt.wantPrompt.SpaceID, gotPrompt.SpaceID) + assert.Equal(t, tt.wantPrompt.PromptKey, gotPrompt.PromptKey) + if tt.wantPrompt.PromptBasic != nil && gotPrompt.PromptBasic != nil { + assert.Equal(t, tt.wantPrompt.PromptBasic.DisplayName, gotPrompt.PromptBasic.DisplayName) + assert.Equal(t, tt.wantPrompt.PromptBasic.Description, gotPrompt.PromptBasic.Description) + assert.Equal(t, tt.wantPrompt.PromptBasic.LatestVersion, gotPrompt.PromptBasic.LatestVersion) + } + if tt.wantPrompt.PromptCommit != nil && gotPrompt.PromptCommit != nil && + tt.wantPrompt.PromptCommit.CommitInfo != nil && gotPrompt.PromptCommit.CommitInfo != nil { + assert.Equal(t, tt.wantPrompt.PromptCommit.CommitInfo.Version, gotPrompt.PromptCommit.CommitInfo.Version) + assert.Equal(t, tt.wantPrompt.PromptCommit.CommitInfo.Description, gotPrompt.PromptCommit.CommitInfo.Description) + } + } else { + assert.Equal(t, tt.wantPrompt, gotPrompt) + } + }) + } +} + +func TestPromptOpenAPIApplicationImpl_startPromptExecutorSpan(t *testing.T) { + t.Parallel() + + type args struct { + ctx context.Context + param ptaasStartPromptExecutorSpanParam + } + + tests := []struct { + name string + args args + }{ + { + name: "success: start span", + args: args{ + ctx: context.Background(), + param: ptaasStartPromptExecutorSpanParam{ + workspaceID: 123456, + stream: false, + reqPromptKey: "test_prompt", + reqPromptVersion: "1.0.0", + reqPromptLabel: "stable", + messages: []*entity.Message{ + { + Role: entity.RoleUser, + Content: ptr.Of("Hello"), + }, + }, + variableVals: []*entity.VariableVal{ + { + Key: "var1", + Value: ptr.Of("value1"), + }, + }, + }, + }, + }, + { + name: "success: start streaming span", + args: args{ + ctx: context.Background(), + param: ptaasStartPromptExecutorSpanParam{ + workspaceID: 123456, + stream: true, + reqPromptKey: "test_prompt", + reqPromptVersion: "2.0.0", + reqPromptLabel: "", + messages: []*entity.Message{}, + variableVals: []*entity.VariableVal{}, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + p := &PromptOpenAPIApplicationImpl{} + gotCtx, gotSpan := p.startPromptExecutorSpan(tt.args.ctx, tt.args.param) + assert.NotNil(t, gotCtx) + // span 可能为 nil,这是正常的 + _ = gotSpan + }) + } +} + +func TestPromptOpenAPIApplicationImpl_finishPromptExecutorSpan(t *testing.T) { + t.Parallel() + + type args struct { + ctx context.Context + span cozeloop.Span + prompt *entity.Prompt + reply *entity.Reply + err error + } + + tests := []struct { + name string + args args + }{ + { + name: "success: finish span with all data", + args: args{ + ctx: context.Background(), + span: nil, // 在实际测试中,span 可能为 nil + prompt: &entity.Prompt{ + ID: 123, + PromptKey: "test_prompt", + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + }, + }, + }, + reply: &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + }, + err: nil, + }, + }, + { + name: "success: finish span with error", + args: args{ + ctx: context.Background(), + span: nil, + prompt: &entity.Prompt{ + ID: 123, + PromptKey: "test_prompt", + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + }, + }, + }, + reply: nil, + err: errors.New("execution error"), + }, + }, + { + name: "span is nil: should return early", + args: args{ + ctx: context.Background(), + span: nil, + prompt: nil, + reply: nil, + err: nil, + }, + }, + { + name: "prompt is nil: should return early", + args: args{ + ctx: context.Background(), + span: nil, // 假设有一个 span,但 prompt 为 nil + prompt: nil, + reply: nil, + err: nil, + }, + }, + { + name: "success: finish span with minimal data", + args: args{ + ctx: context.Background(), + span: nil, + prompt: &entity.Prompt{ + ID: 123, + PromptKey: "test_prompt", + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + }, + }, + }, + reply: &entity.Reply{ + DebugID: 0, + Item: nil, + }, + err: nil, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + p := &PromptOpenAPIApplicationImpl{} + // finishPromptExecutorSpan 没有返回值,只需要确保不 panic + p.finishPromptExecutorSpan(tt.args.ctx, tt.args.span, tt.args.prompt, tt.args.reply, tt.args.err) + }) + } +} + +func TestPromptOpenAPIApplicationImpl_doExecute(t *testing.T) { + t.Parallel() + + type fields struct { + promptService service.IPromptService + promptManageRepo repo.IManageRepo + config conf.IConfigProvider + auth rpc.IAuthProvider + rateLimiter limiter.IRateLimiter + } + type args struct { + ctx context.Context + req *openapi.ExecuteRequest + } + + tests := []struct { + name string + fieldsGetter func(ctrl *gomock.Controller) fields + args args + wantPromptDO *entity.Prompt + wantReply *entity.Reply + wantErr error + }{ + { + name: "success: execute prompt", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + expectedReply := &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + } + mockPromptService.EXPECT().Execute(gomock.Any(), gomock.Any()).Return(expectedReply, nil) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + }, + wantPromptDO: &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + }, + wantReply: &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + }, + wantErr: nil, + }, + { + name: "error: rate limit exceeded", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(10, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: false, + }, nil) + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + }, + wantPromptDO: nil, + wantReply: nil, + wantErr: errorx.NewByCode(prompterr.PTaaSQPSLimitCode, errorx.WithExtraMsg("qps limit exceeded")), + }, + { + name: "error: get prompt failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(nil, errors.New("database error")) + + return fields{ + promptService: mockPromptService, + config: mockConfig, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + }, + wantPromptDO: nil, + wantReply: nil, + wantErr: errors.New("database error"), + }, + { + name: "error: permission check failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(errorx.NewByCode(prompterr.CommonNoPermissionCode)) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + }, + wantPromptDO: &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + }, + wantReply: nil, + wantErr: errorx.NewByCode(prompterr.CommonNoPermissionCode), + }, + { + name: "error: prompt execution failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + mockPromptService.EXPECT().Execute(gomock.Any(), gomock.Any()).Return(nil, errors.New("execution failed")) + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + }, + }, + wantPromptDO: &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + }, + wantReply: nil, + wantErr: errors.New("execution failed"), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ttFields := tt.fieldsGetter(ctrl) + p := &PromptOpenAPIApplicationImpl{ + promptService: ttFields.promptService, + promptManageRepo: ttFields.promptManageRepo, + config: ttFields.config, + auth: ttFields.auth, + rateLimiter: ttFields.rateLimiter, + } + gotPromptDO, gotReply, err := p.doExecute(tt.args.ctx, tt.args.req) + unittest.AssertErrorEqual(t, tt.wantErr, err) + if tt.wantPromptDO != nil && gotPromptDO != nil { + assert.Equal(t, tt.wantPromptDO.ID, gotPromptDO.ID) + assert.Equal(t, tt.wantPromptDO.SpaceID, gotPromptDO.SpaceID) + assert.Equal(t, tt.wantPromptDO.PromptKey, gotPromptDO.PromptKey) + } else { + assert.Equal(t, tt.wantPromptDO, gotPromptDO) + } + if tt.wantReply != nil && gotReply != nil { + assert.Equal(t, tt.wantReply.DebugID, gotReply.DebugID) + if tt.wantReply.Item != nil && gotReply.Item != nil { + assert.Equal(t, tt.wantReply.Item.FinishReason, gotReply.Item.FinishReason) + if tt.wantReply.Item.TokenUsage != nil && gotReply.Item.TokenUsage != nil { + assert.Equal(t, tt.wantReply.Item.TokenUsage.InputTokens, gotReply.Item.TokenUsage.InputTokens) + assert.Equal(t, tt.wantReply.Item.TokenUsage.OutputTokens, gotReply.Item.TokenUsage.OutputTokens) + } + } + } else { + assert.Equal(t, tt.wantReply, gotReply) + } + }) + } +} + +func TestPromptOpenAPIApplicationImpl_Execute(t *testing.T) { + t.Parallel() + + type fields struct { + promptService service.IPromptService + promptManageRepo repo.IManageRepo + config conf.IConfigProvider + auth rpc.IAuthProvider + rateLimiter limiter.IRateLimiter + collector collector.ICollectorProvider + } + type args struct { + ctx context.Context + req *openapi.ExecuteRequest + } + + tests := []struct { + name string + fieldsGetter func(ctrl *gomock.Controller) fields + args args + wantR *openapi.ExecuteResponse + wantErr error + }{ + { + name: "success: execute prompt", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + expectedReply := &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + } + mockPromptService.EXPECT().Execute(gomock.Any(), gomock.Any()).Return(expectedReply, nil) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + }, + wantR: &openapi.ExecuteResponse{ + Data: &openapi.ExecuteData{ + Message: &openapi.Message{ + Role: ptr.Of(prompt.RoleAssistant), + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: ptr.Of("stop"), + Usage: &openapi.TokenUsage{ + InputTokens: ptr.Of(int32(10)), + OutputTokens: ptr.Of(int32(20)), + }, + }, + }, + wantErr: nil, + }, + { + name: "error: invalid request", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + collector: mockCollector, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(0)), // 无效的 workspace_id + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + }, + }, + wantR: openapi.NewExecuteResponse(), + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "workspace_id参数为空"})), + }, + { + name: "error: rate limit exceeded", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(10, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: false, + }, nil) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + }, + wantR: openapi.NewExecuteResponse(), + wantErr: errorx.NewByCode(prompterr.PTaaSQPSLimitCode, errorx.WithExtraMsg("qps limit exceeded")), + }, + { + name: "success: execute with nil reply item", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + // 返回 nil reply 或者 reply.Item 为 nil + expectedReply := &entity.Reply{ + DebugID: 456, + Item: nil, + } + mockPromptService.EXPECT().Execute(gomock.Any(), gomock.Any()).Return(expectedReply, nil) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + args: args{ + ctx: context.Background(), + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + }, + wantR: &openapi.ExecuteResponse{ + Data: nil, // 当 reply.Item 为 nil 时,Data 应该为 nil + }, + wantErr: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ttFields := tt.fieldsGetter(ctrl) + p := &PromptOpenAPIApplicationImpl{ + promptService: ttFields.promptService, + promptManageRepo: ttFields.promptManageRepo, + config: ttFields.config, + auth: ttFields.auth, + rateLimiter: ttFields.rateLimiter, + collector: ttFields.collector, + } + gotR, err := p.Execute(tt.args.ctx, tt.args.req) + unittest.AssertErrorEqual(t, tt.wantErr, err) + if tt.wantR != nil && gotR != nil { + if tt.wantR.Data != nil && gotR.Data != nil { + assert.Equal(t, tt.wantR.Data.FinishReason, gotR.Data.FinishReason) + if tt.wantR.Data.Message != nil && gotR.Data.Message != nil { + assert.Equal(t, tt.wantR.Data.Message.Role, gotR.Data.Message.Role) + assert.Equal(t, tt.wantR.Data.Message.Content, gotR.Data.Message.Content) + } + if tt.wantR.Data.Usage != nil && gotR.Data.Usage != nil { + if tt.wantR.Data.Usage.InputTokens != nil && gotR.Data.Usage.InputTokens != nil { + assert.Equal(t, *tt.wantR.Data.Usage.InputTokens, *gotR.Data.Usage.InputTokens) + } else { + assert.Equal(t, tt.wantR.Data.Usage.InputTokens, gotR.Data.Usage.InputTokens) + } + if tt.wantR.Data.Usage.OutputTokens != nil && gotR.Data.Usage.OutputTokens != nil { + assert.Equal(t, *tt.wantR.Data.Usage.OutputTokens, *gotR.Data.Usage.OutputTokens) + } else { + assert.Equal(t, tt.wantR.Data.Usage.OutputTokens, gotR.Data.Usage.OutputTokens) + } + } + } else { + assert.Equal(t, tt.wantR.Data, gotR.Data) + } + } else { + assert.Equal(t, tt.wantR, gotR) + } + }) + } +} + +// mockExecuteStreamingServer 用于测试的mock流式服务器 +type mockExecuteStreamingServer struct { + ctx context.Context + sendCalls []*openapi.ExecuteStreamingResponse + sendErrors []error + sendIndex int +} + +func newMockExecuteStreamingServer(ctx context.Context) *mockExecuteStreamingServer { + return &mockExecuteStreamingServer{ + ctx: ctx, + sendCalls: make([]*openapi.ExecuteStreamingResponse, 0), + sendErrors: make([]error, 0), + sendIndex: 0, + } +} + +func (m *mockExecuteStreamingServer) Send(ctx context.Context, resp *openapi.ExecuteStreamingResponse) error { + m.sendCalls = append(m.sendCalls, resp) + if m.sendIndex < len(m.sendErrors) { + err := m.sendErrors[m.sendIndex] + m.sendIndex++ + return err + } + m.sendIndex++ + return nil +} + +func (m *mockExecuteStreamingServer) RecvMsg(ctx context.Context, msg interface{}) error { + return nil +} + +func (m *mockExecuteStreamingServer) SendMsg(ctx context.Context, msg interface{}) error { + return nil +} + +func (m *mockExecuteStreamingServer) SendHeader(header streaming.Header) error { + return nil +} + +func (m *mockExecuteStreamingServer) SetHeader(header streaming.Header) error { + return nil +} + +func (m *mockExecuteStreamingServer) SetTrailer(trailer streaming.Trailer) error { + return nil +} + +func (m *mockExecuteStreamingServer) SetSendErrors(errors ...error) { + m.sendErrors = errors +} + +func (m *mockExecuteStreamingServer) GetSendCalls() []*openapi.ExecuteStreamingResponse { + return m.sendCalls +} + +func TestPromptOpenAPIApplicationImpl_ExecuteStreaming(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + + type fields struct { + promptService service.IPromptService + promptManageRepo repo.IManageRepo + config conf.IConfigProvider + auth rpc.IAuthProvider + rateLimiter limiter.IRateLimiter + collector collector.ICollectorProvider + } + type args struct { + ctx context.Context + req *openapi.ExecuteRequest + stream openapi.PromptOpenAPIService_ExecuteStreamingServer + } + + tests := []struct { + name string + fieldsGetter func(ctrl *gomock.Controller) fields + argsGetter func(ctrl *gomock.Controller) args + wantErr error + validateFunc func(t *testing.T, stream *mockExecuteStreamingServer) + }{ + { + name: "success: normal streaming execution", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + // Mock ExecuteStreaming 返回多个流式响应 + expectedReply := &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + } + mockPromptService.EXPECT().ExecuteStreaming(gomock.Any(), gomock.Any()).DoAndReturn( + func(ctx context.Context, param service.ExecuteStreamingParam) (*entity.Reply, error) { + // 模拟发送多个流式响应 - 使用同步方式避免竞争条件 + // 发送第一个chunk + param.ResultStream <- &entity.Reply{ + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello"), + }, + FinishReason: "", + TokenUsage: &entity.TokenUsage{ + InputTokens: 5, + OutputTokens: 1, + }, + }, + } + // 发送第二个chunk + param.ResultStream <- &entity.Reply{ + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of(", how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + } + return expectedReply, nil + }) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: nil, + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 2) + assert.Equal(t, "Hello", calls[0].Data.Message.GetContent()) + assert.Equal(t, ", how can I help you?", calls[1].Data.Message.GetContent()) + assert.Equal(t, "stop", calls[1].Data.GetFinishReason()) + }, + }, + { + name: "error: workspace_id is empty", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(0)), // 无效的 workspace_id + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + }, + stream: stream, + } + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "workspace_id参数为空"})), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) // 参数验证失败,不应该发送任何响应 + }, + }, + { + name: "error: prompt_key is empty", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of(""), // 空的 prompt_key + }, + }, + stream: stream, + } + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "prompt_key参数为空"})), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: invalid URL in message parts", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeImageURL), + ImageURL: ptr.Of("invalid-url"), // 无效的URL + }, + }, + }, + }, + }, + stream: stream, + } + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "invalid-url不是有效的URL"})), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: invalid base64 data", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Parts: []*openapi.ContentPart{ + { + Type: ptr.Of(openapi.ContentTypeBase64Data), + Base64Data: ptr.Of("invalid-base64"), // 无效的base64 + }, + }, + }, + }, + }, + stream: stream, + } + }, + wantErr: errorx.NewByCode(prompterr.CommonInvalidParamCode, errorx.WithExtra(map[string]string{"invalid_param": "存在无效的base64数据,数据格式应该符合data:[][;base64],"})), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: rate limit exceeded", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(10, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: false, + }, nil) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + config: mockConfig, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: errorx.NewByCode(prompterr.PTaaSQPSLimitCode, errorx.WithExtraMsg("qps limit exceeded")), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: permission check failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return( + errorx.NewByCode(prompterr.CommonNoPermissionCode)) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: errorx.NewByCode(prompterr.CommonNoPermissionCode), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: get prompt failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(nil, errors.New("database error")) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + config: mockConfig, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: errors.New("database error"), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: execute service error", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + // Mock ExecuteStreaming 返回错误 + mockPromptService.EXPECT().ExecuteStreaming(gomock.Any(), gomock.Any()).DoAndReturn( + func(ctx context.Context, param service.ExecuteStreamingParam) (*entity.Reply, error) { + // 不发送任何响应,直接返回错误 + return nil, errors.New("execute service error") + }) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: errors.New("execute service error"), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) + }, + }, + { + name: "error: stream send failed", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + // Mock ExecuteStreaming 返回流式响应 + expectedReply := &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + } + mockPromptService.EXPECT().ExecuteStreaming(gomock.Any(), gomock.Any()).DoAndReturn( + func(ctx context.Context, param service.ExecuteStreamingParam) (*entity.Reply, error) { + // 发送一个响应 + param.ResultStream <- &entity.Reply{ + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello"), + }, + FinishReason: "", + TokenUsage: &entity.TokenUsage{ + InputTokens: 5, + OutputTokens: 1, + }, + }, + } + return expectedReply, nil + }) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + // 设置第一次发送失败 + stream.SetSendErrors(errors.New("send failed")) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: errors.New("send failed"), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 1) // 发送了一次但失败了 + }, + }, + { + name: "success: client canceled context", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + // Mock ExecuteStreaming 返回流式响应 + expectedReply := &entity.Reply{ + DebugID: 456, + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello, how can I help you?"), + }, + FinishReason: "stop", + TokenUsage: &entity.TokenUsage{ + InputTokens: 10, + OutputTokens: 20, + }, + }, + } + mockPromptService.EXPECT().ExecuteStreaming(gomock.Any(), gomock.Any()).DoAndReturn( + func(ctx context.Context, param service.ExecuteStreamingParam) (*entity.Reply, error) { + // 发送一个响应 + param.ResultStream <- &entity.Reply{ + Item: &entity.ReplyItem{ + Message: &entity.Message{ + Role: entity.RoleAssistant, + Content: ptr.Of("Hello"), + }, + FinishReason: "", + TokenUsage: &entity.TokenUsage{ + InputTokens: 5, + OutputTokens: 1, + }, + }, + } + return expectedReply, nil + }) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + // 模拟客户端取消 + stream.SetSendErrors(status.Error(codes.Canceled, "context canceled")) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: status.Error(codes.Canceled, "context canceled"), // 实际测试显示返回取消错误 + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 1) + }, + }, + { + name: "error: goroutine panic recovery", + fieldsGetter: func(ctrl *gomock.Controller) fields { + mockConfig := confmocks.NewMockIConfigProvider(ctrl) + mockConfig.EXPECT().GetPTaaSMaxQPSByPromptKey(gomock.Any(), int64(123456), "test_prompt").Return(100, nil) + + mockRateLimiter := limitermocks.NewMockIRateLimiter(ctrl) + mockRateLimiter.EXPECT().AllowN(gomock.Any(), "ptaas:qps:space_id:123456:prompt_key:test_prompt", 1, gomock.Any()).Return(&limiter.Result{ + Allowed: true, + }, nil) + + mockPromptService := servicemocks.NewMockIPromptService(ctrl) + mockPromptService.EXPECT().MGetPromptIDs(gomock.Any(), int64(123456), []string{"test_prompt"}).Return(map[string]int64{ + "test_prompt": 123, + }, nil) + mockPromptService.EXPECT().MParseCommitVersion(gomock.Any(), int64(123456), gomock.Any()).Return(map[service.PromptQueryParam]string{ + {PromptID: 123, PromptKey: "test_prompt", Version: "1.0.0"}: "1.0.0", + }, nil) + + mockManageRepo := repomocks.NewMockIManageRepo(ctrl) + startTime := time.Now() + expectedPrompt := &entity.Prompt{ + ID: 123, + SpaceID: 123456, + PromptKey: "test_prompt", + PromptBasic: &entity.PromptBasic{ + DisplayName: "Test Prompt", + Description: "Test Description", + LatestVersion: "1.0.0", + CreatedBy: "test_user", + UpdatedBy: "test_user", + CreatedAt: startTime, + UpdatedAt: startTime, + }, + PromptCommit: &entity.PromptCommit{ + CommitInfo: &entity.CommitInfo{ + Version: "1.0.0", + BaseVersion: "", + Description: "Initial version", + CommittedBy: "test_user", + CommittedAt: startTime, + }, + PromptDetail: &entity.PromptDetail{ + PromptTemplate: &entity.PromptTemplate{ + TemplateType: entity.TemplateTypeNormal, + Messages: []*entity.Message{ + { + Role: entity.RoleSystem, + Content: ptr.Of("You are a helpful assistant."), + }, + }, + }, + ModelConfig: &entity.ModelConfig{ + ModelID: 123, + Temperature: ptr.Of(0.7), + }, + }, + }, + } + mockManageRepo.EXPECT().MGetPrompt(gomock.Any(), gomock.Any(), gomock.Any()).Return(map[repo.GetPromptParam]*entity.Prompt{ + {PromptID: 123, WithCommit: true, CommitVersion: "1.0.0"}: expectedPrompt, + }, nil) + + mockAuth := rpcmocks.NewMockIAuthProvider(ctrl) + mockAuth.EXPECT().MCheckPromptPermission(gomock.Any(), int64(123456), []int64{123}, consts.ActionLoopPromptExecute).Return(nil) + + // Mock ExecuteStreaming 模拟panic + mockPromptService.EXPECT().ExecuteStreaming(gomock.Any(), gomock.Any()).DoAndReturn( + func(ctx context.Context, param service.ExecuteStreamingParam) (*entity.Reply, error) { + // 模拟panic + panic("test panic") + }) + + mockCollector := collectormocks.NewMockICollectorProvider(ctrl) + mockCollector.EXPECT().CollectPTaaSEvent(gomock.Any(), gomock.Any()).Return() + + return fields{ + promptService: mockPromptService, + promptManageRepo: mockManageRepo, + config: mockConfig, + auth: mockAuth, + rateLimiter: mockRateLimiter, + collector: mockCollector, + } + }, + argsGetter: func(ctrl *gomock.Controller) args { + ctx := context.Background() + stream := newMockExecuteStreamingServer(ctx) + return args{ + ctx: ctx, + req: &openapi.ExecuteRequest{ + WorkspaceID: ptr.Of(int64(123456)), + PromptIdentifier: &openapi.PromptQuery{ + PromptKey: ptr.Of("test_prompt"), + Version: ptr.Of("1.0.0"), + }, + Messages: []*openapi.Message{ + { + Role: ptr.Of(prompt.RoleUser), + Content: ptr.Of("Hello"), + }, + }, + }, + stream: stream, + } + }, + wantErr: errorx.New("panic occurred, reason=test panic"), + validateFunc: func(t *testing.T, stream *mockExecuteStreamingServer) { + calls := stream.GetSendCalls() + assert.Len(t, calls, 0) // panic发生时不应该发送响应 + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 移除 t.Parallel() 以避免数据竞争 + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ttFields := tt.fieldsGetter(ctrl) + ttArgs := tt.argsGetter(ctrl) + p := &PromptOpenAPIApplicationImpl{ + promptService: ttFields.promptService, + promptManageRepo: ttFields.promptManageRepo, + config: ttFields.config, + auth: ttFields.auth, + rateLimiter: ttFields.rateLimiter, + collector: ttFields.collector, + } + err := p.ExecuteStreaming(ttArgs.ctx, ttArgs.req, ttArgs.stream) + unittest.AssertErrorEqual(t, tt.wantErr, err) + if tt.validateFunc != nil { + if mockStream, ok := ttArgs.stream.(*mockExecuteStreamingServer); ok { + tt.validateFunc(t, mockStream) + } + } + }) + } +} diff --git a/backend/modules/prompt/domain/component/conf/mocks/config_provider.go b/backend/modules/prompt/domain/component/conf/mocks/config_provider.go index 5f1871fd3..d4aec85f6 100644 --- a/backend/modules/prompt/domain/component/conf/mocks/config_provider.go +++ b/backend/modules/prompt/domain/component/conf/mocks/config_provider.go @@ -42,6 +42,21 @@ func (m *MockIConfigProvider) EXPECT() *MockIConfigProviderMockRecorder { return m.recorder } +// GetPTaaSMaxQPSByPromptKey mocks base method. +func (m *MockIConfigProvider) GetPTaaSMaxQPSByPromptKey(ctx context.Context, spaceID int64, promptKey string) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPTaaSMaxQPSByPromptKey", ctx, spaceID, promptKey) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPTaaSMaxQPSByPromptKey indicates an expected call of GetPTaaSMaxQPSByPromptKey. +func (mr *MockIConfigProviderMockRecorder) GetPTaaSMaxQPSByPromptKey(ctx, spaceID, promptKey any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPTaaSMaxQPSByPromptKey", reflect.TypeOf((*MockIConfigProvider)(nil).GetPTaaSMaxQPSByPromptKey), ctx, spaceID, promptKey) +} + // GetPromptDefaultConfig mocks base method. func (m *MockIConfigProvider) GetPromptDefaultConfig(ctx context.Context) (*prompt.PromptDetail, error) { m.ctrl.T.Helper() diff --git a/backend/modules/prompt/domain/component/conf/prompt.go b/backend/modules/prompt/domain/component/conf/prompt.go index 55b325a90..06a6731cb 100644 --- a/backend/modules/prompt/domain/component/conf/prompt.go +++ b/backend/modules/prompt/domain/component/conf/prompt.go @@ -13,9 +13,8 @@ import ( //go:generate mockgen -destination=mocks/config_provider.go -package=mocks . IConfigProvider type IConfigProvider interface { GetPromptHubMaxQPSBySpace(ctx context.Context, spaceID int64) (maxQPS int, err error) - + GetPTaaSMaxQPSByPromptKey(ctx context.Context, spaceID int64, promptKey string) (maxQPS int, err error) GetPromptDefaultConfig(ctx context.Context) (config *prompt.PromptDetail, err error) - ListPresetLabels() (presetLabels []string, err error) GetPromptLabelVersionCacheConfig(ctx context.Context) (enable bool, ttl time.Duration, err error) } diff --git a/backend/modules/prompt/domain/component/trace/trace_span_convertor.go b/backend/modules/prompt/domain/component/trace/trace_span_convertor.go index 20b898913..ee5a6b934 100644 --- a/backend/modules/prompt/domain/component/trace/trace_span_convertor.go +++ b/backend/modules/prompt/domain/component/trace/trace_span_convertor.go @@ -113,6 +113,7 @@ func ContentPartToSpanPart(part *entity.ContentPart) *tracespec.ModelMessagePart URL: part.ImageURL.URL, } } + // 二进制数据暂不上报 return &tracespec.ModelMessagePart{ Type: ContentTypeToSpanPartType(part.Type), Text: ptr.From(part.Text), diff --git a/backend/modules/prompt/domain/entity/execute.go b/backend/modules/prompt/domain/entity/execute.go index e6c02f40b..0c9c6f69d 100644 --- a/backend/modules/prompt/domain/entity/execute.go +++ b/backend/modules/prompt/domain/entity/execute.go @@ -26,5 +26,6 @@ type Scenario string const ( ScenarioDefault Scenario = "default" ScenarioPromptDebug Scenario = "prompt_debug" + ScenarioPTaaS Scenario = "ptaas" ScenarioEvalTarget Scenario = "eval_target" ) diff --git a/backend/modules/prompt/domain/entity/prompt_detail.go b/backend/modules/prompt/domain/entity/prompt_detail.go index c5f15750a..bfd4b34f0 100644 --- a/backend/modules/prompt/domain/entity/prompt_detail.go +++ b/backend/modules/prompt/domain/entity/prompt_detail.go @@ -66,9 +66,10 @@ const ( ) type ContentPart struct { - Type ContentType `json:"type"` - Text *string `json:"text,omitempty"` - ImageURL *ImageURL `json:"image_url,omitempty"` + Type ContentType `json:"type"` + Text *string `json:"text,omitempty"` + ImageURL *ImageURL `json:"image_url,omitempty"` + Base64Data *string `json:"base64_data,omitempty"` } type ContentType string @@ -76,6 +77,7 @@ type ContentType string const ( ContentTypeText ContentType = "text" ContentTypeImageURL ContentType = "image_url" + ContentTypeBase64Data ContentType = "base64_data" ContentTypeMultiPartVariable ContentType = "multi_part_variable" ) diff --git a/backend/modules/prompt/domain/service/label_test.go b/backend/modules/prompt/domain/service/label_test.go old mode 100755 new mode 100644 index 1b258a851..6f2cb85ec --- a/backend/modules/prompt/domain/service/label_test.go +++ b/backend/modules/prompt/domain/service/label_test.go @@ -1,5 +1,6 @@ // Copyright (c) 2025 coze-dev Authors // SPDX-License-Identifier: Apache-2.0 + package service import ( diff --git a/backend/modules/prompt/infra/collector/event_collector.go b/backend/modules/prompt/infra/collector/event_collector.go index f9fa3d0d3..e6f2c0556 100644 --- a/backend/modules/prompt/infra/collector/event_collector.go +++ b/backend/modules/prompt/infra/collector/event_collector.go @@ -5,6 +5,7 @@ package collector import ( "context" + "time" "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/entity" ) @@ -12,6 +13,19 @@ import ( //go:generate mockgen -destination=mocks/event_collector.go -package=mocks . ICollectorProvider type ICollectorProvider interface { CollectPromptHubEvent(ctx context.Context, spaceID int64, prompts []*entity.Prompt) + CollectPTaaSEvent(ctx context.Context, executeLog *ExecuteLog) +} + +type ExecuteLog struct { + SpaceID int64 `json:"space_id,omitempty"` + PromptKey string `json:"prompt_key,omitempty"` + Version string `json:"version,omitempty"` + Stream bool `json:"stream,omitempty"` + InputTokens int64 `json:"input_tokens,omitempty"` + OutputTokens int64 `json:"output_tokens,omitempty"` + StartedAt time.Time `json:"started_at,omitempty"` + EndedAt time.Time `json:"ended_at,omitempty"` + StatusCode int32 `json:"status_code,omitempty"` } type EventCollectorProviderImpl struct{} @@ -22,3 +36,6 @@ func NewEventCollectorProvider() ICollectorProvider { func (c *EventCollectorProviderImpl) CollectPromptHubEvent(ctx context.Context, spaceID int64, prompts []*entity.Prompt) { } + +func (c *EventCollectorProviderImpl) CollectPTaaSEvent(ctx context.Context, executeLog *ExecuteLog) { +} diff --git a/backend/modules/prompt/infra/collector/mocks/event_collector.go b/backend/modules/prompt/infra/collector/mocks/event_collector.go index 1ecfe2609..ed3492533 100644 --- a/backend/modules/prompt/infra/collector/mocks/event_collector.go +++ b/backend/modules/prompt/infra/collector/mocks/event_collector.go @@ -14,6 +14,7 @@ import ( reflect "reflect" entity "github.com/coze-dev/coze-loop/backend/modules/prompt/domain/entity" + collector "github.com/coze-dev/coze-loop/backend/modules/prompt/infra/collector" gomock "go.uber.org/mock/gomock" ) @@ -41,6 +42,18 @@ func (m *MockICollectorProvider) EXPECT() *MockICollectorProviderMockRecorder { return m.recorder } +// CollectPTaaSEvent mocks base method. +func (m *MockICollectorProvider) CollectPTaaSEvent(ctx context.Context, executeLog *collector.ExecuteLog) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "CollectPTaaSEvent", ctx, executeLog) +} + +// CollectPTaaSEvent indicates an expected call of CollectPTaaSEvent. +func (mr *MockICollectorProviderMockRecorder) CollectPTaaSEvent(ctx, executeLog any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CollectPTaaSEvent", reflect.TypeOf((*MockICollectorProvider)(nil).CollectPTaaSEvent), ctx, executeLog) +} + // CollectPromptHubEvent mocks base method. func (m *MockICollectorProvider) CollectPromptHubEvent(ctx context.Context, spaceID int64, prompts []*entity.Prompt) { m.ctrl.T.Helper() diff --git a/backend/modules/prompt/infra/conf/prompt.go b/backend/modules/prompt/infra/conf/prompt.go index fea09a397..36886ef3d 100644 --- a/backend/modules/prompt/infra/conf/prompt.go +++ b/backend/modules/prompt/infra/conf/prompt.go @@ -5,6 +5,7 @@ package conf import ( "context" + "fmt" "time" "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/prompt/domain/prompt" @@ -31,6 +32,11 @@ type promptHubRateLimitConfig struct { SpaceMaxQPS map[int64]int `mapstructure:"space_max_qps"` } +type ptaasRateLimitConfig struct { + DefaultMaxQPS int `mapstructure:"default_max_qps"` + PromptKeyMaxQPS map[string]map[string]int `mapstructure:"prompt_key_max_qps"` +} + type promptLabelVersionCacheConfig struct { Enable bool `mapstructure:"enable"` TTLSeconds int `mapstructure:"ttl_seconds"` @@ -49,6 +55,27 @@ func (c *PromptConfigProvider) GetPromptHubMaxQPSBySpace(ctx context.Context, sp return config.DefaultMaxQPS, nil } +func (c *PromptConfigProvider) GetPTaaSMaxQPSByPromptKey(ctx context.Context, spaceID int64, promptKey string) (maxQPS int, err error) { + const PTaaSRateLimitConfigKey = "ptaas_rate_limit_config" + config := &ptaasRateLimitConfig{} + err = c.ConfigLoader.UnmarshalKey(ctx, PTaaSRateLimitConfigKey, config) + if err != nil { + return 0, err + } + + spaceIDStr := fmt.Sprintf("%d", spaceID) + + // 优先使用特定 space_id 和 prompt_key 的配置 + if spaceConfig, exists := config.PromptKeyMaxQPS[spaceIDStr]; exists { + if qps, exists := spaceConfig[promptKey]; exists { + return qps, nil + } + } + + // 使用默认配置 + return config.DefaultMaxQPS, nil +} + func (c *PromptConfigProvider) GetPromptDefaultConfig(ctx context.Context) (config *prompt.PromptDetail, err error) { return nil, nil } diff --git a/backend/modules/prompt/infra/conf/prompt_test.go b/backend/modules/prompt/infra/conf/prompt_test.go new file mode 100644 index 000000000..e52dfffd5 --- /dev/null +++ b/backend/modules/prompt/infra/conf/prompt_test.go @@ -0,0 +1,133 @@ +// Copyright (c) 2025 coze-dev Authors +// SPDX-License-Identifier: Apache-2.0 + +package conf + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "go.uber.org/mock/gomock" + + "github.com/coze-dev/coze-loop/backend/pkg/conf" + confmocks "github.com/coze-dev/coze-loop/backend/pkg/conf/mocks" +) + +func TestPromptConfigProvider_GetPTaaSMaxQPSByPromptKey(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + spaceID int64 + promptKey string + configData interface{} + mockErr error + wantQPS int + wantErr bool + }{ + { + name: "使用默认QPS - space_id和prompt_key都不存在", + spaceID: 12345, + promptKey: "non_existent_key", + configData: &ptaasRateLimitConfig{ + DefaultMaxQPS: 100, + PromptKeyMaxQPS: map[string]map[string]int{}, + }, + wantQPS: 100, + wantErr: false, + }, + { + name: "使用特定space_id和prompt_key的QPS", + spaceID: 12345, + promptKey: "special_prompt", + configData: &ptaasRateLimitConfig{ + DefaultMaxQPS: 100, + PromptKeyMaxQPS: map[string]map[string]int{ + "12345": { + "special_prompt": 200, + }, + }, + }, + wantQPS: 200, + wantErr: false, + }, + { + name: "space_id存在但prompt_key不存在时使用默认QPS", + spaceID: 12345, + promptKey: "non_existent_prompt", + configData: &ptaasRateLimitConfig{ + DefaultMaxQPS: 150, + PromptKeyMaxQPS: map[string]map[string]int{ + "12345": { + "other_prompt": 300, + }, + }, + }, + wantQPS: 150, + wantErr: false, + }, + { + name: "space_id不存在时使用默认QPS", + spaceID: 99999, + promptKey: "any_prompt", + configData: &ptaasRateLimitConfig{ + DefaultMaxQPS: 120, + PromptKeyMaxQPS: map[string]map[string]int{ + "12345": { + "some_prompt": 400, + }, + }, + }, + wantQPS: 120, + wantErr: false, + }, + { + name: "配置加载失败", + spaceID: 12345, + promptKey: "any_key", + mockErr: assert.AnError, + wantQPS: 0, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockConfigLoader := confmocks.NewMockIConfigLoader(ctrl) + + if tt.mockErr != nil { + mockConfigLoader.EXPECT(). + UnmarshalKey(gomock.Any(), "ptaas_rate_limit_config", gomock.Any()). + Return(tt.mockErr).AnyTimes() + } else { + mockConfigLoader.EXPECT(). + UnmarshalKey(gomock.Any(), "ptaas_rate_limit_config", gomock.Any()). + DoAndReturn(func(ctx context.Context, key string, target interface{}, opts ...conf.DecodeOptionFn) error { + if config, ok := target.(*ptaasRateLimitConfig); ok { + *config = *tt.configData.(*ptaasRateLimitConfig) + } + return nil + }).AnyTimes() + } + + provider := &PromptConfigProvider{ + ConfigLoader: mockConfigLoader, + } + + qps, err := provider.GetPTaaSMaxQPSByPromptKey(context.Background(), tt.spaceID, tt.promptKey) + + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + assert.Equal(t, tt.wantQPS, qps) + } + }) + } +} diff --git a/backend/modules/prompt/infra/rpc/convertor/chat.go b/backend/modules/prompt/infra/rpc/convertor/chat.go index f755af103..b3aa3b069 100644 --- a/backend/modules/prompt/infra/rpc/convertor/chat.go +++ b/backend/modules/prompt/infra/rpc/convertor/chat.go @@ -7,6 +7,7 @@ import ( "strconv" "github.com/bytedance/gg/gptr" + "github.com/vincent-petithory/dataurl" "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/llm/domain/common" runtimedto "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/llm/domain/runtime" @@ -132,7 +133,7 @@ func ContentPartDO2DTO(do *entity.ContentPart) *runtimedto.ChatMessagePart { return &runtimedto.ChatMessagePart{ Type: ptr.Of(ContentTypeDO2DTO(do.Type)), Text: do.Text, - ImageURL: ImageURLDO2DTO(do.ImageURL), + ImageURL: ImageURLDO2DTO(do.Type, do.ImageURL, do.Base64Data), } } @@ -142,18 +143,31 @@ func ContentTypeDO2DTO(do entity.ContentType) runtimedto.ChatMessagePartType { return runtimedto.ChatMessagePartTypeText case entity.ContentTypeImageURL: return runtimedto.ChatMessagePartTypeImageURL + case entity.ContentTypeBase64Data: + return runtimedto.ChatMessagePartTypeImageURL // 目前base64都通过image_url传递 default: return runtimedto.ChatMessagePartTypeText } } -func ImageURLDO2DTO(do *entity.ImageURL) *runtimedto.ChatMessageImageURL { - if do == nil { +func ImageURLDO2DTO(contentType entity.ContentType, url *entity.ImageURL, base64Data *string) *runtimedto.ChatMessageImageURL { + switch contentType { + case entity.ContentTypeImageURL: + return &runtimedto.ChatMessageImageURL{ + URL: ptr.Of(url.URL), + } + case entity.ContentTypeBase64Data: + dataURL, _ := dataurl.DecodeString(ptr.From(base64Data)) + if dataURL == nil { + return nil + } + return &runtimedto.ChatMessageImageURL{ + URL: base64Data, + MimeType: ptr.Of(dataURL.Type), + } + default: return nil } - return &runtimedto.ChatMessageImageURL{ - URL: ptr.Of(do.URL), - } } func BatchToolCallDO2DTO(dos []*entity.ToolCall) []*runtimedto.ToolCall { @@ -223,6 +237,8 @@ func ScenarioDO2DTO(do entity.Scenario) common.Scenario { switch do { case entity.ScenarioPromptDebug: return common.ScenarioPromptDebug + case entity.ScenarioPTaaS: + return common.ScenarioPromptAsAService case entity.ScenarioEvalTarget: return common.ScenarioEvalTarget default: diff --git a/backend/modules/prompt/pkg/consts/auth.go b/backend/modules/prompt/pkg/consts/auth.go index 0de2cb664..27a845a31 100644 --- a/backend/modules/prompt/pkg/consts/auth.go +++ b/backend/modules/prompt/pkg/consts/auth.go @@ -7,6 +7,7 @@ const ( ActionLoopPromptRead = "read" ActionLoopPromptEdit = "edit" ActionLoopPromptDebug = "debug" + ActionLoopPromptExecute = "execute" ActionWorkspaceListLoopPrompt = "listLoopPrompt" ActionWorkspaceCreateLoopPrompt = "createLoopPrompt" ) diff --git a/backend/modules/prompt/pkg/consts/trace.go b/backend/modules/prompt/pkg/consts/trace.go index fbbc62ca0..df982deca 100644 --- a/backend/modules/prompt/pkg/consts/trace.go +++ b/backend/modules/prompt/pkg/consts/trace.go @@ -28,5 +28,6 @@ const ( const ( SpanTagCallTypePromptPlayground = "PromptPlayground" SpanTagCallTypePromptDebug = "PromptDebug" + SpanTagCallTypePTaaS = "PTaaS" SpanTagCallTypeEvaluation = "Evaluation" ) diff --git a/backend/modules/prompt/pkg/errno/prompt.go b/backend/modules/prompt/pkg/errno/prompt.go index 61e069848..d25363583 100644 --- a/backend/modules/prompt/pkg/errno/prompt.go +++ b/backend/modules/prompt/pkg/errno/prompt.go @@ -80,6 +80,10 @@ const ( promptHubQPSLimitMessage = "request is limited, cause prompt hub qps of current space reached the upper limit" promptHubQPSLimitNoAffectStability = true + PTaaSQPSLimitCode = 600502002 + pTaaSQPSLimitMessage = "request is limited, cause PTaaS qps of current space reached the upper limit" + pTaaSQPSLimitNoAffectStability = true + RiskContentDetectedCode = 600505014 // detected risk content in user input or model response riskContentDetectedMessage = "detected risk content in user input or model response" riskContentDetectedNoAffectStability = true @@ -195,6 +199,12 @@ func init() { code.WithAffectStability(!promptHubQPSLimitNoAffectStability), ) + code.Register( + PTaaSQPSLimitCode, + pTaaSQPSLimitMessage, + code.WithAffectStability(!pTaaSQPSLimitNoAffectStability), + ) + code.Register( RiskContentDetectedCode, riskContentDetectedMessage, diff --git a/backend/pkg/goroutine/goroutine.go b/backend/pkg/goroutine/goroutine.go new file mode 100644 index 000000000..eb872670c --- /dev/null +++ b/backend/pkg/goroutine/goroutine.go @@ -0,0 +1,26 @@ +// Copyright (c) 2025 coze-dev Authors +// SPDX-License-Identifier: Apache-2.0 + +package goroutine + +import ( + "context" + "runtime" + + "github.com/bytedance/gopkg/util/logger" +) + +// GoSafe Safely start a goroutine, which will automatically recover from panics and print stack information. +func GoSafe(ctx context.Context, fn func()) { + go func() { + defer func() { + if e := recover(); e != nil { + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + logger.CtxErrorf(ctx, "goroutine panic: %s: %s", e, buf) + } + }() + fn() + }() +} diff --git a/backend/script/errorx/prompt.yaml b/backend/script/errorx/prompt.yaml index 845f0f63e..750d2dff1 100644 --- a/backend/script/errorx/prompt.yaml +++ b/backend/script/errorx/prompt.yaml @@ -33,6 +33,10 @@ error_code: code: 2001 message: request is limited, cause prompt hub qps of current space reached the upper limit no_affect_stability: true + - name: PTaaSQPSLimit + code: 2002 + message: request is limited, cause PTaaS qps of current space reached the upper limit + no_affect_stability: true - name: RiskContentDetected code: 5014 message: detected risk content in user input or model response diff --git a/idl/thrift/coze/loop/llm/domain/common.thrift b/idl/thrift/coze/loop/llm/domain/common.thrift index 0f775510b..b5ef4beac 100644 --- a/idl/thrift/coze/loop/llm/domain/common.thrift +++ b/idl/thrift/coze/loop/llm/domain/common.thrift @@ -3,5 +3,6 @@ namespace go coze.loop.llm.domain.common typedef string Scenario (ts.enum="true") const Scenario scenario_default = "default" const Scenario scenario_prompt_debug = "prompt_debug" +const Scenario scenario_prompt_as_a_service = "prompt_as_a_service" const Scenario scenario_eval_target = "eval_target" const Scenario scenario_evaluator = "evaluator" diff --git a/idl/thrift/coze/loop/prompt/coze.loop.prompt.openapi.thrift b/idl/thrift/coze/loop/prompt/coze.loop.prompt.openapi.thrift index afaa7a98f..e3dd110b7 100644 --- a/idl/thrift/coze/loop/prompt/coze.loop.prompt.openapi.thrift +++ b/idl/thrift/coze/loop/prompt/coze.loop.prompt.openapi.thrift @@ -5,6 +5,8 @@ include "./domain/prompt.thrift" service PromptOpenAPIService { BatchGetPromptByPromptKeyResponse BatchGetPromptByPromptKey(1: BatchGetPromptByPromptKeyRequest req) (api.tag="openapi", api.post='/v1/loop/prompts/mget') + ExecuteResponse Execute(1: ExecuteRequest req) (api.tag="openapi", api.post="/v1/loop/prompts/execute") + ExecuteStreamingResponse ExecuteStreaming(1: ExecuteRequest req) (api.tag="openapi", api.post="/v1/loop/prompts/execute_streaming", streaming.mode='server') } struct BatchGetPromptByPromptKeyRequest { @@ -15,21 +17,62 @@ struct BatchGetPromptByPromptKeyRequest { } struct BatchGetPromptByPromptKeyResponse { - 1: optional i32 code - 2: optional string msg + 1: optional i32 code + 2: optional string msg 3: optional PromptResultData data - 255: optional base.BaseResp BaseResp + 255: optional base.BaseResp BaseResp } struct PromptResultData { 1: optional list items } +struct ExecuteRequest { + 1: optional i64 workspace_id (api.body="workspace_id", api.js_conv='true', go.tag='json:"workspace_id"') // 工作空间ID + 2: optional PromptQuery prompt_identifier (api.body="prompt_identifier") // Prompt 标识 + + 10: optional list variable_vals (api.body="variable_vals") // 变量值 + 11: optional list messages (api.body="messages") // 消息 + + 255: optional base.Base Base +} + +struct ExecuteResponse { + 1: optional i32 code + 2: optional string msg + 3: optional ExecuteData data + + 255: optional base.BaseResp BaseResp +} + +struct ExecuteData { + 1: optional Message message // 消息 + 2: optional string finish_reason // 结束原因 + 3: optional TokenUsage usage // token消耗 +} + +struct ExecuteStreamingResponse { + 1: optional string id + 2: optional string event + 3: optional i64 retry + 4: optional ExecuteStreamingData data + + 255: optional base.BaseResp BaseResp +} + +struct ExecuteStreamingData { + 1: optional i32 code + 2: optional string msg + 3: optional Message message // 消息 + 4: optional string finish_reason // 结束原因 + 5: optional TokenUsage usage // token消耗 +} + struct PromptQuery { - 1: optional string prompt_key - 2: optional string version - 3: optional string label + 1: optional string prompt_key // prompt_key + 2: optional string version // prompt版本 + 3: optional string label // prompt版本标识(如果version不为空,该字段会被忽略) } struct PromptResult { @@ -67,19 +110,25 @@ struct ToolCallConfig { } struct Message { - 1: optional Role role - 2: optional string content - 3: optional list parts + 1: optional Role role // 角色 + 2: optional string content // 消息内容 + 3: optional list parts // 多模态内容 + 4: optional string reasoning_content // 推理思考内容 + 5: optional string tool_call_id // tool调用ID(role为tool时有效) + 6: optional list tool_calls // tool调用(role为assistant时有效) } struct ContentPart { 1: optional ContentType type 2: optional string text + 3: optional string image_url + 4: optional string base64_data } typedef string ContentType (ts.enum="true") - const ContentType ContentType_Text = "text" +const ContentType ContentType_ImageURL = "image_url" +const ContentType ContentType_Base64Data = "base64_data" const ContentType ContentType_MultiPartVariable = "multi_part_variable" struct VariableDef { @@ -88,7 +137,7 @@ struct VariableDef { 3: optional VariableType type // 变量类型 } -typedef string VariableType +typedef string VariableType (ts.enum="true") const VariableType VariableType_String = "string" const VariableType VariableType_Boolean = "boolean" const VariableType VariableType_Integer = "integer" @@ -102,7 +151,7 @@ const VariableType VariableType_Array_Object = "array" const VariableType VariableType_Placeholder = "placeholder" const VariableType VariableType_MultiPart = "multi_part" -typedef string Role +typedef string Role (ts.enum="true") const Role Role_System = "system" const Role Role_User = "user" const Role Role_Assistant = "assistant" @@ -114,7 +163,7 @@ struct Tool { 2: optional Function function } -typedef string ToolType +typedef string ToolType (ts.enum="true") const ToolType ToolType_Function = "function" struct Function { @@ -123,6 +172,18 @@ struct Function { 3: optional string parameters } +struct ToolCall { + 1: optional i32 index + 2: optional string id + 3: optional ToolType type + 4: optional FunctionCall function_call +} + +struct FunctionCall { + 1: optional string name + 2: optional string arguments +} + struct LLMConfig { 1: optional double temperature 2: optional i32 max_tokens @@ -132,3 +193,15 @@ struct LLMConfig { 6: optional double frequency_penalty 7: optional bool json_mode } + +struct VariableVal { + 1: optional string key // 变量key + 2: optional string value // 普通变量值(非string类型,如boolean、integer、float、object等,序列化后传入) + 3: optional list placeholder_messages // placeholder变量值 + 4: optional list multi_part_values // 多模态变量值 +} + +struct TokenUsage { + 1: optional i32 input_tokens // 输入消耗 + 2: optional i32 output_tokens // 输出消耗 +} \ No newline at end of file diff --git a/release/deployment/docker-compose/conf/locales/zh-CN.yaml b/release/deployment/docker-compose/conf/locales/zh-CN.yaml index 09c8c5432..2b9d9f9fe 100644 --- a/release/deployment/docker-compose/conf/locales/zh-CN.yaml +++ b/release/deployment/docker-compose/conf/locales/zh-CN.yaml @@ -15,6 +15,7 @@ "600501003": "Prompt未提交" "600501007": "Label未关联当前Prompt任何提交版本" "600502001": "请求被限制,原因是当前空间的prompt hub QPS达到上限" +"600502002": "请求被限制,原因是当前Prompt的PTaaS QPS达到上限" "600505014": "在用户输入或模型响应中检测到风险内容" "600501004": "模板解析错误" "600501005": "模板渲染错误" diff --git a/release/deployment/docker-compose/conf/prompt.yaml b/release/deployment/docker-compose/conf/prompt.yaml index 3e6e141a2..ca39bf872 100644 --- a/release/deployment/docker-compose/conf/prompt.yaml +++ b/release/deployment/docker-compose/conf/prompt.yaml @@ -3,6 +3,18 @@ prompt_hub_rate_limit_config: space_max_qps: 123456: 1000 +# PTaaS限流配置 +ptaas_rate_limit_config: + default_max_qps: 100 # 默认最大QPS,当没有为特定space_id和prompt_key配置时使用 + prompt_key_max_qps: + # 按space_id -> prompt_key -> qps的三层map配置 + # 示例配置(取消注释并修改以启用): + # "12345": # space_id + # "my_special_prompt": 200 # prompt_key及其对应的最大QPS + # "high_priority_prompt": 500 + # "67890": # 另一个space_id + # "batch_prompt": 300 + # 预置标签配置 preset_labels: - production diff --git a/release/deployment/helm-chart/umbrella/conf/locales/zh-CN.yaml b/release/deployment/helm-chart/umbrella/conf/locales/zh-CN.yaml index 09c8c5432..2b9d9f9fe 100644 --- a/release/deployment/helm-chart/umbrella/conf/locales/zh-CN.yaml +++ b/release/deployment/helm-chart/umbrella/conf/locales/zh-CN.yaml @@ -15,6 +15,7 @@ "600501003": "Prompt未提交" "600501007": "Label未关联当前Prompt任何提交版本" "600502001": "请求被限制,原因是当前空间的prompt hub QPS达到上限" +"600502002": "请求被限制,原因是当前Prompt的PTaaS QPS达到上限" "600505014": "在用户输入或模型响应中检测到风险内容" "600501004": "模板解析错误" "600501005": "模板渲染错误" diff --git a/release/deployment/helm-chart/umbrella/conf/prompt.yaml b/release/deployment/helm-chart/umbrella/conf/prompt.yaml index 6f3c9f7f7..d1240b12a 100644 --- a/release/deployment/helm-chart/umbrella/conf/prompt.yaml +++ b/release/deployment/helm-chart/umbrella/conf/prompt.yaml @@ -3,6 +3,18 @@ prompt_hub_rate_limit_config: space_max_qps: 123456: 1000 +# PTaaS限流配置 +ptaas_rate_limit_config: + default_max_qps: 100 # 默认最大QPS,当没有为特定space_id和prompt_key配置时使用 + prompt_key_max_qps: + # 按space_id -> prompt_key -> qps的三层map配置 + # 示例配置(取消注释并修改以启用): + # "12345": # space_id + # "my_special_prompt": 200 # prompt_key及其对应的最大QPS + # "high_priority_prompt": 500 + # "67890": # 另一个space_id + # "batch_prompt": 300 + # 预置标签配置 preset_labels: - production diff --git a/release/image/Dockerfile b/release/image/Dockerfile index 86f44e8e4..88a56b7cd 100644 --- a/release/image/Dockerfile +++ b/release/image/Dockerfile @@ -1,6 +1,8 @@ # Minimal Golang image to build and obtain backend binary FROM golang:1.24-alpine AS backend_builder +ENV GOPROXY=https://goproxy.cn,direct + # 1. Install git (for downloading go mod dependencies) RUN apk add --no-cache git diff --git a/release/image/debug.Dockerfile b/release/image/debug.Dockerfile index 49e2a375e..d35e6a09d 100644 --- a/release/image/debug.Dockerfile +++ b/release/image/debug.Dockerfile @@ -1,6 +1,8 @@ # Minimal Golang image to build and obtain backend binary FROM golang:1.24-alpine AS backend_builder +ENV GOPROXY=https://goproxy.cn,direct + # 1. Install git (for downloading go mod dependencies) RUN apk add --no-cache git