Skip to content

4. Data Flow Through System

graph TD
    Start["User/SUMO<br/>Request Arrives"]

    Start -->|HTTP Request| ParseReq["Parse Request<br/>Method: GET/POST<br/>Endpoint: /api/traffic/action"]

    ParseReq -->|GET /action| AutoGen["Generate Dummy<br/>Observations<br/>10 random floats"]
    ParseReq -->|POST /action| ValidateObs["Validate<br/>Custom Observations<br/>Must be 10 floats"]

    ValidateObs -->|Invalid| ReturnError400["Return 400<br/>Bad Request"]
    ValidateObs -->|Valid| FwdPython["Forward to<br/>Python Service"]

    AutoGen --> CreatePayload["Create Payload<br/>{obs_data: [...]}"]
    CreatePayload --> FwdPython

    FwdPython -->|HTTP POST| PythonReceive["Python Service<br/>Receives Request"]

    PythonReceive -->|Check Model| ModelLoaded{"Model<br/>Loaded?"}

    ModelLoaded -->|No| LoadModel["Load PPO Model<br/>from model.zip"]
    ModelLoaded -->|Yes| UseModel["Use Existing Model"]

    LoadModel --> Predict
    UseModel --> Predict["Call Model<br/>model.predict"]

    Predict -->|Process| Forward["Forward Pass<br/>Through Neural Network"]
    Forward --> Output["Get Output<br/>Action: 0-3"]

    Output -->|Return| ResponsePython["Python Response<br/>{action: n}"]

    ResponsePython -->|HTTP Response| JavaGateway["Java Gateway<br/>Receives Response"]

    JavaGateway -->|Map Action| MapSignal["Map Action to Signal<br/>0→RED, 1→YELLOW<br/>2→GREEN, 3→GREEN_EXTENDED"]

    MapSignal --> BuildResp["Build JSON Response<br/>{predictedAction, signalState,<br/>timestamp, status}"]

    BuildResp --> ReturnSuccess["Return 200<br/>Success Response"]

    ReturnSuccess --> Client["Response to Client"]
    ReturnError400 --> Client

    style Start fill:#e3f2fd
    style AutoGen fill:#fff3e0
    style ValidateObs fill:#fff3e0
    style FwdPython fill:#f3e5f5
    style Forward fill:#fce4ec
    style Output fill:#fce4ec
    style MapSignal fill:#fff3e0
    style Client fill:#e8f5e9