Examples
Each example below is a complete, copy-pasteable file.
End-to-end: trace, evaluate, assert, report
# end_to_end.py
import random
from entropy import (Suite, Dataset, Case, trace, event,
assert_stable, export_report)
# 1. Agent under test — returns an AgentRun with traced events.
def agent(inp):
with trace():
event("action", "tool:search", query=inp)
event("observation", "top_result", n=5)
event("action", "reply")
# 70% of the time we answer correctly, otherwise we drift.
return "A" if random.random() < 0.7 else "Z"
# 2. Dataset.
dataset = Dataset([
Case(input="weather", expected="A"),
Case(input="news", expected="A"),
])
# 3. Monte Carlo evaluation.
results = Suite(seed=42).run(agent, dataset, trials=200)
print("success_rate:", results["success_rate"])
print("behavioral_entropy:", results["behavioral_entropy"])
print("drift_score:", results["drift_score"])
# 4. Regression gate.
assert_stable(results, success_rate__gt=0.5, drift_score__lt=0.3)
# 5. Export an HTML report.
export_report(results, "html", "report.html")
print("wrote report.html")
Evaluating a stochastic agent
A non-deterministic agent that mostly returns "A" but
sometimes "B" or "C":
import random
from entropy import Suite, Dataset, Case, assert_stable
def fickle_agent(inp):
r = random.random()
if r < 0.6:
return "A"
if r < 0.85:
return "B"
return "C"
dataset = Dataset([
Case(input="q1", expected="A"),
Case(input="q2", expected="B"),
])
results = Suite(seed=42).run(fickle_agent, dataset, trials=300)
for k, v in results.items():
print(f" {k}: {v}")
assert_stable(
results,
success_rate__gt=0.3,
behavioral_entropy__gt=0.0, # non-deterministic -> non-zero entropy
drift_score__lt=0.2,
)
print("\nassert_stable: OK")
This mirrors examples/basic.py in the repository.
Tracing a tool-using agent
from entropy import trace, event, Suite, Dataset, Case
def agent(inp):
with trace():
event("action", "tool:search", query=inp)
event("observation", "top_result", n=5)
event("action", "reply")
return f"searched: {inp}"
dataset = Dataset([Case(input="weather", expected=None)])
res = Suite(seed=0).run(agent, dataset, trials=20)
print(res["tool_reliability"], res["behavioral_entropy"])
Chaos resilience gate
from entropy import ChaosRunner, assert_stable
cr = ChaosRunner(seed=0)
out = cr.run(agent, dataset, ["api_fail", "timeout"], trials=50)
base = out["baseline"]["success_rate"]
for fault, r in out["faults"].items():
print(f"{fault}: success dropped {base - r['success_rate']:.3f}, "
f"drift={r['drift_score']:.3f}")
CLI end-to-end
# 1. scaffold
entropy init
# 2. edit agent.py / dataset.json, then run
entropy run --agent agent:agent --dataset dataset.json --trials 200
# 3. lock a baseline, then guard it in CI
entropy test --agent agent:agent --dataset dataset.json --baseline base.json --update
entropy test --agent agent:agent --dataset dataset.json --baseline base.json
LangChain agent (Ollama / minimax-m3)
A real LangChain agent built with create_agent on a local
Ollama model, wrapped and evaluated. Mirrors
examples/langchain_ollama_e2e.py:
from langchain.agents import create_agent
from langchain_core.tools import tool
from langchain_ollama import ChatOllama
from entropy import from_langgraph, Suite, Dataset, Case, assert_stable
@tool
def get_weather(city: str) -> str:
return f"It is sunny in {city}."
agent = create_agent(ChatOllama(model="minimax-m3:cloud", temperature=0.0),
tools=[get_weather],
system_prompt="You are a helpful assistant. Answer concisely.")
wrapped = from_langgraph(agent) # create_agent -> CompiledStateGraph
dataset = Dataset([
Case(input="What is the weather in Paris?",
check=lambda o: "sunny" in (o or "").lower()),
Case(input="Tell me a joke.",
check=lambda o: bool(o) and len(o) > 15),
])
results = Suite(seed=42).run(wrapped, dataset, trials=3)
for k, v in results.items():
print(f" {k}: {v}")
assert_stable(results, success_rate__gt=0.5, drift_score__lt=0.6)
print("\nassert_stable: OK")
Run the bundled examples
python examples/basic.py,
python examples/langchain_e2e.py,
python examples/langchain_ollama_e2e.py,
python examples/langchain_full_eval.py and
python examples/agent_demo.py ship with the repo.
The Ollama examples need ollama serve and
ollama pull minimax-m3:cloud.
langchain_full_eval.py is the full harness: Monte Carlo
evaluation, chaos resilience, Watcher observability, dashboard + report,
and a regression gate.