Skip to content

Commit cea6748

Browse files
authored
[fix][evaluation] fix the evaluator ecosystem (#319)
* fix PE优化 * add ut
1 parent ff51019 commit cea6748

File tree

8 files changed

+266
-49
lines changed

8 files changed

+266
-49
lines changed

backend/kitex_gen/coze/loop/evaluation/domain/evaluator/evaluator.go

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

backend/kitex_gen/coze/loop/evaluation/domain/evaluator/k-evaluator.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/modules/evaluation/application/convertor/evaluator/evaluator_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
200200
e, err = ConvertEvaluatorContent2DO(&evaluatordto.EvaluatorContent{
201201
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
202202
ProviderEvaluatorCode: gptr.Of("CN:480"),
203-
AccessProtocol: evaluatordto.AccessProtocolRPC,
203+
AccessProtocol: evaluatordto.EvaluatorAccessProtocolRPC,
204204
ServiceName: gptr.Of("test-service"),
205205
Cluster: gptr.Of("test-cluster"),
206206
Timeout: gptr.Of(int64(5000)),
@@ -209,7 +209,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
209209
assert.NoError(t, err)
210210
if assert.NotNil(t, e) && assert.NotNil(t, e.CustomRPCEvaluatorVersion) {
211211
assert.Equal(t, "CN:480", gptr.Indirect(e.CustomRPCEvaluatorVersion.ProviderEvaluatorCode))
212-
assert.Equal(t, evaluatordto.AccessProtocolRPC, e.CustomRPCEvaluatorVersion.AccessProtocol)
212+
assert.Equal(t, evaluatordto.EvaluatorAccessProtocolRPC, e.CustomRPCEvaluatorVersion.AccessProtocol)
213213
assert.Equal(t, "test-service", gptr.Indirect(e.CustomRPCEvaluatorVersion.ServiceName))
214214
assert.Equal(t, "test-cluster", gptr.Indirect(e.CustomRPCEvaluatorVersion.Cluster))
215215
assert.Equal(t, int64(5000), gptr.Indirect(e.CustomRPCEvaluatorVersion.Timeout))
@@ -219,7 +219,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
219219
e, err = ConvertEvaluatorContent2DO(&evaluatordto.EvaluatorContent{
220220
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
221221
ProviderEvaluatorCode: gptr.Of("CN:480"),
222-
AccessProtocol: evaluatordto.AccessProtocolRPC,
222+
AccessProtocol: evaluatordto.EvaluatorAccessProtocolRPC,
223223
ServiceName: gptr.Of("test-service"),
224224
},
225225
InputSchemas: []*commondto.ArgsSchema{
@@ -241,7 +241,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
241241
e, err = ConvertEvaluatorContent2DO(&evaluatordto.EvaluatorContent{
242242
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
243243
ProviderEvaluatorCode: gptr.Of("CN:480"),
244-
AccessProtocol: evaluatordto.AccessProtocolRPC,
244+
AccessProtocol: evaluatordto.EvaluatorAccessProtocolRPC,
245245
ServiceName: gptr.Of("test-service"),
246246
},
247247
OutputSchemas: []*commondto.ArgsSchema{
@@ -259,7 +259,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
259259
e, err = ConvertEvaluatorContent2DO(&evaluatordto.EvaluatorContent{
260260
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
261261
ProviderEvaluatorCode: gptr.Of("CN:480"),
262-
AccessProtocol: evaluatordto.AccessProtocolRPC,
262+
AccessProtocol: evaluatordto.EvaluatorAccessProtocolRPC,
263263
ServiceName: gptr.Of("test-service"),
264264
Cluster: gptr.Of("prod-cluster"),
265265
Timeout: gptr.Of(int64(10000)),
@@ -275,7 +275,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
275275
assert.NoError(t, err)
276276
if assert.NotNil(t, e) && assert.NotNil(t, e.CustomRPCEvaluatorVersion) {
277277
assert.Equal(t, "CN:480", gptr.Indirect(e.CustomRPCEvaluatorVersion.ProviderEvaluatorCode))
278-
assert.Equal(t, evaluatordto.AccessProtocolRPC, e.CustomRPCEvaluatorVersion.AccessProtocol)
278+
assert.Equal(t, evaluatordto.EvaluatorAccessProtocolRPC, e.CustomRPCEvaluatorVersion.AccessProtocol)
279279
assert.Equal(t, "test-service", gptr.Indirect(e.CustomRPCEvaluatorVersion.ServiceName))
280280
assert.Equal(t, "prod-cluster", gptr.Indirect(e.CustomRPCEvaluatorVersion.Cluster))
281281
assert.Equal(t, int64(10000), gptr.Indirect(e.CustomRPCEvaluatorVersion.Timeout))
@@ -292,7 +292,7 @@ func TestConvertEvaluatorContent2DO(t *testing.T) {
292292
e, err = ConvertEvaluatorContent2DO(&evaluatordto.EvaluatorContent{
293293
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
294294
ProviderEvaluatorCode: gptr.Of("CN:480"),
295-
AccessProtocol: evaluatordto.AccessProtocolRPC,
295+
AccessProtocol: evaluatordto.EvaluatorAccessProtocolRPC,
296296
},
297297
InputSchemas: []*commondto.ArgsSchema{},
298298
OutputSchemas: []*commondto.ArgsSchema{},
@@ -498,7 +498,7 @@ func TestConvertEvaluatorDTO2DO_WithCurrentVersion(t *testing.T) {
498498
ReceiveChatHistory: gptr.Of(true),
499499
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
500500
ProviderEvaluatorCode: gptr.Of("mock provider evaluator code"),
501-
AccessProtocol: evaluatordto.AccessProtocolRPC,
501+
AccessProtocol: evaluatordto.EvaluatorAccessProtocolRPC,
502502
ServiceName: gptr.Of("mock service name"),
503503
Cluster: gptr.Of("mock cluster"),
504504
Timeout: gptr.Of(int64(time.Second)),
@@ -1231,7 +1231,7 @@ func TestConvertCustomRPCEvaluatorVersionDTO2DO(t *testing.T) {
12311231
EvaluatorContent: &evaluatordto.EvaluatorContent{
12321232
CustomRPCEvaluator: &evaluatordto.CustomRPCEvaluator{
12331233
ProviderEvaluatorCode: gptr.Of("PROVIDER_001"),
1234-
AccessProtocol: evaluatordto.AccessProtocol("HTTP"),
1234+
AccessProtocol: evaluatordto.EvaluatorAccessProtocol("rpc"),
12351235
ServiceName: gptr.Of("test_service"),
12361236
Cluster: gptr.Of("test_cluster"),
12371237
Timeout: gptr.Of(int64(5000)),
@@ -1263,7 +1263,7 @@ func TestConvertCustomRPCEvaluatorVersionDTO2DO(t *testing.T) {
12631263
assert.Equal(t, evaluatordo.EvaluatorTypeCustomRPC, result.EvaluatorType)
12641264
assert.NotNil(t, result.ProviderEvaluatorCode)
12651265
assert.Equal(t, "PROVIDER_001", *result.ProviderEvaluatorCode)
1266-
assert.Equal(t, evaluatordo.AccessProtocol("HTTP"), result.AccessProtocol)
1266+
assert.Equal(t, evaluatordo.EvaluatorAccessProtocol("rpc"), result.AccessProtocol)
12671267
assert.NotNil(t, result.ServiceName)
12681268
assert.Equal(t, "test_service", *result.ServiceName)
12691269
assert.NotNil(t, result.Cluster)
@@ -1339,7 +1339,7 @@ func TestConvertCustomRPCEvaluatorVersionDO2DTO(t *testing.T) {
13391339
Description: "Test CustomRPC version",
13401340
EvaluatorType: evaluatordo.EvaluatorTypeCustomRPC,
13411341
ProviderEvaluatorCode: gptr.Of("PROVIDER_001"),
1342-
AccessProtocol: evaluatordo.AccessProtocol("HTTP"),
1342+
AccessProtocol: evaluatordo.EvaluatorAccessProtocol("rpc"),
13431343
ServiceName: gptr.Of("test_service"),
13441344
Cluster: gptr.Of("test_cluster"),
13451345
Timeout: gptr.Of(int64(5000)),
@@ -1366,7 +1366,7 @@ func TestConvertCustomRPCEvaluatorVersionDO2DTO(t *testing.T) {
13661366
assert.NotNil(t, result.EvaluatorContent)
13671367
assert.NotNil(t, result.EvaluatorContent.CustomRPCEvaluator)
13681368
assert.Equal(t, "PROVIDER_001", *result.EvaluatorContent.CustomRPCEvaluator.ProviderEvaluatorCode)
1369-
assert.Equal(t, evaluatordto.AccessProtocol("HTTP"), result.EvaluatorContent.CustomRPCEvaluator.AccessProtocol)
1369+
assert.Equal(t, evaluatordto.EvaluatorAccessProtocol("rpc"), result.EvaluatorContent.CustomRPCEvaluator.AccessProtocol)
13701370
assert.Equal(t, "test_service", *result.EvaluatorContent.CustomRPCEvaluator.ServiceName)
13711371
assert.Equal(t, "test_cluster", *result.EvaluatorContent.CustomRPCEvaluator.Cluster)
13721372
assert.Equal(t, int64(5000), *result.EvaluatorContent.CustomRPCEvaluator.Timeout)

backend/modules/evaluation/application/evaluator_app.go

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -665,21 +665,42 @@ func (e *EvaluatorHandlerImpl) GetEvaluatorVersion(ctx context.Context, request
665665
}
666666

667667
func (e *EvaluatorHandlerImpl) BatchGetEvaluatorVersions(ctx context.Context, request *evaluatorservice.BatchGetEvaluatorVersionsRequest) (resp *evaluatorservice.BatchGetEvaluatorVersionsResponse, err error) {
668-
evaluatorDOList, err := e.evaluatorService.BatchGetEvaluatorVersion(ctx, ptr.Of(request.WorkspaceID), request.GetEvaluatorVersionIds(), request.GetIncludeDeleted())
668+
// 查询时不传 space_id,允许查询所有空间的 evaluator
669+
evaluatorDOList, err := e.evaluatorService.BatchGetEvaluatorVersion(ctx, nil, request.GetEvaluatorVersionIds(), request.GetIncludeDeleted())
669670
if err != nil {
670671
return nil, err
671672
}
672673
if len(evaluatorDOList) == 0 {
673674
return &evaluatorservice.BatchGetEvaluatorVersionsResponse{}, nil
674675
}
675-
// 鉴权
676-
err = e.auth.Authorization(ctx, &rpc.AuthorizationParam{
677-
ObjectID: strconv.FormatInt(evaluatorDOList[0].SpaceID, 10),
678-
SpaceID: evaluatorDOList[0].SpaceID,
679-
ActionObjects: []*rpc.ActionObject{{Action: gptr.Of("listLoopEvaluator"), EntityType: gptr.Of(rpc.AuthEntityType_Space)}},
680-
})
681-
if err != nil {
682-
return nil, err
676+
// 按 SpaceID 分组进行权限校验
677+
requestWorkspaceID := request.WorkspaceID
678+
checkedSpaceIDs := make(map[int64]bool)
679+
for _, evaluatorDO := range evaluatorDOList {
680+
spaceID := evaluatorDO.SpaceID
681+
// 如果已经校验过该空间,跳过
682+
if checkedSpaceIDs[spaceID] {
683+
continue
684+
}
685+
checkedSpaceIDs[spaceID] = true
686+
687+
// 如果是请求的空间下的,使用原来的权限校验逻辑
688+
if spaceID == requestWorkspaceID {
689+
err = e.auth.Authorization(ctx, &rpc.AuthorizationParam{
690+
ObjectID: strconv.FormatInt(spaceID, 10),
691+
SpaceID: spaceID,
692+
ActionObjects: []*rpc.ActionObject{{Action: gptr.Of("listLoopEvaluator"), EntityType: gptr.Of(rpc.AuthEntityType_Space)}},
693+
})
694+
if err != nil {
695+
return nil, err
696+
}
697+
} else {
698+
// 如果不是,使用预置空间校验的 authBuiltinManagement 函数进行校验
699+
err = e.authBuiltinManagement(ctx, spaceID, spaceTypeBuiltin, false)
700+
if err != nil {
701+
return nil, err
702+
}
703+
}
683704
}
684705
dtoList := make([]*evaluatordto.Evaluator, 0, len(evaluatorDOList))
685706
for _, evaluatorDO := range evaluatorDOList {

0 commit comments

Comments
 (0)