<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abinivesh M</title>
    <description>The latest articles on DEV Community by Abinivesh M (@abinivesh-m).</description>
    <link>https://dev.to/abinivesh-m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4079379%2Ffc35a1fc-9733-4d39-91a2-f2fb21d0ae04.jpg</url>
      <title>DEV Community: Abinivesh M</title>
      <link>https://dev.to/abinivesh-m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abinivesh-m"/>
    <language>en</language>
    <item>
      <title>Your On-Call Agent Needs Hindsight, Not a Bigger Model</title>
      <dc:creator>Abinivesh M</dc:creator>
      <pubDate>Thu, 05 Nov 2026 15:34:56 +0000</pubDate>
      <link>https://dev.to/abinivesh-m/your-on-call-agent-needs-hindsight-not-a-bigger-model-163</link>
      <guid>https://dev.to/abinivesh-m/your-on-call-agent-needs-hindsight-not-a-bigger-model-163</guid>
      <description>&lt;p&gt;&lt;strong&gt;Description: An on-call SRE agent is only as good as the incidents it can recall. Structured retention, evidence-backed ranking, and a contradiction guard built on Hindsight.&lt;br&gt;
It is 02:14. Checkout p99 has gone from 400 ms to 3.9 seconds, the payment provider is retrying, and an alert is burning through the error budget.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The engineer who fixed this exact failure six weeks ago is asleep. The migration that solved it was applied by hand and never written down. So the person on call searches, guesses, and restarts the pods.&lt;/p&gt;

&lt;p&gt;The restart works for forty minutes.&lt;/p&gt;

&lt;p&gt;I kept coming back to that gap. The model is not the bottleneck. A good model has read every runbook and every public postmortem. What it does not have is &lt;em&gt;your&lt;/em&gt; history: this failure, on this service, with these signals, fixed in six minutes by a specific person, and whether the fix held.&lt;/p&gt;

&lt;p&gt;I built Déjà Vu to test that claim seriously — an on-call SRE agent whose entire value comes from remembering incidents, and whose memory layer is &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the system actually does
&lt;/h2&gt;

&lt;p&gt;Déjà Vu watches an alert queue. When one fires, it builds a query from the service, title, body and signal fingerprint, recalls candidates from a Hindsight bank called &lt;code&gt;dejavu-oncall&lt;/code&gt;, re-ranks them, and answers with evidence. One bank per team: your incidents only, never another team's.&lt;/p&gt;

&lt;p&gt;The answer is not a paragraph. It is a hypothesis plus receipts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;INC-1006&lt;/code&gt; — missing composite index on &lt;code&gt;orders(created_at, status)&lt;/code&gt; — 6 minutes — Priya Raman — resolved&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;INC-1001&lt;/code&gt; — same cause class — resolved&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;INC-1002&lt;/code&gt; — same class — resolved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same alert, memory off: &lt;em&gt;"generic triage, restart the affected pods"&lt;/em&gt;, 31% confidence, no incident, no owner, no fix time. Memory on: the index migration, 97% confidence, the receipts, a named engineer. The second answer is not smarter. It is informed.&lt;/p&gt;
&lt;h2&gt;
  
  
  Making memory the actual product
&lt;/h2&gt;

&lt;p&gt;The naive version of this is a vector store full of postmortems with a prompt that says "use the context below." It demos well and fails quietly, for three reasons.&lt;/p&gt;

&lt;p&gt;It retrieves paragraphs, not incidents — so nothing is auditable. It treats similarity as identity — so a look-alike incident with a different cause gets recommended with full confidence. And it never learns from what happened after the fix.&lt;/p&gt;

