feat: link ai quality actions to changes

This commit is contained in:
2026-06-23 10:22:48 +08:00
parent b2d60871a5
commit a756a0dd93
9 changed files with 450 additions and 8 deletions
@@ -345,6 +345,10 @@ class AiQualityImprovementActionCreate(BaseModel):
source_label_codes: list[str] = Field(default_factory=list)
source_run_ids: list[str] = Field(default_factory=list)
root_cause_hint: str | None = None
linked_prompt_template_id: str | None = None
linked_prompt_template_version: str | None = None
linked_knowledge_base_id: str | None = None
linked_import_batch_id: str | None = None
evaluation_days: int = 14
@@ -353,6 +357,10 @@ class AiQualityImprovementActionUpdate(BaseModel):
owner: str | None = Field(default=None, max_length=128)
priority: str | None = None
resolution_note: str | None = None
linked_prompt_template_id: str | None = None
linked_prompt_template_version: str | None = None
linked_knowledge_base_id: str | None = None
linked_import_batch_id: str | None = None
class AiQualityImprovementAction(AiQualityImprovementActionCreate):
@@ -115,6 +115,10 @@ def test_ai_platform_client_covers_admin_data_endpoints() -> None:
"source_label_codes": ["source_limited"],
"source_run_ids": ["run-1"],
"root_cause_hint": "Model quality issues are concentrated.",
"linked_prompt_template_id": "prompt-1",
"linked_prompt_template_version": "v2",
"linked_knowledge_base_id": "laws-cn",
"linked_import_batch_id": "kb-batch-1",
"evaluation_days": 7,
"baseline_total_runs": 1,
"baseline_affected_runs": 1,
@@ -621,6 +625,7 @@ def test_ai_platform_client_covers_admin_data_endpoints() -> None:
assert payload["dimension"] == "model"
assert payload["action_type"] == "tune_model"
assert payload["source_label_codes"] == ["source_limited"]
assert payload["linked_prompt_template_id"] == "prompt-1"
return httpx.Response(200, json=quality_action_payload())
if request.url.path == "/api/v1/audit/quality-improvement-actions":
query = parse_qs(request.url.query.decode())
@@ -636,6 +641,7 @@ def test_ai_platform_client_covers_admin_data_endpoints() -> None:
assert request.method == "PATCH"
assert payload["status"] == "resolved"
assert payload["resolution_note"] == "Provider config was tuned."
assert payload["linked_import_batch_id"] == "kb-batch-2"
return httpx.Response(
200,
json=quality_action_payload(
@@ -802,10 +808,13 @@ def test_ai_platform_client_covers_admin_data_endpoints() -> None:
priority="high",
source_label_codes=["source_limited"],
source_run_ids=["run-1"],
linked_prompt_template_id="prompt-1",
evaluation_days=7,
)
)
assert created_action.status == "open"
assert created_action.linked_prompt_template_id == "prompt-1"
assert created_action.linked_import_batch_id == "kb-batch-1"
assert created_action.baseline_affected_runs == 1
assert created_action.effect_status == "unchanged"
listed_actions = client.list_quality_improvement_actions(
@@ -823,6 +832,7 @@ def test_ai_platform_client_covers_admin_data_endpoints() -> None:
AiQualityImprovementActionUpdate(
status="resolved",
resolution_note="Provider config was tuned.",
linked_import_batch_id="kb-batch-2",
),
)
assert updated_action.status == "resolved"