Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .mockery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,10 @@ packages:
config:
interfaces:
Deployer:
config:
replace-type:
- opencsg.com/csghub-server/common/types.ClawEvaluationReq=commontypes:opencsg.com/csghub-server/common/types.ClawEvaluationReq
- opencsg.com/csghub-server/common/types.ArgoWorkFlowRes=commontypes:opencsg.com/csghub-server/common/types.ArgoWorkFlowRes
opencsg.com/csghub-server/builder/deploy/cluster:
config:
interfaces:
Expand Down
12 changes: 8 additions & 4 deletions builder/deploy/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -933,12 +933,16 @@ func (d *deployer) SubmitClawEvaluation(ctx context.Context, req types.ClawEvalu
} else {
env["CLAW_EVAL_TASKS"] = types.ClawEvalTasksNormal
}
if req.Trials > 0 {
env["CLAW_EVAL_TRIALS"] = strconv.Itoa(req.Trials)
trials := req.Trials
if trials <= 0 {
trials = types.ClawEvalDefaultTrials
}
if req.Parallel > 0 {
env["CLAW_EVAL_PARALLEL"] = strconv.Itoa(req.Parallel)
env["CLAW_EVAL_TRIALS"] = strconv.Itoa(trials)
parallel := req.Parallel
if parallel <= 0 {
parallel = types.ClawEvalDefaultParallel
}
env["CLAW_EVAL_PARALLEL"] = strconv.Itoa(parallel)
if req.JudgeModel != "" {
env["CLAW_EVAL_JUDGE_MODEL"] = req.JudgeModel
} else if !req.NoJudge {
Expand Down
25 changes: 16 additions & 9 deletions builder/deploy/deployer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"errors"
"net/http"
"net/http/httptest"
"strconv"
"strings"
"testing"
"time"
Expand Down Expand Up @@ -861,20 +862,24 @@ func TestDeployer_SubmitClawEvaluation(t *testing.T) {
require.Equal(t, "http://aigateway.test/v1", env["CLAW_EVAL_JUDGE_BASE_URL"])
require.Equal(t, "gk-judge-key", env["CLAW_EVAL_JUDGE_API_KEY"])
require.Equal(t, "1-9", env["CLAW_EVAL_TASKS"])
require.Equal(t, "2", env["CLAW_EVAL_TRIALS"])
require.Equal(t, "3", env["CLAW_EVAL_PARALLEL"])
require.Equal(t, types.ClawEvalDefaultJudgeModel, env["CLAW_EVAL_JUDGE_MODEL"])
return &types.ArgoWorkFlowRes{ID: 2}, nil
},
)
resp, err := tester.SubmitClawEvaluation(ctx, types.ClawEvaluationReq{
ClusterID: "cluster-1",
Model: "glm-5.1",
BaseURL: "http://localhost:11435/v1",
ApiKey: "sk-test",
Tasks: "1-9",
JudgeBaseURL: "http://aigateway.test/v1",
JudgeApiKey: "gk-judge-key",
TaskType: types.TaskTypeClawEval,
Image: "opencsghq/claw-eval:1.0.0",
ClusterID: "cluster-1",
Model: "glm-5.1",
BaseURL: "http://localhost:11435/v1",
ApiKey: "sk-test",
Tasks: "1-9",
Trials: 2,
Parallel: 3,
JudgeBaseURL: "http://aigateway.test/v1",
JudgeApiKey: "gk-judge-key",
TaskType: types.TaskTypeClawEval,
Image: "opencsghq/claw-eval:1.0.0",
})
require.NoError(t, err)
require.Equal(t, &types.ArgoWorkFlowRes{ID: 2}, resp)
Expand All @@ -889,6 +894,8 @@ func TestDeployer_SubmitClawEvaluation_DefaultTasksNormal(t *testing.T) {
func(ctx context.Context, awfr *types.ArgoWorkFlowReq) (*types.ArgoWorkFlowRes, error) {
env := awfr.Templates[0].Env
require.Equal(t, types.ClawEvalTasksNormal, env["CLAW_EVAL_TASKS"])
require.Equal(t, strconv.Itoa(types.ClawEvalDefaultTrials), env["CLAW_EVAL_TRIALS"])
require.Equal(t, strconv.Itoa(types.ClawEvalDefaultParallel), env["CLAW_EVAL_PARALLEL"])
return &types.ArgoWorkFlowRes{ID: 3}, nil
},
)
Expand Down
6 changes: 4 additions & 2 deletions common/types/claw_eval_summary.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import (
)

const (
ClawEvalTasksNormal = "normal"
ClawEvalDefaultJudgeModel = "qwen3.7-max"
ClawEvalTasksNormal = "normal"
ClawEvalDefaultJudgeModel = "qwen3.7-max"
ClawEvalDefaultTrials = 3
ClawEvalDefaultParallel = 4
)

// ClawEvalSummary mirrors claw-eval batch_summary.json.
Expand Down
30 changes: 26 additions & 4 deletions component/evaluation.go
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,9 @@ func (c *evaluationComponentImpl) OrgEvaluations(ctx context.Context, req *types

func (c *evaluationComponentImpl) createClawEvaluation(ctx context.Context, req types.EvaluationReq, user database.User, frame *database.RuntimeFramework) (*types.ArgoWorkFlowRes, error) {
operatorUsername := req.Username
if req.Model == "" {
req.Model = req.ModelId
}
if req.TaskName == "" {
return nil, fmt.Errorf("task_name is required")
}
Expand Down Expand Up @@ -477,8 +480,27 @@ func (c *evaluationComponentImpl) createClawEvaluation(ctx context.Context, req
req.TaskType = types.TaskTypeClawEval

clawReq := req.ToClawEvaluationReq()
var defaultAPIKey string
resolveDefaultAPIKey := func() (string, error) {
if defaultAPIKey != "" {
return defaultAPIKey, nil
}
apiKey, err := c.resolveClawEvalAIGatewayAPIKey(ctx, billingUUID, req.OwnerNamespace, operatorUsername)
if err != nil {
return "", err
}
defaultAPIKey = apiKey
return defaultAPIKey, nil
}
if clawReq.ApiKey == "" {
apiKey, err := resolveDefaultAPIKey()
if err != nil {
return nil, err
}
clawReq.ApiKey = apiKey
}
if !req.NoJudge {
judgeAPIKey, err := c.resolveClawEvalJudgeAPIKey(ctx, billingUUID, req.OwnerNamespace, operatorUsername)
judgeAPIKey, err := resolveDefaultAPIKey()
if err != nil {
return nil, err
}
Expand All @@ -488,7 +510,7 @@ func (c *evaluationComponentImpl) createClawEvaluation(ctx context.Context, req
return c.deployer.SubmitClawEvaluation(ctx, clawReq)
}

func (c *evaluationComponentImpl) resolveClawEvalJudgeAPIKey(ctx context.Context, billingUUID, ownerNamespace, operatorUsername string) (string, error) {
func (c *evaluationComponentImpl) resolveClawEvalAIGatewayAPIKey(ctx context.Context, billingUUID, ownerNamespace, operatorUsername string) (string, error) {
token, err := c.tokenStore.FindBuiltinByNsUUID(ctx, billingUUID, string(types.AccessTokenAppAIGateway))
if err == nil && token != nil && token.Token != "" {
return token.Token, nil
Expand All @@ -505,10 +527,10 @@ func (c *evaluationComponentImpl) resolveClawEvalJudgeAPIKey(ctx context.Context
"claw-eval",
)
if err != nil {
return "", fmt.Errorf("failed to resolve judge api key, %w", err)
return "", fmt.Errorf("failed to resolve claw-eval api key, %w", err)
}
if apiKey == "" {
return "", fmt.Errorf("failed to resolve judge api key")
return "", fmt.Errorf("failed to resolve claw-eval api key")
}
return apiKey, nil
}
Expand Down
11 changes: 6 additions & 5 deletions component/evaluation_claw_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
mockdeploy "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/builder/deploy"
mockComps "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/component"
mockdb "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/builder/store/database"
mockrpc "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/builder/rpc"
mockdb "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/builder/store/database"
mockComps "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/component"
"opencsg.com/csghub-server/builder/deploy"
"opencsg.com/csghub-server/builder/git/membership"
"opencsg.com/csghub-server/builder/loki"
Expand Down Expand Up @@ -113,7 +113,7 @@ func TestEvaluationComponent_CreateClawEvaluation_AutoBuiltinJudgeAPIKey(t *test
TaskName: "claw-job",
RuntimeFrameworkId: 1,
ResourceId: 2,
Model: "glm-5.1",
ModelId: "glm-5.1",
BaseURL: "http://localhost:11435/v1",
Tasks: "T001",
}
Expand Down Expand Up @@ -142,7 +142,8 @@ func TestEvaluationComponent_CreateClawEvaluation_AutoBuiltinJudgeAPIKey(t *test
Token: "gk-builtin-key",
}, nil)
mockDeployer.EXPECT().SubmitClawEvaluation(ctx, mock.MatchedBy(func(r types.ClawEvaluationReq) bool {
return r.ApiKey == "" &&
return r.ApiKey == "gk-builtin-key" &&
r.Model == "glm-5.1" &&
r.JudgeApiKey == "gk-builtin-key" &&
r.JudgeBaseURL == "http://aigateway.test/v1"
})).Return(&types.ArgoWorkFlowRes{ID: 2}, nil)
Expand Down Expand Up @@ -191,7 +192,7 @@ func TestEvaluationComponent_CreateClawEvaluation_AutoJudgeAPIKeyFallback(t *tes
ctx, "user1", "user1", string(types.AccessTokenAppAIGateway), "claw-eval",
).Return("gk-fallback-key", nil)
mockDeployer.EXPECT().SubmitClawEvaluation(ctx, mock.MatchedBy(func(r types.ClawEvaluationReq) bool {
return r.ApiKey == "" &&
return r.ApiKey == "gk-fallback-key" &&
r.JudgeApiKey == "gk-fallback-key" &&
r.JudgeBaseURL == "http://aigateway.test/v1"
})).Return(&types.ArgoWorkFlowRes{ID: 3}, nil)
Expand Down
Loading