mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-10-11 03:40:03 +00:00
- Extract _counter_key from BaseJob._record_call for reusable counter lookup - Add reme.utils.evaluation_interface.check_job_count read-only helper - Track and report average search calls per query in beam and longmemeval benchmarks
30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
"""Read-only evaluation helpers for application job execution statistics."""
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from ..components.job import BackgroundJob, BaseJob, CronJob, StreamJob
|
|
from .counter import global_counter_get
|
|
|
|
if TYPE_CHECKING:
|
|
from ..components.application_context import ApplicationContext
|
|
|
|
|
|
_JOB_ENTRY_CLASSES = {CronJob, StreamJob, BackgroundJob, BaseJob}
|
|
|
|
|
|
def check_job_count(job_name: str, app_context: "ApplicationContext") -> int:
|
|
"""Return the application-lifetime execution count for a registered job.
|
|
|
|
``app_context`` scopes the lookup because ReMe does not maintain a global
|
|
current Application instance. Unknown job names use the same ``KeyError``
|
|
contract as :meth:`Application.run_job`.
|
|
"""
|
|
job = app_context.jobs.get(job_name)
|
|
if job is None:
|
|
raise KeyError(f"Job '{job_name}' not found")
|
|
|
|
entry_class = next((cls for cls in type(job).mro() if cls in _JOB_ENTRY_CLASSES), None)
|
|
if entry_class is None:
|
|
raise TypeError(f"Job '{job_name}' does not inherit from a supported job implementation")
|
|
# pylint: disable-next=protected-access
|
|
return global_counter_get(app_context.metadata, job._counter_key(entry_class))
|