diff --git a/headroom/__init__.py b/headroom/__init__.py index cfd774d6c..fedca9f29 100644 --- a/headroom/__init__.py +++ b/headroom/__init__.py @@ -153,7 +153,7 @@ from .transforms import ( TransformPipeline, ) -__version__ = "0.5.11" +__version__ = "0.5.12" __all__ = [ # Main client diff --git a/headroom/telemetry/beacon.py b/headroom/telemetry/beacon.py index b093e3c71..e47ce902e 100644 --- a/headroom/telemetry/beacon.py +++ b/headroom/telemetry/beacon.py @@ -32,7 +32,7 @@ _SUPABASE_KEY = ".".join( "h_C6dLQKa8BVc3upgEvulR4E0K4eiEViyddRMIylKjU", ] ) -_TABLE = "proxy_telemetry" +_TABLE = "proxy_telemetry_v2" _ENDPOINT = f"{_SUPABASE_URL}/rest/v1/{_TABLE}" # Report every 5 minutes diff --git a/pyproject.toml b/pyproject.toml index b514c70cf..f5bd3caf2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "headroom-ai" -version = "0.5.11" +version = "0.5.12" description = "The Context Optimization Layer for LLM Applications - Cut costs by 50-90%" readme = "README.md" license = "Apache-2.0" diff --git a/sql/create_proxy_telemetry_v2.sql b/sql/create_proxy_telemetry_v2.sql new file mode 100644 index 000000000..18efdcbbb --- /dev/null +++ b/sql/create_proxy_telemetry_v2.sql @@ -0,0 +1,70 @@ +-- Supabase SQL: Create proxy_telemetry_v2 table +-- Run this in the Supabase SQL Editor (https://supabase.com/dashboard → SQL Editor) +-- This table matches every field the beacon code writes in headroom/telemetry/beacon.py + +CREATE TABLE IF NOT EXISTS proxy_telemetry_v2 ( + id uuid DEFAULT gen_random_uuid() PRIMARY KEY, + created_at timestamptz DEFAULT now() NOT NULL, + + -- Core identity (always present) + session_id text NOT NULL, + instance_id text, + headroom_version text, + python_version text, + os text, + sdk text, + backend text, + session_minutes integer, + + -- Effectiveness metrics + tokens_saved bigint, + requests integer, + compression_percent real, + cache_hit_rate real, + cost_saved_usd real, + cache_saved_usd real, + models_used jsonb, + + -- Performance overhead + overhead_avg_ms real, + overhead_max_ms real, + + -- TTFB + ttfb_avg_ms real, + + -- Pipeline timing (JSONB: {transform_name: avg_ms}) + pipeline_timing jsonb, + + -- Request patterns + avg_tokens_before integer, + avg_tokens_after integer, + + -- Compression cache + compression_cache jsonb, + + -- CCR usage + ccr jsonb, + + -- Waste signals + waste_signals jsonb +); + +-- Index for querying by session and time +CREATE INDEX IF NOT EXISTS idx_ptv2_session_id ON proxy_telemetry_v2(session_id); +CREATE INDEX IF NOT EXISTS idx_ptv2_created_at ON proxy_telemetry_v2(created_at DESC); +CREATE INDEX IF NOT EXISTS idx_ptv2_version ON proxy_telemetry_v2(headroom_version); + +-- Enable Row Level Security +ALTER TABLE proxy_telemetry_v2 ENABLE ROW LEVEL SECURITY; + +-- RLS policies: anon can INSERT (telemetry beacon) and SELECT (for debugging) +CREATE POLICY "anon_insert" ON proxy_telemetry_v2 + FOR INSERT TO anon + WITH CHECK (true); + +CREATE POLICY "anon_select" ON proxy_telemetry_v2 + FOR SELECT TO anon + USING (true); + +-- Grant permissions to anon role +GRANT INSERT, SELECT ON proxy_telemetry_v2 TO anon;