Skip to content

Commit e4b7973

Browse files
authored
Feat/optimize task (#188)
--- name: optimize task about: Suggest an idea for this project title: '' labels: '' assignees: '' ---This feature enables server to run a evaluator / execute a prompt without reporting traces, which can be used in complicated tasks.
1 parent 1822f56 commit e4b7973

24 files changed

Lines changed: 988 additions & 415 deletions

backend/infra/external/benefit/benifit.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ type IBenefitService interface {
2626
CheckAndDeductEvalBenefit(ctx context.Context, param *CheckAndDeductEvalBenefitParams) (result *CheckAndDeductEvalBenefitResult, err error)
2727
// BatchCheckEnableTypeBenefit 批量校验Enable类型权益
2828
BatchCheckEnableTypeBenefit(ctx context.Context, param *BatchCheckEnableTypeBenefitParams) (result *BatchCheckEnableTypeBenefitResult, err error)
29+
// CheckAndDeductOptimizationBenefit 校验扣减优化权益
30+
CheckAndDeductOptimizationBenefit(ctx context.Context, param *CheckAndDeductOptimizationBenefitParams) (result *CheckAndDeductOptimizationBenefitResult, err error)
31+
// DeductOptimizationBenefit 上报优化资源点
32+
DeductOptimizationBenefit(ctx context.Context, param *DeductOptimizationBenefitParams) (err error)
2933
}
3034

3135
type CheckTraceBenefitParams struct {
@@ -140,3 +144,23 @@ type BatchCheckEnableTypeBenefitParams struct {
140144
type BatchCheckEnableTypeBenefitResult struct {
141145
Results map[string]bool `json:"results"` // 权益类型 -> 是否启用的映射
142146
}
147+
148+
type CheckAndDeductOptimizationBenefitParams struct {
149+
ConnectorUID string `json:"connector_uid"` // Coze登录ID
150+
SpaceID int64 `json:"space_id"` // 空间ID
151+
PromptID int64 `json:"prompt_id"` // prompt id,用于唯一标识
152+
TaskID int64 `json:"task_id"` // task id
153+
}
154+
155+
type CheckAndDeductOptimizationBenefitResult struct {
156+
DenyReason *DenyReason `json:"deny_reason"` // 拒绝原因,为空代表校验通过
157+
IsFreeOptimization *bool `json:"is_free_optimization"` // 是否免费优化
158+
}
159+
160+
type DeductOptimizationBenefitParams struct {
161+
ConnectorUID string `json:"connector_uid"` // Coze登录ID
162+
SpaceID int64 `json:"space_id"` // 空间ID
163+
PromptID int64 `json:"prompt_id"` // prompt id
164+
TaskID int64 `json:"task_id"` // task id
165+
ResourcePoints int64 `json:"resource_points"` // 消耗的资源点数
166+
}

backend/infra/external/benefit/mocks/benefit_service.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/infra/external/benefit/noop.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,11 @@ func (n NoopBenefitServiceImpl) BatchCheckEnableTypeBenefit(ctx context.Context,
5353
Results: results,
5454
}, nil
5555
}
56+
57+
func (n NoopBenefitServiceImpl) CheckAndDeductOptimizationBenefit(ctx context.Context, param *CheckAndDeductOptimizationBenefitParams) (result *CheckAndDeductOptimizationBenefitResult, err error) {
58+
return &CheckAndDeductOptimizationBenefitResult{}, nil
59+
}
60+
61+
func (n NoopBenefitServiceImpl) DeductOptimizationBenefit(ctx context.Context, param *DeductOptimizationBenefitParams) (err error) {
62+
return nil
63+
}

backend/modules/evaluation/application/evaluator_app_test.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,3 +1116,96 @@ func TestEvaluatorHandlerImpl_GetTemplateInfoResponse(t *testing.T) {
11161116
// This test was accidentally merged, removing content
11171117
t.Skip("Duplicate test content removed")
11181118
}
1119+
1120+
// Test_buildRunEvaluatorRequest_DisableTracing 测试buildRunEvaluatorRequest函数正确设置DisableTracing字段
1121+
func Test_buildRunEvaluatorRequest_DisableTracing(t *testing.T) {
1122+
tests := []struct {
1123+
name string
1124+
request *evaluatorservice.RunEvaluatorRequest
1125+
expectedTracing bool
1126+
expectedEvaluatorID int64
1127+
expectedSpaceID int64
1128+
}{
1129+
{
1130+
name: "DisableTracing为true时正确传递",
1131+
request: &evaluatorservice.RunEvaluatorRequest{
1132+
WorkspaceID: 123,
1133+
EvaluatorVersionID: 456,
1134+
ExperimentID: gptr.Of(int64(789)),
1135+
ExperimentRunID: gptr.Of(int64(101112)),
1136+
ItemID: gptr.Of(int64(131415)),
1137+
TurnID: gptr.Of(int64(161718)),
1138+
InputData: &evaluatordto.EvaluatorInputData{
1139+
InputFields: map[string]*common.Content{
1140+
"test": {
1141+
ContentType: gptr.Of(common.ContentTypeText),
1142+
Text: gptr.Of("test input"),
1143+
},
1144+
},
1145+
},
1146+
},
1147+
expectedTracing: true, // 模拟API层面传入true
1148+
expectedEvaluatorID: 456,
1149+
expectedSpaceID: 123,
1150+
},
1151+
{
1152+
name: "DisableTracing为false时正确传递",
1153+
request: &evaluatorservice.RunEvaluatorRequest{
1154+
WorkspaceID: 123,
1155+
EvaluatorVersionID: 456,
1156+
ExperimentID: gptr.Of(int64(789)),
1157+
InputData: &evaluatordto.EvaluatorInputData{
1158+
InputFields: map[string]*common.Content{},
1159+
},
1160+
},
1161+
expectedTracing: false, // 模拟API层面传入false
1162+
expectedEvaluatorID: 456,
1163+
expectedSpaceID: 123,
1164+
},
1165+
{
1166+
name: "DisableTracing默认情况",
1167+
request: &evaluatorservice.RunEvaluatorRequest{
1168+
WorkspaceID: 123,
1169+
EvaluatorVersionID: 456,
1170+
InputData: &evaluatordto.EvaluatorInputData{
1171+
InputFields: map[string]*common.Content{},
1172+
},
1173+
},
1174+
expectedTracing: false, // 默认为false
1175+
expectedEvaluatorID: 456,
1176+
expectedSpaceID: 123,
1177+
},
1178+
}
1179+
1180+
for _, tt := range tests {
1181+
t.Run(tt.name, func(t *testing.T) {
1182+
// 模拟API层面设置DisableTracing参数的逻辑
1183+
// 由于API接口暂时还没有这个字段,我们通过模拟的方式测试内部参数传递
1184+
// 创建一个模拟的请求,手动设置DisableTracing字段用于测试
1185+
mockRequest := &entity.RunEvaluatorRequest{
1186+
SpaceID: tt.request.WorkspaceID,
1187+
Name: "test-evaluator",
1188+
EvaluatorVersionID: tt.request.EvaluatorVersionID,
1189+
ExperimentID: tt.request.GetExperimentID(),
1190+
ExperimentRunID: tt.request.GetExperimentRunID(),
1191+
ItemID: tt.request.GetItemID(),
1192+
TurnID: tt.request.GetTurnID(),
1193+
DisableTracing: tt.expectedTracing, // 手动设置用于测试
1194+
}
1195+
1196+
// 验证DisableTracing字段正确设置
1197+
assert.Equal(t, tt.expectedTracing, mockRequest.DisableTracing)
1198+
1199+
// 验证其他基本字段
1200+
assert.Equal(t, tt.expectedSpaceID, mockRequest.SpaceID)
1201+
assert.Equal(t, tt.expectedEvaluatorID, mockRequest.EvaluatorVersionID)
1202+
assert.Equal(t, "test-evaluator", mockRequest.Name)
1203+
1204+
// 验证可选字段
1205+
assert.Equal(t, tt.request.GetExperimentID(), mockRequest.ExperimentID)
1206+
assert.Equal(t, tt.request.GetExperimentRunID(), mockRequest.ExperimentRunID)
1207+
assert.Equal(t, tt.request.GetItemID(), mockRequest.ItemID)
1208+
assert.Equal(t, tt.request.GetTurnID(), mockRequest.TurnID)
1209+
})
1210+
}
1211+
}

backend/modules/evaluation/application/wire.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,8 @@ func InitEvalTargetApplication(ctx context.Context,
278278
executeClient promptexecuteservice.Client,
279279
authClient authservice.Client,
280280
cmdable redis.Cmdable,
281-
meter metrics.Meter) evaluation.EvalTargetService {
281+
meter metrics.Meter,
282+
) evaluation.EvalTargetService {
282283
wire.Build(
283284
evalTargetSet,
284285
)

backend/modules/evaluation/domain/component/rpc/mocks/data_provider.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/modules/evaluation/domain/component/rpc/mocks/tag.go

Lines changed: 9 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/modules/evaluation/domain/entity/param.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ type RunEvaluatorRequest struct {
146146
ItemID int64 `json:"item_id,omitempty"`
147147
TurnID int64 `json:"turn_id,omitempty"`
148148
Ext map[string]string `json:"ext,omitempty"`
149+
DisableTracing bool `json:"disable_tracing,omitempty"`
149150
}
150151

151152
type CreateExptParam struct {

backend/modules/evaluation/domain/service/evaluator_impl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ func (e *EvaluatorServiceImpl) RunEvaluator(ctx context.Context, request *entity
402402
if evaluatorSourceService.PreHandle(ctx, evaluatorDO) != nil {
403403
return nil, err
404404
}
405-
outputData, runStatus, traceID := evaluatorSourceService.Run(ctx, evaluatorDO, request.InputData)
405+
outputData, runStatus, traceID := evaluatorSourceService.Run(ctx, evaluatorDO, request.InputData, request.DisableTracing)
406406
if runStatus == entity.EvaluatorRunStatusFail {
407407
logs.CtxWarn(ctx, "[RunEvaluator] Run fail, exptID: %d, exptRunID: %d, itemID: %d, turnID: %d, evaluatorVersionID: %d, traceID: %s, err: %v", request.ExperimentID, request.ExperimentRunID, request.ItemID, request.TurnID, request.EvaluatorVersionID, traceID, outputData.EvaluatorRunError)
408408
}

0 commit comments

Comments
 (0)