Skip to main content
White Circle checks each Event against the Events that came before it. Earlier Events give the model the conversation it needs to interpret the current one, while the result describes only the Event you submitted. Any Event with content joins that conversation, not only messages; reference-only Events add nothing, because they carry no new content. This matters for violations that are invisible in a single Event. A message like “do it for the address I gave you” is harmless alone and meaningful only after the Event that supplied the address.

What Gets Checked

Context informs the check. It is never scored. Every Policy result and Metric describes the Event it belongs to, even when an earlier Event in the same conversation violates a Policy.
Each Event receives its own result.

Grouping Events into a Conversation

White Circle builds context from Events that share an identifier. Use external_session_id for conversations that outlive a single run. When an Event has both, external_session_id selects the context and run_id is used only for grouping.
Run-only context is held in a short-lived cache with no durable fallback. After roughly 10 minutes without activity in that run, a later Event is checked without its history. Send an external_session_id when the conversation must keep its context.
If you omit run_id, White Circle generates one. A generated run_id is unique to that request, so those Events get no previous context.
1

First Event

Send an Event with an external_session_id:
2

Later Event

Send the next Event with the same external_session_id. It does not have to be a message; here a tool returns the stored record:
3

Third Event

A later message is checked against everything before it:
4

What the Model Sees

White Circle checks evt_user_002 against all three Events:
The tool output enters the conversation with the tool role, and agent.instructions would enter as system. The result belongs to evt_user_002 alone.

Context in a Batch

Events in a POST /api/events batch become context for the Events after them, in the order you list them in the events array. A batch can mix Event types, and each one becomes context for those after it:
Each Event is checked against the conversation up to and including itself:
Array order defines context, not arrival order. White Circle checks a batch concurrently, and no Event is ever checked against an Event listed after it.
List Events in the order they happened. Submitting an assistant reply before the user message it answers gives the model a conversation your application never produced.
To check an Event in isolation, submit it without reusing an external_session_id or run_id. Events always use the context available to them.