feat(tenant): make monitoring parse & compliance judge models configurable

Replace the hardcoded doubao-lite model used for monitoring answer
parsing and compliance LLM judging with configurable values, resolved
from config with env overrides and a legacy default fallback.

- Add llm.monitoring_answer_parse_model and compliance.llm_judge_model
  to config struct, env overrides, and all config files
- Thread the resolved model through MonitoringCallbackService via a
  ConfigProvider and into parseMonitoringAnswerWithLLM
- Pass compliance.llm_judge_model into the review-job LLM request

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-09 17:04:01 +08:00
parent fb142e4ca7
commit c8dceb43d7
13 changed files with 103 additions and 17 deletions
@@ -27,6 +27,30 @@ llm:
}
}
func TestLoadAppliesSpecializedLLMModelEnvOverrides(t *testing.T) {
t.Setenv("LLM_MONITORING_ANSWER_PARSE_MODEL", "env-monitoring-parse")
t.Setenv("COMPLIANCE_LLM_JUDGE_MODEL", "env-compliance-judge")
configPath := writeTestConfig(t, `
llm:
monitoring_answer_parse_model: "config-monitoring-parse"
compliance:
llm_judge_model: "config-compliance-judge"
`)
cfg, err := Load(configPath)
if err != nil {
t.Fatalf("Load() error = %v", err)
}
if cfg.LLM.MonitoringAnswerParseModel != "env-monitoring-parse" {
t.Fatalf("expected env monitoring parse model, got %q", cfg.LLM.MonitoringAnswerParseModel)
}
if cfg.Compliance.LLMJudgeModel != "env-compliance-judge" {
t.Fatalf("expected env compliance judge model, got %q", cfg.Compliance.LLMJudgeModel)
}
}
func TestDatabaseConfigDSNEscapesCredentials(t *testing.T) {
cfg := DatabaseConfig{
Host: "db.internal",