I used Step-3.7-Flash-NVFP4 and my familiar framework to generate a restaurant reservation API and RBAC-aware admin system. Six roles ran in parallel, with local inference and measurement and no external APIs.

Task decomposition and dependency resolution were stable. It reached a roughly 70% working state quickly, then needed more repairs later, partly because of the Guard layer.

Video link: https://www.youtube.com/watch?v=L6ryJhd2EmA

Recent Groundwork: Generation Token Estimation and Stream Continuation

I used dwarfstar commits as a reference for token estimation and budget control. I moved BackendGenerationTokenController into internal/domain/agent and added stream continuation to resume generation cut by a length cap.

The previous session repeated XML/TOML parse-error repairs. Synthesizing a recovery point before the run degraded worked better than post-processing alone. dwarfstar was moving toward a DeepSeek-4-specific single model, while I prefer replaceable OSS models, but the problems overlap.

BackendGenerationTokenController does not send requests. It observes and returns four kinds of control information:

  • Watches OpenAI-compatible stream chunks and estimates generated completion tokens with the existing token estimator
  • Detects overrun against max_tokens/context-window limits
  • Returns control decisions such as continue / cutoff / repair-needed / terminal
  • Detects malformed tool arguments at tool-call finish time, including cases where usable content can be salvaged from thinking output

Prompt synthesis, continuation, repairs, final responses, and telemetry remain in the outer agent. The controller is a state machine that observes the stream and returns decisions.

I also adjusted dynamic sampling per role. Since stream continuation can now recover from a length cap, I lowered max_output_tokens, narrowed sampling, and reduced stalls in long reasoning/output. For tester, I used repetition_penalty 1.08 with lower temperature/top_p to reduce empty verification loops.

Setup

ItemValue
OrchestratorStep-3.7-Flash-NVFP4 on vLLM
FrameworkCustom Go (Gin) + Rust MCP tools
rolesorchestrator / planner / coder / tester / reviewer / integrator
TaskRestaurant Domain Spec
CPUAMD EPYC 9175F 16C
GPUNVIDIA RTX PRO 6000 Blackwell Max-Q 96GB x 2

The framework supports up to three models. This run used Step-3.7-Flash for both orchestrator and worker role sessions. Fewer models have tended to improve success and token cost in my use; I suspect differences in training distributions make shared context harder. Multiple models may fit loosely coupled roles or specialized sub-10B jobs through Rust Ort/ONNX.

The main vLLM runtime configuration was:

  Exec=/models/snapshots/36afbf6e15100cdc2d7a5b79d7e95d276ed33679 \
    --host 0.0.0.0 \
    --port 8000 \
    --served-model-name grandpa \
    --gpu-memory-utilization 0.92 \
    --tensor-parallel-size 2 \
    --max-num-seqs 8 \
    --kv-cache-dtype fp8 \
    --max-model-len 147456 \
    --disable-cascade-attn \
    --enable-expert-parallel \
    --trust-remote-code \
    --quantization modelopt \
    --reasoning-parser step3p5 \
    --tool-call-parser step3p5 \
    --enable-auto-tool-choice \
    --enable-expert-parallel \
    --async-scheduling
  

Grafana + Prometheus / Loki / PostgreSQL / Vector / Tempo / Alloy provide observation. Claude/Codex debug from the dashboards, and I use those findings in implementation.

vLLM Interval Benchmark

window endcompleted reqs in windowrunningPP tok/sTG tok/sKV usageprefix hit
11:39:14333242.7153.91.8%81.5%
11:39:2443140.7196.71.8%81.7%
11:39:342234.7201.11.5%81.7%
11:39:4422217.3154.61.5%81.8%

Aggregated:

metricavgmedianminmax
PP tok/s908.9179.034.73242.7
TG tok/s176.6175.7153.9201.1
Running2.52.523
Prefix hit81.7%81.7%81.5%81.8%

