JevLight
Traffic signal controller where Jev picks each intersection's next phase from a SUMO snapshot, with local fallbacks.
Overview
JevLight applies Jev to traffic signal control in SUMO simulation, following the observation and control conventions of the LLMLight and CoLLMLight research code. Each intersection's snapshot (queues, approaching vehicles by segment, waiting times) becomes the state, and a choice question asks which signal phase to run next, with the four phases as criteria. A speculative yes/no question about congestion is logged in the same request for analysis.
By default all active intersections are packed into one shared state with one question each, so the whole network decides in a single API call per control step. Empty junctions skip the API and use a local waiting-time ranking, and failed, rate-limited or low-confidence answers fall back to the previous signal or the local ranking. The client can talk to the official TypeSafe API, an MCP endpoint or a local vLLM-based /v1/systemone service, and a three.js visualiser is included. It is aimed at traffic-control researchers.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which phase should this intersection run next? | ETWT · NTST · ELWL · NLSL |
| Yes / no | Is this junction congested? | — |
How it works
- SUMO step produces per-intersection observations
- Active junctions are packed into one state with one phase question each
- Jev returns a phase, distribution and confidence per junction
- Answers below --min_confidence, failures or empty junctions fall back to previous signal or local ranking
- Metrics are recorded with ChatLight's evaluation code
Strengths
- One API call per control step for the whole network
- Explicit fallbacks keep the simulation running on errors
- Can run against a local Jev-style server instead of the hosted API
- Reuses established evaluation metrics for comparison
Caveats
- Simulation research, not a deployed traffic system
- No published results in the README excerpt
- Hosted mode needs a TypeSafe key
Getting started
Run python run_jevlight.py (mirrors run_LLMLight.py); scripts/serve_jev.sh starts a local Jev-style service.At a glance
- Type
- Project
- Status
- research
- Language
- Python
- Runtime
- SUMO simulation
- Has code
- yes
Use cases and integrations
How curated lists describe it
Jev-powered traffic signal control on CityFlow with structured phase and green-time decisions.
logicrw/awesome-jev-projectsJev-powered traffic signal control on CityFlow with structured phase and green-time decisions.
hellogumbo/awesome-jev
Frequently asked questions
What does Jev decide in JevLight?
The next signal phase for each intersection, from four phase options, plus a logged congestion yes/no.
What happens if the API fails?
The controller keeps the previous signal or uses a local waiting-time ranking.
Can I run it without TypeSafe?
Yes, it includes a local /v1/systemone service based on vLLM logit readout, or a mock.
Related projects
Three.js box steered by plain-language instructions: an LLM plans steps, Jev decides move, turn and jump in real time.
ProjectprototypeTypeScriptThree.js driving simulator with a fast reflex layer, a TTC safety brake and an optional Jev API strategy layer.
ProjectprototypeJavaScriptThree.js driving simulator where Jev picks among locally sampled steering-and-speed paths while code handles geometry and safety.
ProjectprototypeTypeScriptFixed-wing landing simulator and benchmark where Jev maps four Choice decisions to aircraft controls against humans, baselines and LLMs.
DemoprototypePythonSimulation where Jev picks which of two conflicting signal phases gets green at a real Hong Kong junction from live open sensor data.
ServiceprototypePythonSimulated Franka arm that follows plain-English goals by having Jev chain about 30 hardcoded motion primitives, one per step.
Agent skillprototypePython