criogenai

Benchmark lab

CriogenAI, LangGraph and CrewAI, on the same work

All three in Python, in the way their own documentation shows, against one simulated model with the same replies and delays. Each scenario runs in a fresh process per framework. Everything below is read from one results file: the machine, the versions, the command and every measurement.

For what CriogenAI's Rust engine, SDK bridges and gateway cost on their own, see Benchmarks in the docs.

The recorded run

Download raw JSON
Machine
AMD Ryzen 5 4600H with Radeon Graphics, 15.4 GB RAM, Windows 11
Python
3.13.14
Recorded
2026-10-21 18:47 UTC
Frameworks
  • Criogen 0.1.0
  • LangGraph 1.2.16 with langchain 1.4.6, langchain-core 1.6.12
  • CrewAI 1.15.28
Command
python benches/compare/run.py

Head to head

Every measurement of the recorded run, the frameworks side by side. Hover or focus a bar for its details; “Show the numbers” under each group opens them as a table, with the best value of each row marked.

Speed

Median time per run, after a warm-up; the label says how many times longer than the fastest.

Agent, one model calllower is better
Criogen290 µsbest
LangGraph1.23 ms4.3× more
CrewAI33.9 ms117× more
Agent with 5 tool callslower is better
Criogen1.1 msbest
LangGraph7.64 ms6.9× more
CrewAI45.8 ms42× more
Agent with realistic delayslower is better
Criogen706 msbest
LangGraph711 ms1.0× more
CrewAI765 ms1.1× more
Workflow: 10 steps in a rowlower is better
Criogen822 µsbest
LangGraph6.4 ms7.8× more
CrewAI49 ms60× more
Workflow: 20 parallel nodeslower is better
Criogen102 msbest
LangGraph208 ms2.0× more
CrewAI240 ms2.3× more

Under load

Many agent runs at once in one process (model 100 ms per call, one tool of 50 ms each): how long the whole batch takes, and the memory it needs.

Time for the whole batchlower is better; log scale
CriogenLangGraphCrewAI
Peak memory of the processlower is better
CriogenLangGraphCrewAI
CPU time for 1000 agent runs at oncelower is better
Criogen1.02 sbest
LangGraph4.11 s4.0× more
CrewAI61.2 s60× more
Memory per run, 1000 agent runs at oncelower is better
Criogen69.5 KB1.4× more
LangGraph50 KBbest
CrewAI166 KB3.3× more

Memory and CPU

What one process needs: its peak memory while running agents one by one, and the CPU time each run costs.

Peak memory: agent, one model calllower is better
Criogen30.5 MBbest
LangGraph75.2 MB2.5× more
CrewAI170 MB5.6× more
CPU per run: agent with 5 tool callslower is better
Criogen1.48 msbest
LangGraph7.97 ms5.4× more
CrewAI45.3 ms31× more

Reliability

The same faults injected into each framework, with its defaults. Each test's reason and log are in the matrix below.

Reliability tests passedout of 5; more green is better
Criogen✓ 5 pass◐ 0 partial✕ 0 fail
LangGraph✓ 2 pass◐ 1 partial✕ 2 fail
CrewAI✓ 4 pass◐ 1 partial✕ 0 fail

Footprint

What you install and wait for: import time in a fresh interpreter, the size of the virtual environment, and the packages it pulls in.

Import timelower is better
Criogen148 msbest
LangGraph1.7 s12× more
CrewAI9.3 s63× more
Install sizelower is better
Criogen17.9 MBbest
LangGraph42.9 MB2.4× more
CrewAI743 MB41× more
Packages installedlower is better
Criogen1best
LangGraph4242× more
CrewAI138138× more

Scenarios

Agent, one model call agent_call

One model call, no tools, the model answers at once: the framework's cost per agent turn.

The race

  1. Criogen
    290 µs1st
  2. LangGraph
    1.23 ms2nd
  3. CrewAI
    33.9 ms3rd

Each lane finishes in time proportional to its median per run. Replay slowed down 118×: 1 ms measured takes 118 ms on screen.

* The simulated-model adapter alone, one call, measured in the same process (so the adapters are not what differs): LangGraph 145 µs · CrewAI 3.37 µs

Every number

FrameworkRunsMedianp95MinMaxWall (all runs)CPU per run
Criogen300290 µs687 µs192 µs1.04 ms101 ms365 µs
LangGraph3001.23 ms2.28 ms1.02 ms3.66 ms419 ms1.35 ms
CrewAI30033.9 ms40.4 ms29.4 ms62.1 ms10.3 s33.3 ms

Distribution

