RAJAWAT's picture
deploy: clean backend code and config deployment to Hugging Face
25259b5
Raw
History Blame Contribute Delete
3.59 kB
-- ==============================================================================
-- SQL Schema Setup - Cognitive Voice Intelligence Platform
-- Target: PostgreSQL 15+
-- ==============================================================================
-- Enable UUID extension if not active
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- 1. Sessions Table
CREATE TABLE IF NOT EXISTS sessions (
session_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
subject_reference VARCHAR(100) NOT NULL,
clinician_id VARCHAR(100) NULL,
status VARCHAR(30) NOT NULL DEFAULT 'initialized',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ NULL
);
-- Indexing sessions for performance
CREATE INDEX IF NOT EXISTS idx_sessions_subject_reference ON sessions(subject_reference);
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
-- 2. Audio Metadata Table
CREATE TABLE IF NOT EXISTS audio_metadata (
audio_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
session_id UUID NOT NULL,
question_number INT NOT NULL,
file_path VARCHAR(512) NOT NULL,
duration_seconds FLOAT NOT NULL,
file_size_bytes INT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE,
CONSTRAINT unique_session_question UNIQUE (session_id, question_number)
);
CREATE INDEX IF NOT EXISTS idx_audio_session_id ON audio_metadata(session_id);
-- 3. Transcripts Table
CREATE TABLE IF NOT EXISTS transcripts (
transcript_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
session_id UUID NOT NULL,
question_number INT NOT NULL,
full_text TEXT NOT NULL,
words_json JSONB NOT NULL,
confidence FLOAT NOT NULL,
language VARCHAR(10) NULL,
language_probability DOUBLE PRECISION NULL,
average_segment_confidence DOUBLE PRECISION NULL,
processing_time_seconds FLOAT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE,
CONSTRAINT unique_session_transcript UNIQUE (session_id, question_number)
);
CREATE INDEX IF NOT EXISTS idx_transcripts_session_id ON transcripts(session_id);
-- 4. Temporal Metrics Table
CREATE TABLE IF NOT EXISTS temporal_metrics (
temporal_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
audio_id UUID NOT NULL UNIQUE,
speech_duration_seconds FLOAT NOT NULL,
words_per_minute FLOAT NOT NULL,
pause_count INT NOT NULL,
longest_pause_seconds FLOAT NOT NULL,
speech_rate_ratio FLOAT NOT NULL,
FOREIGN KEY (audio_id) REFERENCES audio_metadata(audio_id) ON DELETE CASCADE
);
-- 5. Linguistic Metrics Table
CREATE TABLE IF NOT EXISTS linguistic_metrics (
linguistic_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
audio_id UUID NOT NULL UNIQUE,
word_count INT NOT NULL,
unique_word_count INT NOT NULL,
repeated_words_json JSONB NOT NULL,
filler_words_json JSONB NOT NULL,
lexical_density FLOAT NOT NULL,
FOREIGN KEY (audio_id) REFERENCES audio_metadata(audio_id) ON DELETE CASCADE
);
-- 6. Risk Scores Table
CREATE TABLE IF NOT EXISTS risk_scores (
risk_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
session_id UUID NOT NULL UNIQUE,
score FLOAT NOT NULL,
classification VARCHAR(20) NOT NULL,
rationale TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
FOREIGN KEY (session_id) REFERENCES sessions(session_id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_risk_scores_classification ON risk_scores(classification);