&lt;p&gt;So the memory is structured, not chunked. One document per incident, with metadata that survives retrieval:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;retain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;bank_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dejavu-oncall&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                       &lt;span class="c1"&gt;# symptom, signals, cause, fix, time, outcome
&lt;/span&gt;    &lt;span class="n"&gt;document_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;severity&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; incident on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;root_cause&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outcome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outcome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix_minutes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fix_minutes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;engineer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;engineer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;severity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;severity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;severity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outcome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That metadata is the difference between a receipt and a rumour. When the agent says "six minutes, Priya Raman, resolved," those values came from memory, not the model's imagination.&lt;/p&gt;

&lt;p&gt;Recall is deliberate: the alert's fingerprint becomes the query, Hindsight returns candidates by meaning, and the application re-ranks them — retrieval similarity and operational similarity are not the same thing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;similarity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;signal_similarity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.45&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;text_similarity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;coverage&lt;/span&gt;
&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.82&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;similarity&lt;/span&gt;
&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;support&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# how many incidents back this cause
&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;success_rate&lt;/span&gt;               &lt;span class="c1"&gt;# did the fix actually hold
&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mf"&gt;0.02&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;recency&lt;/span&gt;                    &lt;span class="c1"&gt;# recent precedent wins ties
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;stale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;score&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="mf"&gt;0.06&lt;/span&gt;                          &lt;span class="c1"&gt;# flag it, do not trust it
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fifty percent of the decision is the signal fingerprint — the numbers, not the prose. &lt;code&gt;p99_ms 3900&lt;/code&gt; against &lt;code&gt;3800&lt;/code&gt;. &lt;code&gt;pool_wait_ms 1240&lt;/code&gt; against &lt;code&gt;1180&lt;/code&gt;. &lt;code&gt;cert_age_days 2&lt;/code&gt; against &lt;code&gt;61&lt;/code&gt;. That last one is why a certificate incident gets ruled out even when the text looks identical.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that matters: the contradiction guard
&lt;/h2&gt;

&lt;p&gt;Two incidents can share every word and need opposite fixes. Incident &lt;code&gt;INC-1009&lt;/code&gt; has the same service, the same pool timeout, the same graph shape, and 53% similarity to the live alert. But its cause was a pool size capped during a config rollout, and its fix was a config change plus a redeploy — not an index.&lt;/p&gt;

&lt;p&gt;Before committing, Déjà Vu checks the runner-up failure class. If a different cause is close, it surfaces the look-alike explicitly: the incident ID, the similarity, the one signal that separates them, and the different fix it required.&lt;/p&gt;

&lt;p&gt;This is the failure mode of every naive retrieval system. A text search returns the nearest paragraph. The agent has to tell you what it ruled out, and why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement, not a claim
&lt;/h2&gt;

&lt;p&gt;Every memory product says it improves. Almost none measure it, because honest measurement is uncomfortable.&lt;/p&gt;

&lt;p&gt;The repo includes a replay that walks the incident corpus in chronological order. At each incident, the agent may only use memories that existed &lt;strong&gt;before&lt;/strong&gt; that timestamp. No peeking. No LLM in the grading loop.&lt;/p&gt;

&lt;p&gt;Across 22 graded incidents: &lt;strong&gt;50% top-1&lt;/strong&gt;, &lt;strong&gt;64% top-3&lt;/strong&gt;. First six graded alerts: &lt;strong&gt;33%&lt;/strong&gt;. Last six: &lt;strong&gt;83%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That pair is the thesis. The agent is measurably better at the end of the quarter than at the start, because it lived through the quarter. The Learning screen plots every graded incident, including the ones it got wrong. A memory system that only shows its wins is a marketing surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop has to close
&lt;/h2&gt;

&lt;p&gt;Resolving an alert is not the end of the interaction. It is the write. When an engineer resolves an incident, Déjà Vu stores a postmortem, retains it with &lt;code&gt;source: live&lt;/code&gt;, and marks the alert closed. Fire the same fingerprint again and the first receipt is the incident that was just created, answered in milliseconds.&lt;/p&gt;

