Updates, big updates

incident_correlator.py — full rewrite: always runs on every call, fetches all active incidents cross-type, fast path collects all talkgroup matches and disambiguates by unit/vehicle overlap → location proximity → embedding, new location proximity path, slow path requires location corroboration, "Auto:" stripped from titles, "auto-generated" tag added, units/vehicles now accumulated on update
intelligence.py — resolved field in GPT schema, returned as 5th value
upload.py — both pipelines unpack 5-tuple, always call correlate, auto-resolve on resolved=True
summarizer.py — stale sweep runs each tick, resolves incidents idle for 90+ minutes
config.py — correlation_window_hours=2, embedding_similarity_threshold=0.93, location_proximity_km=0.5, incident_auto_resolve_minutes=90
This commit is contained in:
Logan
2026-04-19 22:53:53 -04:00
parent f9d4fcbc39
commit ba43796c51
9 changed files with 539 additions and 293 deletions
+1 -1
View File
@@ -121,7 +121,7 @@ export function CallRow({ call, systemName, isAdmin }: Props) {
{call.incident_id && (
<p className="text-xs font-mono text-indigo-400">
Incident:{" "}
<a href="/incidents" className="underline hover:text-indigo-300">
<a href={`/incidents/${call.incident_id}`} className="underline hover:text-indigo-300">
{call.incident_id.slice(0, 8)}
</a>
</p>
+13 -2
View File
@@ -67,12 +67,23 @@ export default function MapView({ nodes, activeCalls, incidents = [] }: Props) {
);
const center: [number, number] =
nodes.length > 0 ? [nodes[0].lat, nodes[0].lon] : [39.5, -98.35];
nodes.length > 0
? [nodes[0].lat, nodes[0].lon]
: plottedIncidents.length > 0
? plottedIncidents[0].pos
: [39.5, -98.35];
const zoom =
nodes.length > 0
? 10
: plottedIncidents.length > 0
? 14
: 4;
return (
<MapContainer
center={center}
zoom={nodes.length > 0 ? 10 : 4}
zoom={zoom}
className="w-full h-full rounded-lg"
style={{ background: "#111827" }}
>