This is an seq=8 configuration, but it is close to the batch behavior I ran with a soft cap of 7.

Single-request measurements are separate, and the benchmark is included in the video description.

Video link: https://www.youtube.com/watch?v=NDhzjHW-2SM

Running the Session

Screen showing familiar aichat, an editor, generated file lists, and the Grafana Familiar Tool Calls dashboard during Restaurant Domain generation
Restaurant Domain generation in progress. The left side shows the familiar session and verification report, the center shows generated viewsets, and the right side shows Grafana Familiar Tool Calls with tool-call counts and failure rate.

Chat DAG: Conversation Shape

vector/loki displays the conversation DAG before datastore finalization. The flow user request -> orchestrator -> Scheduler Decisions -> Dependencies -> worker -> orchestrator shows which turn spawned each worker.

Familiar Chat DAG dashboard showing the conversation graph from user request through orchestrator and workers
Familiar Chat DAG. The user request passes through grandpa orchestrator, branches into coder/tester worker sessions, and returns to the orchestrator.

Orchestrator Decisions: Inside the Decisions

This dashboard breaks down orchestrator decisions.

Familiar Orchestrator Decisions dashboard showing orchestrator turns, planned worker calls, dependency edges, and recovery signals
Familiar Orchestrator Decisions. The depends_on scheduling graph shows dispatch, partial outcomes, blocked dependencies, and recovery signals.

Guard Calls: Blocking and Recovering from Unsafe Behavior

The system has a Guard layer that stops or redirects agent behavior at runtime. In this session there were 40 Guard Calls: 11 blocking, 29 non-blocking, with a Block Rate of 27.5%.

Actioncallsblocking
downgrade_fulfillment250
reject_tool_call77
record_proposed_path40
reject_unowned_write44
Familiar Guard Calls dashboard showing Guard Calls 40, Blocking 11, Non-blocking 29, and Block Rate 27.5%
Familiar Guard Calls. downgrade_fulfillment does not block, while reject_tool_call and reject_unowned_write do block, showing the design split by guard action.

MOLsEV: Prompt Quality and Role Synergy

Familiar MOLsEV dashboard showing Attempt-1 structured output 100%, Contract Acceptance 83.3%, and Synergy Rate 94.4%
Familiar MOLsEV. Step-3.7-Flash is stable on first-attempt structured output, while contract acceptance still reflects the later repair loops.

Result

It took about one hour to work fully and about 24 minutes to reach roughly 70%. Final repairs took much of the time.

Out of seven deliverables, about two passed command-based startup without manual edits.

  • Django admin worked as-is
  • The API worked
  • api/docs, the Swagger UI, was generated with auth and v1 resources listed
  • Seed data was loaded

The remaining five needed light fixes. Opening api/docs showed realistic domain resources such as auth/token, reservations, reservation-holds, waitlist, availability/report, and cover-forecast/report, including both CRUD and report-style endpoints.

Swagger UI for the Restaurant Domain showing auth token, reservation-holds, reservations, waitlist, and other API resources
Generated `/api/docs`. It includes auth, reservation holds, reservations, waitlist, availability report, and cover forecast report resources that fit the restaurant reservation domain.

Notes

Like Step-3.5, Step-3.7 felt suited to orchestration. Attempt-1 structured output was 100%. TG averaged 176.6 tok/s, with median 175.7 and range 153.9-201.1. Prefix hits stayed at 81.5-81.8%. The context manager retained roughly 70-90%, and ctxMgr kept cache near 80% across roles.

In my environment, MTP did not work with NVFP4. SGLang with cu13 also failed because it only supported up to SM100. I tried GGUF through ik_llama as well, but crashes and output quality were unstable.

Claude/Codex handled about 70% of the framework and dashboard development, mainly design and outline implementation. I turned ideas and dashboard findings into experiments and changes. For agent-assisted business application development, having this observation layer first made debugging easier.