diteko (Python)
Generate, export and run tests for Amazon Connect contact flows, from Python. It is the testing counterpart to cxblueprint: build or export a flow, then let Diteko derive its grammar, evolve a test suite with Grammatical Evolution, export it, and run it on Connect's native testing.
The SDK is a client: it talks to a running Diteko deployment over its REST API, so you need one to point it at. Diteko has no application-level authentication, so point the SDK only at a deployment inside your network or behind your VPN.
pip install diteko # SDK
pip install "diteko[mcp]" # + MCP server for Claude Desktop / Cursor / VS Code
pip install "diteko[cxblueprint]"
The pipeline
from diteko import Diteko
dk = Diteko("http://localhost:8888")
project = dk.projects.from_json("claims.json") # Connect export or cxblueprint output
project.grammar.generate() # derive, store and validate the grammar
run = project.evolve(preset="standard", focus="balanced").wait()
suite = run.suite(top=30, selection="coverage") # or selection="fitness"
for test in suite:
print(test.test_id, test.keys, test.fitness)
suite.export_xlsx("claims-tests.xlsx") # manual test script (ISO/IEC/IEEE 29119-3)
suite.export_native("claims-native.json") # Amazon Connect native test cases
result = suite.publish_to_connect(dry_run=True) # dry run unless you say otherwise
print(result.passed, result.failed, result.verdicts)
Straight from cxblueprint
from cxblueprint import Flow
from diteko import Diteko
flow = Flow.build("Burger Order")
menu = flow.get_input("Press 1 for Classic or 2 for Veggie", timeout=10)
# ... build the flow as usual ...
project = Diteko().projects.from_cxblueprint(flow) # compiles locally, uploads the JSON
Other ways in
dk.projects.import_from_connect("08e145dc-d959-4094-9021-6f10d8590be2") # from the instance
dk.projects.list() # every project and its next step
dk.projects.get(21601).suite(top=10).export_xlsx()
Grammars as BNF or JSON
The two forms are exact reflections of each other. Both are validated by the same parser, and both keep comments.
g = project.grammar.latest()
spec = g.to_json() # {"format": "diteko-grammar/v1", "start": ..., "rules": [...]}
g.replace(spec, format="json").save() # edit as JSON, store as canonical BNF
dk.convert_grammar(bnf_text, "bnf", "json")
Presets
preset |
calls × generations |
|---|---|
quick |
40 × 15 |
standard |
100 × 50 |
thorough |
200 × 120 |
focus |
favours |
|---|---|
balanced |
blocks and branches, plus happy paths and recoveries |
coverage |
visiting as much of the flow as possible |
errors |
timeouts and wrong keys that still end properly |
transfers |
calls that reach an agent queue |
Pass population=, generations=, weights={"state_coverage": 1.0} or seed= to go beyond them.
MCP server
DITEKO_URL=http://localhost:8888 diteko-mcp
{ "mcpServers": { "diteko": { "command": "diteko-mcp", "env": { "DITEKO_URL": "http://localhost:8888" } } } }
| Tool | Does |
|---|---|
list_projects |
every flow under test and its next step |
import_flow |
register a flow from JSON text, a file path, or a Connect flow id |
generate_grammar |
derive, store and validate a flow's grammar |
convert_grammar |
BNF ⇄ JSON |
start_evolution |
start a run (size, focus, seed) |
get_run |
a run's progress |
export_suite |
xlsx, json or native to a file |
publish_suite |
run on Connect; dry_run defaults to true, since a live run bills the AWS account |
Each tool carries MCP annotations: read-only tools say so, and publish_suite is marked as reaching an external system. Works with mcp 1.x and 2.x.
Development
cd clients/python
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev,mcp]"
pytest # against an in-memory fake of the API
DITEKO_URL=http://localhost:8888 pytest # also runs the live test against a local stack
Metadata
Release files for diteko 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| diteko-0.1.0.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| diteko-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.2 kB
Release files / diteko-0.1.0.tar.gz
| Download URL | diteko-0.1.0.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1a1e60775bf28ff1a3714b555d424e0344a0d7d019dce292b178c7cd9c55b2b0
|
|
BLAKE2b-256 checksum How to use checksums |
bd07f5eb681e7f66219a45895f7a7916ab9c20a2c172e076cec2c67c7b983b5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Release files / diteko-0.1.0-py3-none-any.whl
| Download URL | diteko-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4a7ba7772272c867c5dc93a65ca1a6728a6ed9b7306ea7efb2f13053339c7978
|
|
BLAKE2b-256 checksum How to use checksums |
7bbd8ba5d51fa2f9ef39e87a400f1e5749aacb46c6544ac6650d3b454f9fb1ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|