@@ -14,6 +14,7 @@ import (
1414
1515 domaincommon "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/evaluation/domain/common"
1616 domain_expt "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/evaluation/domain/expt"
17+ openapiCommon "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/evaluation/domain_openapi/common"
1718 exptpb "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/evaluation/expt"
1819 "github.com/coze-dev/coze-loop/backend/kitex_gen/coze/loop/evaluation/openapi"
1920 "github.com/coze-dev/coze-loop/backend/modules/evaluation/application/convertor/common"
@@ -893,6 +894,81 @@ func (e *EvalOpenAPIApplication) ReportEvalTargetInvokeResult_(ctx context.Conte
893894 return & openapi.ReportEvalTargetInvokeResultResponse {BaseResp : base .NewBaseResp ()}, nil
894895}
895896
897+ func (e * EvalOpenAPIApplication ) GetEvalTargetOutputFieldContentOApi (ctx context.Context , req * openapi.GetEvalTargetOutputFieldContentOApiRequest ) (r * openapi.GetEvalTargetOutputFieldContentOApiResponse , err error ) {
898+ startTime := time .Now ().UnixNano () / int64 (time .Millisecond )
899+ defer func () {
900+ e .metric .EmitOpenAPIMetric (ctx , req .GetWorkspaceID (), 0 , kitexutil .GetTOMethod (ctx ), startTime , err )
901+ }()
902+ if req == nil {
903+ return nil , errorx .NewByCode (errno .CommonInvalidParamCode , errorx .WithExtraMsg ("req is nil" ))
904+ }
905+ if req .GetWorkspaceID () == 0 {
906+ return nil , errorx .NewByCode (errno .CommonInvalidParamCode , errorx .WithExtraMsg ("workspace_id is required" ))
907+ }
908+ if req .GetExperimentID () == 0 {
909+ return nil , errorx .NewByCode (errno .CommonInvalidParamCode , errorx .WithExtraMsg ("experiment_id is required" ))
910+ }
911+ if req .GetItemID () == 0 {
912+ return nil , errorx .NewByCode (errno .CommonInvalidParamCode , errorx .WithExtraMsg ("item_id is required" ))
913+ }
914+ if len (req .GetFieldKeys ()) == 0 {
915+ return nil , errorx .NewByCode (errno .CommonInvalidParamCode , errorx .WithExtraMsg ("field_keys is required" ))
916+ }
917+
918+ err = e .auth .Authorization (ctx , & rpc.AuthorizationParam {
919+ ObjectID : strconv .FormatInt (req .GetExperimentID (), 10 ),
920+ SpaceID : req .GetWorkspaceID (),
921+ ActionObjects : []* rpc.ActionObject {{Action : gptr .Of (consts .Read ), EntityType : gptr .Of (rpc .AuthEntityType_EvaluationExperiment )}},
922+ })
923+ if err != nil {
924+ return nil , err
925+ }
926+
927+ turnResults , err := e .resultSvc .GetExptItemTurnResults (ctx , req .GetExperimentID (), req .GetItemID (), req .GetWorkspaceID (), nil )
928+ if err != nil {
929+ return nil , err
930+ }
931+ if len (turnResults ) == 0 {
932+ return nil , errorx .NewByCode (errno .ResourceNotFoundCode , errorx .WithExtraMsg ("no turn result found for the given experiment_id and item_id" ))
933+ }
934+
935+ targetRecordID := turnResults [0 ].TargetResultID
936+ if targetRecordID == 0 {
937+ return nil , errorx .NewByCode (errno .ResourceNotFoundCode , errorx .WithExtraMsg ("eval target record not found for the given experiment result" ))
938+ }
939+
940+ record , err := e .targetSvc .GetRecordByID (ctx , req .GetWorkspaceID (), targetRecordID )
941+ if err != nil {
942+ return nil , err
943+ }
944+ if record == nil {
945+ return nil , errorx .NewByCode (errno .ResourceNotFoundCode , errorx .WithExtraMsg ("eval target record not found" ))
946+ }
947+
948+ if err := e .targetSvc .LoadRecordOutputFields (ctx , record , req .GetFieldKeys ()); err != nil {
949+ return nil , err
950+ }
951+
952+ fieldContents := make (map [string ]* openapiCommon.Content )
953+ if record .EvalTargetOutputData != nil && record .EvalTargetOutputData .OutputFields != nil {
954+ keySet := make (map [string ]struct {}, len (req .GetFieldKeys ()))
955+ for _ , k := range req .GetFieldKeys () {
956+ keySet [k ] = struct {}{}
957+ }
958+ for k , c := range record .EvalTargetOutputData .OutputFields {
959+ if _ , ok := keySet [k ]; ok {
960+ fieldContents [k ] = common .OpenAPIContentDO2DTO (c )
961+ }
962+ }
963+ }
964+
965+ return & openapi.GetEvalTargetOutputFieldContentOApiResponse {
966+ Data : & openapi.GetEvalTargetOutputFieldContentOpenAPIData {
967+ FieldContents : fieldContents ,
968+ },
969+ }, nil
970+ }
971+
896972func (e * EvalOpenAPIApplication ) SubmitExperimentOApi (ctx context.Context , req * openapi.SubmitExperimentOApiRequest ) (r * openapi.SubmitExperimentOApiResponse , err error ) {
897973 startTime := time .Now ().UnixNano () / int64 (time .Millisecond )
898974 defer func () {
0 commit comments