Framework Playbooks
Fix real data-quality failures documented in popular AI agent frameworks. Each playbook gives you the exact ADRI commands and decorator code to reproduce the win with sample data. Swap in your own datasets once you see it working.
All paths assume you ran
adri setup --guide
, which creates sample invoice data and ADRI project folders.
Replace data/...
paths with your own datasets when you move beyond the tutorial sample.
See Core Concepts for standard naming, protection modes, and the five dimensions.
LangChain β Chain Execution Failuresβ
Documented issue: Type mismatches or missing fields break chains (e.g. GitHub issues #21030, #21152).
- Generate a standard from the clean tutorial dataset:
adri generate-standard examples/data/invoice_data.csv \
--output examples/standards/invoice_data_ADRI_standard.yaml - Assess a messy dataset before you call the chain:
adri assess examples/data/test_invoice_data.csv \
--standard examples/standards/invoice_data_ADRI_standard.yaml - Guard the function that feeds the chain:
from adri import adri_protected
@adri_protected(standard="invoice_data_standard", data_param="invoice_rows")
def build_chain_inputs(invoice_rows):
return prompt | model | parser - Expected console output when bad rows appear:
β οΈ ADRI Data Quality Warning:
π Score: 62.4 (below threshold) - Link to next step: need centralized audit for LangChain runs? See Adoption Journey.
CrewAI β Agent Coordination Breakdownsβ
Documented issue: Inconsistent task payloads cause crew conflicts (GitHub issues #541, #612).
- Generate or update a standard specific to CrewAI task data:
adri generate-standard data/crew_tasks_good.json \
--output ADRI/dev/standards/crew_task_standard.yaml - Validate every task bundle before kickoff:
adri assess data/crew_tasks_batch.json \
--standard ADRI/dev/standards/crew_task_standard.yaml - Decorate the function that prepares inputs:
@adri_protected(standard="crew_task_standard", data_param="task_payload", on_failure="continue")
def kickoff_crew(task_payload):
return crew.kickoff(inputs=task_payload) - When invalid payloads arrive ADRI logs the issue, lets the crew continue (because
on_failure="continue"
), and writes an audit file toADRI/dev/assessments
so you can spot the discrepancy.
LlamaIndex β Index Corruptionβ
Documented issue: Corrupted metadata or empty documents break retrieval (GitHub issues #10915, #11442).
- Build a standard from known-good documents:
adri generate-standard data/llamaindex_docs_clean.json \
--output ADRI/dev/standards/llamaindex_document_standard.yaml - Block malformed docs before ingestion:
adri assess data/llamaindex_docs_incoming.json \
--standard ADRI/dev/standards/llamaindex_document_standard.yaml - Decorate the ingestion hook:
@adri_protected(standard="llamaindex_document_standard", data_param="documents")
def ingest_documents(documents):
index = vector_store.add_documents(documents)
return index - Add dimension requirements if freshness is a concern:
@adri_protected(
standard="llamaindex_document_standard",
data_param="documents",
dimensions={"freshness": 16, "validity": 18},
)
def ingest_documents(documents):
...
LangGraph β State Corruptionβ
- Create a state standard (custom YAML or generated from success logs).
- Validate state snapshots in CI before rolling out a new graph:
adri assess data/langgraph_state_snapshot.json \
--standard ADRI/dev/standards/langgraph_state_standard.yaml - Wrap state transitions:
@adri_protected(standard="langgraph_state_standard", data_param="state")
def execute_node(state):
return node.run(state) - Use
on_failure="raise"
in production to stop corrupted state from cascading across the graph.
Semantic Kernel β Plugin Input Validationβ
- Generate a standard from successful plugin calls.
- Validate inbound parameters before execution:
adri assess data/semantic_kernel_calls_dev.csv \
--standard ADRI/dev/standards/kernel_plugin_standard.yaml - Guard plugin dispatch:
@adri_protected(standard="kernel_plugin_standard", data_param="call_params", on_failure="warn")
def invoke_plugin(call_params):
return kernel.invoke_plugin(call_params) - If you need selective blocking (drop only bad rows), set
on_failure="continue"
and inspect the generated logs.
Universal Patternβ
from adri import adri_protected
@adri_protected(standard="invoice_data_standard", data_param="invoice_rows", min_score=80)
def protected_function(invoice_rows):
return framework_function(invoice_rows)
- Generate a standard once from a good payload batch.
- Reuse it everywhere that dataset appears (CLI β decorator).
- Decide failure handling using
on_failure
. - Store the YAML under version control so agents, data engineering, and compliance teams share the same contract.
Next: Operationalise the Winsβ
- Use
adri list-standards
andadri show-standard <name>
to document requirements for each framework integration. - Want centralised audit and compliance for production agents? Follow the Adoption Journey to move from Steps 1β4 (OSS) to Steps 5β10 (Verodat MCP).