refactor(exploration): share one fetch+aggregate helper across outlets

report, markdown and analysis each repeated the
summarize_exploration(repo.list_by_campaign(...)) shape; collapse it
into summarize_campaign_exploration so the aggregation has one home.
This commit is contained in:
sinohqb 2026-08-04 02:48:59 +08:00
parent 936640fb36
commit ef4c094082
3 changed files with 14 additions and 8 deletions

View File

@ -14,7 +14,7 @@ from typing import Any, Awaitable, Callable, Optional
from sqlmodel import Session
from agenteval.evaluation.report import generate_campaign_report
from agenteval.exploration.summary import summarize_exploration
from agenteval.exploration.summary import summarize_campaign_exploration
from agenteval.model_gateway import ModelGateway
from agenteval.models import Campaign, ModelCapability, RunStatus
from agenteval.services.model_configs import (
@ -27,7 +27,6 @@ from agenteval.storage.model_config_repository import ModelConfigRepository
from agenteval.storage.repository import (
CampaignAnalysisRepository,
CampaignRepository,
ExplorationSessionRepository,
RunRepository,
ScenarioRepository,
)
@ -309,14 +308,13 @@ async def execute_campaign_analysis(
runs = RunRepository(session).list_by_campaign(campaign_id)
scenario_names = {s.id: s.name for s in ScenarioRepository(session).list_all()}
report = generate_campaign_report(campaign, runs, scenario_names=scenario_names)
exploration_sessions = ExplorationSessionRepository(session).list_by_campaign(campaign_id)
result = await analyze_campaign(
campaign=campaign,
report=report,
failure_samples=collect_failure_samples(campaign_id, session),
valid_run_ids={r.id for r in runs if r.id},
chat_client=client,
exploration_summary=summarize_exploration(exploration_sessions),
exploration_summary=summarize_campaign_exploration(session, campaign_id),
)
except Exception as exc:
_logger.warning("活动 %s 智能分析失败: %s", campaign_id, exc)

View File

@ -10,6 +10,8 @@ findings 全量收各档发现poor 档排前)。这是体验记录这条第
from collections import Counter
from typing import Any, Optional
from sqlmodel import Session
from agenteval.exploration.models import ExplorationSession
_RATING_SEVERITY = {"poor": 0, "acceptable": 1, "good": 2}
@ -48,6 +50,13 @@ def summarize_exploration(sessions: list[ExplorationSession]) -> Optional[dict[s
}
def summarize_campaign_exploration(db_session: Session, campaign_id: str) -> Optional[dict[str, Any]]:
"""取数 + 聚合一步完成:报告 / 分析 / 导出三个出口共用的探索摘要取法。"""
from agenteval.storage.repository import ExplorationSessionRepository
return summarize_exploration(ExplorationSessionRepository(db_session).list_by_campaign(campaign_id))
def _summarize_judge_reviews(sessions: list[ExplorationSession]) -> Optional[dict[str, Any]]:
"""只纳入复核完成的会话findings 全量收各档发现poor 档排前summaries 收复核总体结论。"""
findings: list[dict[str, Any]] = []

View File

@ -27,7 +27,7 @@ from agenteval.evaluation.report import (
)
from agenteval.evaluation.report_render import render_campaign_markdown
from agenteval.exploration.settlement import settle_campaign_sessions
from agenteval.exploration.summary import summarize_exploration
from agenteval.exploration.summary import summarize_campaign_exploration
from agenteval.models import Campaign, CampaignPlanEntry, CampaignStatus, ExplorationBudgetConfig, ExplorationSeeds
from agenteval.storage.db import iso_utc, utc_now
from agenteval.storage.model_config_repository import ModelConfigRepository
@ -35,7 +35,6 @@ from agenteval.storage.repository import (
CampaignAnalysisRepository,
CampaignPeriodComparisonRepository,
CampaignRepository,
ExplorationSessionRepository,
RunRepository,
ScenarioRepository,
TargetRepository,
@ -135,7 +134,7 @@ async def get_campaign_report(campaign_id: str, session: Session = Depends(get_d
runs = RunRepository(session).list_by_campaign(campaign_id)
scenario_names = {s.id: s.name for s in ScenarioRepository(session).list_all()}
report = generate_campaign_report(campaign, runs, scenario_names=scenario_names)
exploration = summarize_exploration(ExplorationSessionRepository(session).list_by_campaign(campaign_id))
exploration = summarize_campaign_exploration(session, campaign_id)
if exploration is not None:
report["exploration"] = exploration
return report
@ -182,7 +181,7 @@ async def get_campaign_report_markdown(campaign_id: str, session: Session = Depe
generate_campaign_report(campaign, runs, scenario_names=scenario_names),
analysis=analysis,
comparison=comparison,
exploration=summarize_exploration(ExplorationSessionRepository(session).list_by_campaign(campaign_id)),
exploration=summarize_campaign_exploration(session, campaign_id),
target_name=target_name,
scenario_names=scenario_names,
)