&lt;p&gt;That closed loop is also where a second agent earns its place. In the Band room, &lt;code&gt;DejaVu-Recall&lt;/code&gt; posts the hypothesis and receipts, then &lt;code&gt;DejaVu-Critic&lt;/code&gt; answers the recall — not the alert — with four deterministic checks: at least two receipts, no stale precedent, precedent fixes that held, confidence above threshold. It can block the fix from ever reaching a human.&lt;/p&gt;

&lt;p&gt;I wrote the critic as code, not a model call: a reviewer should check evidence, not generate more of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got wrong
&lt;/h2&gt;

&lt;p&gt;Three things, in order of embarrassment.&lt;/p&gt;

&lt;p&gt;First, I scoped recall to the same service. That hid the lesson: a missing index on &lt;code&gt;payments-api&lt;/code&gt; is the same failure as one on &lt;code&gt;checkout-api&lt;/code&gt;. Cross-service transfer drove most of the late-corpus accuracy.&lt;/p&gt;

&lt;p&gt;Second, I graded at string level before switching to failure classes. "Missing index on orders" and "missing index on settlement_date" are different strings and the same lesson. String-level grading made the agent look worse than it was.&lt;/p&gt;

&lt;p&gt;Third, I trusted retrieval scores for too long. The signal fingerprint is weighted above text on purpose now. The text is how you find candidates; the numbers are how you decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it still breaks
&lt;/h2&gt;

&lt;p&gt;First-time failures cannot be recalled. If the team has never seen it, memory has nothing, and the Learning screen shows exactly those incidents as misses.&lt;/p&gt;

&lt;p&gt;Per-service histories hold eight to ten incidents, so cross-service transfer helps but is not evidence of production-scale performance. The corpus is synthetic — real incident data is confidential — and the weights were tuned on it. A production deployment needs re-tuning against real signals and a plan for the long tail of incidents that happen once.&lt;/p&gt;

&lt;p&gt;And memory can be wrong. Precedent is not proof. That is why every answer carries confidence, receipts, and a visible trace of which path served it. When Hindsight is unreachable, the app serves from a BM25 index over the same SQLite mirror and the header badge changes from &lt;code&gt;HINDSIGHT&lt;/code&gt; to &lt;code&gt;BM25 FALLBACK&lt;/code&gt;. A demo should not die because a service did not start, but it should never pretend which path answered.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I took away
&lt;/h2&gt;

&lt;p&gt;The next improvement in on-call tooling is not a bigger context window. It is a memory that is specific to your systems, weighted by what actually worked, honest about what it does not know, and measured against its own past.&lt;/p&gt;

&lt;p&gt;Hindsight made the memory layer the easy part: a bank, a retain with real metadata, a recall that returns meaning. The hard part was deciding what counts as the same failure — and being willing to show the moment the agent gets it wrong.&lt;/p&gt;

&lt;p&gt;At 2 a.m., the question is not "what does a good SRE do?" It is "what did we do last time, did it work, and who can I ask?"&lt;/p&gt;

&lt;p&gt;If you are building agents with memory, start with &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight's open-source memory engine&lt;/a&gt; and read the &lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;Hindsight documentation&lt;/a&gt;. It is also worth getting clear on &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;what agent memory actually means&lt;/a&gt; before you design a schema you will regret.&lt;/p&gt;

&lt;p&gt;Running agent: &lt;a href="https://dejavu-tau.vercel.app" rel="noopener noreferrer"&gt;dejavu-tau.vercel.app&lt;/a&gt;. Source, including the replay harness: &lt;a href="https://github.com/abinivesh-m/dejavu" rel="noopener noreferrer"&gt;github.com/abinivesh-m/dejavu&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>"RoadSOS AI: An AI-Powered Intelligent Road Safety and Emergency Response System"</title>
      <dc:creator>Abinivesh M</dc:creator>
      <pubDate>Sat, 15 Aug 2026 18:38:02 +0000</pubDate>
      <link>https://dev.to/abinivesh-m/roadsos-ai-an-ai-powered-intelligent-road-safety-and-emergency-response-system-125o</link>
      <guid>https://dev.to/abinivesh-m/roadsos-ai-an-ai-powered-intelligent-road-safety-and-emergency-response-system-125o</guid>
      <description>&lt;h1&gt;
  
  
  RoadSOS AI: An AI-Powered Intelligent Road Safety and Emergency Response System
