conflict-arbitration-env / eval /frozen_baseline.py
Jeeevan11's picture
initial commit: conflict arbitration env
8fd5450
Raw
History Blame Contribute Delete
2.36 kB
from training.prompt_templates import format_arbitrator_observation
from training.rollout import generate_decision
def save_frozen_checkpoint(model, tokenizer, path: str = "./frozen_baseline"):
"""
Call this at step 0 before any training.
This is your primary proof of learning.
Non-negotiable.
"""
model.save_pretrained(path)
tokenizer.save_pretrained(path)
print(f"Frozen baseline saved to {path}")
def load_frozen(path: str):
try:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name=path,
max_seq_length=4096,
load_in_4bit=True,
fast_inference=True,
)
return model
except ImportError:
from transformers import AutoModelForCausalLM
return AutoModelForCausalLM.from_pretrained(path)
def evaluate_vs_frozen(
trained_model,
frozen_checkpoint_path: str,
env_client,
tokenizer,
num_episodes: int = 100
) -> dict:
"""
Runs trained Agent C against frozen Agent C baseline.
Both face the same episodes.
Returns comparative metrics.
"""
frozen_model = load_frozen(frozen_checkpoint_path)
trained_results = []
frozen_results = []
for _ in range(num_episodes):
obs = env_client.reset()
messages = format_arbitrator_observation(obs)
prompt = tokenizer.apply_chat_template(messages, tokenize=False)
_, trained_decision = generate_decision(trained_model, tokenizer, prompt)
trained_result = env_client.step(trained_decision or {"action": "nothing"})
trained_results.append(trained_result)
obs_reset = env_client.reset()
_, frozen_decision = generate_decision(frozen_model, tokenizer, prompt)
frozen_result = env_client.step(frozen_decision or {"action": "nothing"})
frozen_results.append(frozen_result)
return {
"trained_accuracy": sum(r["info"]["agent_c_was_correct"] for r in trained_results) / num_episodes,
"frozen_accuracy": sum(r["info"]["agent_c_was_correct"] for r in frozen_results) / num_episodes,
"trained_merge_rate": sum(r["info"]["spec_satisfied"] for r in trained_results) / num_episodes,
"frozen_merge_rate": sum(r["info"]["spec_satisfied"] for r in frozen_results) / num_episodes,
}