Dots: single runs (per run). Box: middle half. Thick line: median. Thin tick: 95th percentile. Logarithmic axis: the frameworks are more than 20× apart.

Criogen
LangGraph
CrewAI

Memory and CPU

Peak memory

The process's peak resident set; the darker part is the resident set after imports and set-up.

  • Criogen
    30.5 MB · after set-up 30.4 MB
  • LangGraph
    75.2 MB · after set-up 75.1 MB
  • CrewAI
    170 MB · after set-up 170 MB

CPU time per run

User + system time of the measured part.

  • Criogen
    365 µs
  • LangGraph
    1.35 ms
  • CrewAI
    33.3 ms

Reliability

Each test injects the same fault through the shared model or tools, with each framework's defaults. Select a cell for the reason and the log.

  • ✓ pass as the test defines it
  • ◐ partial part of it
  • ✕ fail not at all
TestCriogenLangGraphCrewAI
model_transientThe model raises a rate-limit error once, then answers. Pass: The run completes without the caller's code retrying.
tool_exceptionA tool raises. Pass: The model sees the error and the run completes with an answer.
bad_argumentsThe model calls a tool with a wrong argument type. Pass: The tool function never sees the bad arguments, and the run completes.
crash_resumeThe process is killed while the 2nd of 2 tools runs (the 1st finished). Pass: A new process continues the same conversation from storage, and the finished tool is not run again.
runaway_loopThe model asks for a tool forever. Pass: The run stops by itself, with an error, within its default limit.

Footprint

What you install, and how long the import takes in a fresh interpreter.

FrameworkCold importPackages installedInstall size
Criogen148 ms117.9 MB
LangGraph1.7 s4242.9 MB
CrewAI9.3 s138743 MB

Check it on your machine

Download the kit: the benchmark exactly as it ran here, with the code for each framework and the method (METHOD.md). It needs Python 3.10 to 3.13 and no API keys: every framework talks to the same scripted model.

Download the benchmark kit (.zip)

cd criogen-compare-kit
python setup.py      # once: a virtual environment per framework (pinned versions)
python run.py        # everything, about 25 minutes → bench/results/<date>-<machine>.json
python run.py quick  # a short smoke test (not for comparing)

Then load the file it writes:

Drop your results file here

A .json file written by run.py (schema criogen-compare/1). It is read and checked in your browser; nothing is uploaded.

Live comparison

CriogenAI and LangChain on one job, side by side

Send a message through the same agent in both frameworks and compare latency, throughput, CPU and memory. Each framework runs in its own process against one scripted model server, and the measurements are taken from outside by the same code. For exploration on a single machine; the results above are the reference.

Recorded runs

Each model call waits 200 ms and each tool 100 ms, as a hosted model and a database would.

CriogenAI

waiting
 
No answer yet.

LangChain

waiting
 
No answer yet.

CPU and memory

0.00.30.50.81.00.0 s0.3 s0.5 s0.8 s1.0 s
CPU, % of one core (above 100% = more than one core)
0.00.30.50.81.00.0 s0.3 s0.5 s0.8 s1.0 s
Resident memory, MB (whole process)
  • CriogenAI
  • LangChain

Results

MeasurementCriogenAILangChainDifference
No results yet.

How the live comparison works

Model
One local server speaks the OpenAI wire format and gives both frameworks identical scripted replies. Each framework builds requests and parses responses with its own client. No real model is called.
Agents
Each framework's standard tool-calling agent with default settings: Agent in CriogenAI, create_agent in LangChain. Both use the same synchronous tools with the same names, arguments and delays.
Measurement
CPU and memory are sampled every 100 ms from outside each process with psutil, including import time. The model server runs in a separate process and is charged to neither framework.
Order
The benchmark runs A, B, B, A, each pass in a fresh process, and averages the two passes of each framework.

Known differences and limits

  • Defaults differ. CriogenAI streams the reply (stream: true) and LangChain requests a complete one (stream: false), which adds parsing work on the CriogenAI side. This compares defaults, not feature sets.
  • With realistic model and tool latency, both spend most of a run waiting, so median run time converges. The differences that remain are memory, CPU and behaviour under concurrent load.
  • One machine, one measurement per click. Repeat before drawing conclusions from small differences.

Run it locally

The server binds to 127.0.0.1 and accepts requests only from this site's pages. Set up the two Python environments once, then start it and reload this page; the source switches to Live.

python benches/compare/setup.py --only criogen   # once
python benches/compare/setup.py --only langgraph    # once
target/compare/venvs/criogen/bin/python playground/server.py   # Windows: Scripts/python.exe
# serves on http://127.0.0.1:4600; reload this page