&lt;/h1&gt;

&lt;p&gt;Technical project documentation — SmartAIthon 2026&lt;/p&gt;

&lt;p&gt;This write-up is the deeper technical companion to our SmartAIthon presentation deck. Where the deck says "we detect drowsiness and phone usage," this document explains how — models, pipeline, data, performance, and the parts that are still in progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Overview
&lt;/h2&gt;

&lt;p&gt;RoadSOS AI is a laptop-based prototype that uses computer vision to monitor a driver in real time, catch dangerous behaviour before it turns into a crash, and — when an accident does happen — kick off an emergency response workflow.&lt;/p&gt;

&lt;p&gt;Most road-safety tools focus on a single moment: either they warn you before something goes wrong, or they react after a crash. RoadSOS tries to cover both ends in one pipeline: Predict → Prevent → Protect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-line honest description:&lt;/strong&gt; "RoadSOS AI is currently a laptop-based AI road safety prototype that uses computer vision to detect driver distraction and drowsiness, calculates real-time driving risk, and demonstrates an emergency SOS workflow for accident situations."&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Problem Statement
&lt;/h2&gt;

&lt;p&gt;Road accidents are commonly linked to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Driver drowsiness and fatigue&lt;/li&gt;
&lt;li&gt;Mobile phone usage while driving&lt;/li&gt;
&lt;li&gt;General driver distraction&lt;/li&gt;
&lt;li&gt;Delayed emergency response after a crash has already happened&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most existing tools address only one of these stages in isolation — a drowsiness alarm, or a crash-detection black box, or a manual SOS button. There's a gap for a system that monitors, warns, assesses risk holistically, and supports the emergency response step.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. System Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1x4y0jg2b72240eive2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv1x4y0jg2b72240eive2.png" alt=" " width="800" height="1059"&gt;&lt;/a&gt;&lt;br&gt;
Everything currently runs on a single laptop with a connected webcam — there is no external hardware in the loop yet (see §16, Limitations).&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Mobile Phone Usage Detection
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Approach:&lt;/strong&gt; YOLOv8 (nano variant, for real-time inference on CPU) run on each captured frame to determine whether the driver is holding or using a phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens on detection:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A visual warning is shown on the dashboard&lt;/li&gt;
&lt;li&gt;A voice alert is triggered ("Mobile usage detected. Focus on the road.")&lt;/li&gt;
&lt;li&gt;The event is logged&lt;/li&gt;
&lt;li&gt;The driver's risk score increases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Drowsiness Detection
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Approach:&lt;/strong&gt; MediaPipe Face Mesh (468-point facial landmark model) tracks the driver's eyes, and the system computes the Eye Aspect Ratio (EAR) to determine whether the eyes have been closed for an abnormal duration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MediaPipe solution used:&lt;/strong&gt; Face Mesh / Face Landmarker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EAR formula:&lt;/strong&gt; standard six-point eye landmark ratio — vertical eye distances over horizontal eye distance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EAR threshold used to flag drowsiness:&lt;/strong&gt; 0.25&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consecutive-frame requirement:&lt;/strong&gt; 20 consecutive frames below threshold (roughly 0.8 seconds at ~25 FPS), to avoid false positives from a single blink&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference speed / FPS:&lt;/strong&gt; ~18–22 FPS on a standard laptop webcam feed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What happens on detection:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A warning is displayed on the dashboard&lt;/li&gt;
&lt;li&gt;A voice alert is triggered ("Drowsiness detected. Please take a break.")&lt;/li&gt;
&lt;li&gt;The event is logged&lt;/li&gt;
&lt;li&gt;The driver's risk score increases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Real-Time Risk Engine
&lt;/h2&gt;

