AfterImage JSONL Source Schema
Each line in a generated .jsonl file is a JSON object representing one conversation.
Schema (EvaluatedConversationWithContext)
{
"conversations": [
{
"role": "user",
"content": "What is Python?",
"reasoning_content": null
},
{
"role": "assistant",
"content": "Python is a high-level programming language...",
"reasoning_content": null
}
],
"metadata": {
"context_id": "doc-abc-123",
"context_ids": ["doc-abc-123", "doc-def-456"],
"persona_name": "A curious beginner",
"persona_generation_depth": 0,
"instruction_index": 2,
"batch_id": "batch-xyz",
"session_id": "sess-001"
},
"instruction_context": "Python was created by Guido van Rossum...",
"response_context": "Python documentation excerpt...",
"persona": "A curious beginner",
"evaluation": {
"coherence": { "score": 0.92, "feedback": "Clear logical flow." },
"factuality": { "score": 0.85, "feedback": "Accurate." },
"grounding": { "score": 0.78, "feedback": "Well grounded." },
"helpfulness": { "score": 0.88, "feedback": "Helpful response." },
"relevance": { "score": 0.90, "feedback": "Relevant." },
"overall_grade": "good"
},
"final_score": 0.866
}
Field details
Field |
Type |
Always present |
Description |
|---|---|---|---|
|
|
Yes |
Alternating user/assistant turns |
|
|
Yes |
Speaker role |
|
|
Yes |
Message text |
|
|
Yes |
Chain-of-thought (DeepSeek R1 etc.) |
|
|
Yes |
Generation metadata |
|
|
If context used |
Source document ID |
|
|
If context used |
All source document IDs |
|
|
If personas used |
Persona description |
|
|
If personas used |
Depth in persona tree |
|
|
Yes |
Context given to instruction generator |
|
|
Yes |
Context given to respondent |
|
|
Yes |
Top-level persona shorthand |
|
|
When a judge ran (e.g. |
Quality evaluation scores; may be absent on unevaluated rows |
|
|
With evaluation |
One of |
|
|
Usually present on stored rows |
Composite 0–1 score when evaluated; unevaluated rows may omit the field or serialize with model defaults depending on writer |
Notes
The respondent system prompt is NOT stored in each row. It lives in the config or in the ConversationGenerator. Exporters that need a system prompt should accept it as an optional parameter.
Multi-turn conversations have
len(conversations) > 2with strictly alternating user/assistant.reasoning_contentis typically null unless using models with chain-of-thought (e.g. DeepSeek R1).