DGX_AI / codeforge /audit /ledger.py
vasiuuu's picture
Initial commit for CodeForge GRPO training
acf77ab
Raw
History Blame
1.11 kB
from __future__ import annotations
from collections import Counter
from dataclasses import asdict
from codeforge.models import AuditEntry
class AuditLedger:
"""Per-episode, per-step append-only audit log."""
def __init__(self) -> None:
self._entries: list[AuditEntry] = []
def append(self, entry: AuditEntry) -> None:
self._entries.append(entry)
def entries(self) -> tuple[AuditEntry, ...]:
return tuple(self._entries)
def total_reward(self) -> float:
return sum(e.reward for e in self._entries)
def citation_count(self) -> dict[str, int]:
counts: Counter[str] = Counter()
for entry in self._entries:
counts.update(entry.cited_skill_ids)
return dict(counts)
def step_count(self) -> int:
return len(self._entries)
def serialize(self) -> dict[str, object]:
return {
"entries": [asdict(e) for e in self._entries],
"total_reward": self.total_reward(),
"step_count": self.step_count(),
"citation_count": self.citation_count(),
}