&lt;p&gt;Rather than treating each unsafe event independently, RoadSOS combines them into a single real-time risk score. The intuition: a driver using a phone while also showing signs of drowsiness is more dangerous than either signal alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Current inputs to the risk score:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone-usage alert status (on/off, from YOLO)&lt;/li&gt;
&lt;li&gt;Drowsiness alert status (on/off, from EAR/MediaPipe)&lt;/li&gt;
&lt;li&gt;Simulated vehicle speed (keyboard-controlled in this prototype)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scoring logic:&lt;/strong&gt; A weighted-sum, rule-based model. Each active signal contributes a fixed weight to a 0–100 risk score:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone usage detected: +40&lt;/li&gt;
&lt;li&gt;Drowsiness detected: +40&lt;/li&gt;
&lt;li&gt;Speed factor (scaled from simulated speed, capped): up to +20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Risk bands: &lt;strong&gt;0–30 = Low&lt;/strong&gt;, &lt;strong&gt;31–60 = Medium&lt;/strong&gt;, &lt;strong&gt;61–100 = High&lt;/strong&gt;. Crossing into Medium/High triggers stronger dashboard highlighting and more frequent voice alerts.&lt;/p&gt;

&lt;p&gt;The resulting score is displayed live on the dashboard and drives downstream alerting.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Speed Simulation
&lt;/h2&gt;

&lt;p&gt;Since the current prototype runs entirely on a laptop with no vehicle interface, speed is simulated via keyboard input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;W&lt;/strong&gt; — increases simulated speed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;S&lt;/strong&gt; — decreases simulated speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This value feeds into the Risk Engine exactly as a real speed sensor reading would, which makes it straightforward to swap in a real speed source later (e.g. OBD-II, GPS-derived speed, or an accelerometer) without re-architecting the risk logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Accident Simulation and Emergency (SOS) Workflow
&lt;/h2&gt;

&lt;p&gt;The full emergency response chain is implemented and demonstrable end-to-end, with the accident trigger itself simulated for the laptop demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;X&lt;/strong&gt; — simulates an accident event&lt;/li&gt;
&lt;li&gt;On trigger, the system starts an SOS countdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C&lt;/strong&gt; — cancels the emergency during the countdown window&lt;/li&gt;
&lt;li&gt;If not cancelled in time, the SOS workflow fires&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;On SOS trigger, the system:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updates the dashboard to reflect accident status&lt;/li&gt;
&lt;li&gt;Logs the accident event&lt;/li&gt;
&lt;li&gt;Invokes the SOS workflow&lt;/li&gt;
&lt;li&gt;Attempts to use the GPS/emergency modules&lt;/li&gt;
&lt;li&gt;Announces (via voice) that emergency contacts have been notified&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture modules already in code:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPSManager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SOSManager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AccidentManager&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Intended full workflow:&lt;/strong&gt; Accident detected → SOS countdown → cancellation opportunity → GPS location obtained → SOS sent to emergency contacts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honesty note for judges:&lt;/strong&gt; in the current laptop demo, the accident event itself is simulated via keypress, not derived from real crash-sensor data (e.g. an IMU/accelerometer threshold). The GPS/SOS software architecture exists and runs, but real-world GPS/GSM hardware integration is future work (§16, §15).&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Dashboard
&lt;/h2&gt;

&lt;p&gt;A real-time OpenCV-based dashboard acts as the central monitoring interface, showing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live camera feed&lt;/li&gt;
&lt;li&gt;FPS&lt;/li&gt;
&lt;li&gt;Simulated speed&lt;/li&gt;
&lt;li&gt;Driver status&lt;/li&gt;
&lt;li&gt;Phone-use detection status&lt;/li&gt;
&lt;li&gt;Drowsiness info + EAR value&lt;/li&gt;
&lt;li&gt;Accident confidence&lt;/li&gt;
&lt;li&gt;Risk score&lt;/li&gt;
&lt;li&gt;Emergency countdown&lt;/li&gt;
&lt;li&gt;SOS-sent status&lt;/li&gt;
&lt;li&gt;Real-time safety messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10. Voice Alert System
&lt;/h2&gt;

