triage-flow / tests /test_inference_logging.py
StrongCapybara's picture
feat: complete TriageFlow environment for Hackathon Submission
0cb452d
Raw
History Blame Contribute Delete
2.76 kB
"""
Test that inference.py produces the exact stdout format required.
Runs the environment directly (no LLM needed) with mock actions to verify logging format.
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from triage_flow.environment import TriageEnvironment
from triage_flow.graders import grade_task
from models import TriageAction, ActionType, PriorityLevel
# Test the logging functions from inference.py
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from inference import log_start, log_step, log_end
import io
from contextlib import redirect_stdout
# Capture stdout
f = io.StringIO()
with redirect_stdout(f):
log_start(task="basic-triage", env="triage-flow", model="test-model")
# Simulate a 3-step episode
log_step(step=1, action="assign_priority(P001,immediate)", reward=0.50, done=False, error=None)
log_step(step=2, action="assign_priority(P002,non_urgent)", reward=0.10, done=False, error=None)
log_step(step=3, action="assign_priority(P003,urgent)", reward=0.50, done=True, error=None)
log_end(success=True, steps=3, score=1.00, rewards=[0.50, 0.10, 0.50])
output = f.getvalue()
lines = output.strip().split("\n")
print("=== CAPTURED STDOUT ===")
for line in lines:
print(repr(line))
print()
# Validate format
assert lines[0].startswith("[START]"), f"Line 0 should start with [START]: {lines[0]}"
assert "task=basic-triage" in lines[0], f"Missing task: {lines[0]}"
assert "env=triage-flow" in lines[0], f"Missing env: {lines[0]}"
assert "model=test-model" in lines[0], f"Missing model: {lines[0]}"
for i in range(1, 4):
assert lines[i].startswith("[STEP]"), f"Line {i} should start with [STEP]: {lines[i]}"
assert f"step={i}" in lines[i], f"Missing step={i}: {lines[i]}"
assert "reward=" in lines[i], f"Missing reward: {lines[i]}"
assert "done=" in lines[i], f"Missing done: {lines[i]}"
assert "error=" in lines[i], f"Missing error: {lines[i]}"
# Check [STEP] format details
assert "done=false" in lines[1], f"done should be lowercase: {lines[1]}"
assert "done=true" in lines[3], f"done should be lowercase: {lines[3]}"
assert "error=null" in lines[1], f"error should be 'null': {lines[1]}"
assert "reward=0.50" in lines[1], f"reward should be 2 decimal: {lines[1]}"
# Check [END]
assert lines[4].startswith("[END]"), f"Line 4 should start with [END]: {lines[4]}"
assert "success=true" in lines[4], f"success should be lowercase: {lines[4]}"
assert "steps=3" in lines[4], f"Missing steps: {lines[4]}"
assert "score=1.00" in lines[4], f"score should be 2 decimal: {lines[4]}"
assert "rewards=0.50,0.10,0.50" in lines[4], f"rewards format wrong: {lines[4]}"
print("=== ALL FORMAT CHECKS PASSED ===")