mirror of
https://github.com/RuoJi6/ARTEX.git
synced 2026-10-28 01:03:50 +08:00
fix(intercept): default judge failure retries to three
This commit is contained in:
1 parent
e66789633a
commit
ed7eda5e0c
4 files changed
+35
-16
No files matched your search
@@ -316,6 +316,7 @@ const (
|
||||
// Judge default values.
|
||||
const (
|
||||
defaultJudgeTimeoutSecs = 15
|
||||
defaultJudgeRetryCount = 3
|
||||
defaultJudgeFailAction = "ask"
|
||||
defaultJudgeAskTimeoutSecs = 300
|
||||
defaultJudgeAskTimeoutAction = "deny"
|
||||
@@ -346,7 +347,7 @@ func (i *Interceptor) judgeConfig() JudgeConfig {
|
||||
Enabled: i.db.GetBool(settingJudgeEnabled, false),
|
||||
ProfileID: int64(i.getSettingInt(settingJudgeProfileID, 0)),
|
||||
TimeoutSeconds: i.getSettingInt(settingJudgeTimeoutSecs, defaultJudgeTimeoutSecs),
|
||||
RetryCount: min(max(i.getSettingInt(settingJudgeRetryCount, 0), 0), MaxJudgeRetryCount),
|
||||
RetryCount: min(max(i.getSettingInt(settingJudgeRetryCount, defaultJudgeRetryCount), 0), MaxJudgeRetryCount),
|
||||
RetryIntervalMS: min(max(i.getSettingInt(settingJudgeRetryIntervalMS, defaultJudgeRetryIntervalMS), 0), MaxJudgeRetryIntervalMS),
|
||||
FailAction: i.getSettingChoice(settingJudgeFailAction, defaultJudgeFailAction, "allow", "ask", "deny"),
|
||||
AskTimeoutSeconds: i.getSettingInt(settingJudgeAskTimeoutSecs, defaultJudgeAskTimeoutSecs),
|
||||
|
||||
@@ -59,10 +59,11 @@ func TestJudgeRetryConfigDefaultsAndBounds(t *testing.T) {
|
||||
settings map[string]string
|
||||
count, interval int
|
||||
}{
|
||||
{"legacy", nil, 0, 1000},
|
||||
{"configured", map[string]string{settingJudgeRetryCount: "3", settingJudgeRetryIntervalMS: "25"}, 3, 25},
|
||||
{"default", nil, 3, 1000},
|
||||
{"configured", map[string]string{settingJudgeRetryCount: "2", settingJudgeRetryIntervalMS: "25"}, 2, 25},
|
||||
{"disabled", map[string]string{settingJudgeRetryCount: "0"}, 0, 1000},
|
||||
{"immediate", map[string]string{settingJudgeRetryCount: "1", settingJudgeRetryIntervalMS: "0"}, 1, 0},
|
||||
{"malformed", map[string]string{settingJudgeRetryCount: "bad", settingJudgeRetryIntervalMS: "bad"}, 0, 1000},
|
||||
{"malformed", map[string]string{settingJudgeRetryCount: "bad", settingJudgeRetryIntervalMS: "bad"}, 3, 1000},
|
||||
{"negative", map[string]string{settingJudgeRetryCount: "-1", settingJudgeRetryIntervalMS: "-1"}, 0, 0},
|
||||
{"excessive", map[string]string{settingJudgeRetryCount: "999", settingJudgeRetryIntervalMS: "999999999"}, 20, 3600000},
|
||||
} {
|
||||
@@ -149,16 +150,33 @@ func TestJudgeRetriesInvalidVerdict(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestJudgeLegacyConfigDoesNotRetry(t *testing.T) {
|
||||
i := retryTestInterceptor(t, map[string]string{settingJudgeEnabled: "true", settingJudgeFailAction: "deny"})
|
||||
calls := 0
|
||||
i.SetReviewer(func(context.Context, int64, string, ReviewInput) (Decision, error) {
|
||||
calls++
|
||||
return Decision{}, errors.New("failed")
|
||||
})
|
||||
got, _ := i.Judge(t.Context(), "Bash", json.RawMessage(`{"command":"echo ok"}`))
|
||||
if calls != 1 || got.Action != "deny" || !got.ModelFallback {
|
||||
t.Fatalf("calls=%d out=%+v", calls, got)
|
||||
func TestJudgeDefaultRetriesAndExplicitDisable(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
settings map[string]string
|
||||
wantCalls int
|
||||
}{
|
||||
{"default", nil, 4},
|
||||
{"disabled", map[string]string{settingJudgeRetryCount: "0"}, 1},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
settings := map[string]string{
|
||||
settingJudgeEnabled: "true", settingJudgeFailAction: "deny", settingJudgeRetryIntervalMS: "0",
|
||||
}
|
||||
for key, value := range tc.settings {
|
||||
settings[key] = value
|
||||
}
|
||||
i := retryTestInterceptor(t, settings)
|
||||
calls := 0
|
||||
i.SetReviewer(func(context.Context, int64, string, ReviewInput) (Decision, error) {
|
||||
calls++
|
||||
return Decision{}, errors.New("failed")
|
||||
})
|
||||
got, _ := i.Judge(t.Context(), "Bash", json.RawMessage(`{"command":"echo ok"}`))
|
||||
if calls != tc.wantCalls || got.Action != "deny" || !got.ModelFallback {
|
||||
t.Fatalf("calls=%d out=%+v", calls, got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user