&lt;p&gt;Alerts are delivered asynchronously so the driver isn't required to keep looking at the screen. Example alerts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Mobile usage detected. Focus on the road."&lt;/li&gt;
&lt;li&gt;"Drowsiness detected. Please take a break."&lt;/li&gt;
&lt;li&gt;"Accident detected. Sending emergency SOS."&lt;/li&gt;
&lt;li&gt;"Emergency contacts have been notified."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;TTS engine used:&lt;/strong&gt; pyttsx3 (offline text-to-speech — chosen for low latency and no internet dependency, important for a safety-critical alert path).&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Event Logging &amp;amp; Analytics
&lt;/h2&gt;

&lt;p&gt;The system logs safety-relevant events for later analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone detections&lt;/li&gt;
&lt;li&gt;Drowsiness detections&lt;/li&gt;
&lt;li&gt;Accident events&lt;/li&gt;
&lt;li&gt;Overspeed events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Storage format:&lt;/strong&gt; CSV logs (timestamp, event type, confidence score, risk score at time of event).&lt;/p&gt;

&lt;p&gt;This logging layer is the foundation for planned features like trip history, driver behaviour reports, safety analytics, and (eventually) fleet-level monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Technology Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Object detection&lt;/td&gt;
&lt;td&gt;YOLOv8 (nano)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Facial landmarks / drowsiness&lt;/td&gt;
&lt;td&gt;MediaPipe Face Mesh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Computer vision / dashboard&lt;/td&gt;
&lt;td&gt;OpenCV&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Voice alerts&lt;/td&gt;
&lt;td&gt;pyttsx3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System modules&lt;/td&gt;
&lt;td&gt;Risk Engine, Accident Manager, SOS Manager, GPS Manager, Audio Manager, Analytics Manager, Event Logger&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;Custom OpenCV dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware (current)&lt;/td&gt;
&lt;td&gt;Laptop + USB webcam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware (planned)&lt;/td&gt;
&lt;td&gt;Raspberry Pi 5, ESP32, MPU6050, GPS module, GSM/SMS module&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  13. Current Implementation Status
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Built and working:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live camera processing&lt;/li&gt;
&lt;li&gt;YOLO-based phone detection&lt;/li&gt;
&lt;li&gt;MediaPipe-based drowsiness detection (EAR monitoring)&lt;/li&gt;
&lt;li&gt;Real-time risk scoring&lt;/li&gt;
&lt;li&gt;Voice alerts&lt;/li&gt;
&lt;li&gt;Interactive OpenCV dashboard&lt;/li&gt;
&lt;li&gt;Simulated speed input&lt;/li&gt;
&lt;li&gt;Simulated accident trigger with SOS countdown and cancellation&lt;/li&gt;
&lt;li&gt;Accident confidence display&lt;/li&gt;
&lt;li&gt;Event logging and analytics counters&lt;/li&gt;
&lt;li&gt;GPS/SOS software architecture (modules exist and run in simulation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Not yet completed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully integrated, automatic hardware-based accident detection (no IMU/accelerometer trigger yet)&lt;/li&gt;
&lt;li&gt;Real vehicle speed input (currently keyboard-simulated)&lt;/li&gt;
&lt;li&gt;Fully validated GPS location integration in the field&lt;/li&gt;
&lt;li&gt;Reliable GSM/SMS hardware integration&lt;/li&gt;
&lt;li&gt;Real-world crash-data testing/validation&lt;/li&gt;
&lt;li&gt;Mobile application&lt;/li&gt;
&lt;li&gt;Fleet dashboard&lt;/li&gt;
&lt;li&gt;Personalized AI risk model&lt;/li&gt;
&lt;li&gt;Automatic near-miss detection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  14. Cost Analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Current prototype (software-only, laptop-based):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YOLO, MediaPipe, OpenCV — open-source, ₹0 licensing cost&lt;/li&gt;
&lt;li&gt;Runs on an existing laptop + standard USB webcam, no special hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Estimated future embedded hardware (per unit):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Estimated Cost (₹)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 microcontroller&lt;/td&gt;
&lt;td&gt;300–500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MPU6050 accelerometer/gyroscope&lt;/td&gt;
&lt;td&gt;150–250&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPS module (e.g. NEO-6M)&lt;/td&gt;
&lt;td&gt;500–700&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GSM/SMS module (e.g. SIM800L)&lt;/td&gt;
&lt;td&gt;600–900&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sensor subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~1,500–2,500&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raspberry Pi 5 (8GB)&lt;/td&gt;
&lt;td&gt;8,500–9,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active cooler + Pi Camera v3&lt;/td&gt;
&lt;td&gt;2,800–3,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MicroSD (32GB A2) + power adapter&lt;/td&gt;
&lt;td&gt;1,200–1,600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pi 5 subtotal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~11,000–14,500&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Estimated total per unit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~13,000–17,500&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are component-price estimates for a proposed embedded version, not figures from a shipped product — further cost optimisation and real-world benchmarking are needed before any commercial deployment claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Roadmap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Phase 1 — Hardware Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESP32 + MPU6050 for automatic crash detection&lt;/li&gt;
&lt;li&gt;Real GPS location tracking&lt;/li&gt;
&lt;li&gt;GSM/SMS-based emergency alerts&lt;/li&gt;
&lt;li&gt;Real vehicle speed input (replacing keyboard simulation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 2 — Intelligence&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Near-miss detection in addition to accident detection&lt;/li&gt;
&lt;li&gt;Personalized, AI-driven driver risk modelling over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 3 — Scale&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Companion mobile application for drivers and emergency contacts&lt;/li&gt;
&lt;li&gt;Fleet management dashboard for organisations&lt;/li&gt;
&lt;li&gt;Real-world testing and validation with crash data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  16. Limitations (In Our Own Words)
&lt;/h2&gt;

&lt;p&gt;We'd rather be upfront about this than have it discovered during Q&amp;amp;A:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The accident trigger in the current demo is a keypress, not a sensor reading. It demonstrates the workflow, not automatic crash detection.&lt;/li&gt;
&lt;li&gt;Vehicle speed is keyboard-simulated, not read from a real vehicle or GPS.&lt;/li&gt;
&lt;li&gt;GPS/GSM modules exist in code (GPSManager, class structure ready) but are not yet wired to working hardware and tested in the field.&lt;/li&gt;
&lt;li&gt;No real-world crash dataset has been used to validate accident-confidence logic.&lt;/li&gt;
&lt;li&gt;Detection accuracy numbers (mAP, FPS, false-positive rate) are not yet benchmarked and published — we're reporting the architecture honestly rather than citing numbers we haven't measured.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  17. Conclusion
&lt;/h2&gt;

&lt;p&gt;RoadSOS AI demonstrates how computer vision and a simple risk-scoring approach can move road safety earlier in the timeline — from "respond after a crash" to "warn before it happens" — while still keeping a working emergency-response path for when prevention isn't enough. The current MVP proves out real-time driver monitoring, phone and drowsiness detection, risk assessment, preventive alerts, and an SOS workflow, all as a laptop-based prototype. The next milestone is moving that logic onto embedded hardware and validating it against real-world data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RoadSOS AI — Predict. Prevent. Protect.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written for SmartAIthon 2026, Round 2 submission. This document is intended to accompany, not duplicate, the presentation deck — it goes into implementation depth for judges evaluating technical merit.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>software</category>
    </item>
  </channel>
</rss>
