Spaces:
Runtime error
Runtime error
File size: 3,553 Bytes
cd8bd0a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | -- 002_mcp_a2a_tables.sql
-- Tables for MCP Server audit, A2A task lifecycle,
-- routing decision tracking, and Auto-Combo adaptation state.
-- ============ MCP Tool Audit ============
-- Tracks every MCP tool invocation for security audit and observability.
CREATE TABLE IF NOT EXISTS mcp_tool_audit (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tool_name TEXT NOT NULL,
input_hash TEXT,
output_summary TEXT,
duration_ms INTEGER,
api_key_id TEXT,
success INTEGER DEFAULT 1,
error_code TEXT,
created_at TEXT DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_mta_tool ON mcp_tool_audit(tool_name);
CREATE INDEX IF NOT EXISTS idx_mta_created ON mcp_tool_audit(created_at);
CREATE INDEX IF NOT EXISTS idx_mta_apikey ON mcp_tool_audit(api_key_id);
-- ============ A2A Tasks ============
-- Stores A2A task lifecycle (submitted → working → completed/failed/cancelled).
CREATE TABLE IF NOT EXISTS a2a_tasks (
id TEXT PRIMARY KEY,
state TEXT NOT NULL DEFAULT 'submitted',
skill_id TEXT,
input_json TEXT,
output_json TEXT,
cost_estimated REAL,
cost_actual REAL,
routing_explanation TEXT,
resilience_trace TEXT,
policy_verdict TEXT,
api_key_id TEXT,
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT DEFAULT (datetime('now')),
completed_at TEXT,
expires_at TEXT
);
CREATE INDEX IF NOT EXISTS idx_a2a_state ON a2a_tasks(state);
CREATE INDEX IF NOT EXISTS idx_a2a_skill ON a2a_tasks(skill_id);
CREATE INDEX IF NOT EXISTS idx_a2a_created ON a2a_tasks(created_at);
-- ============ A2A Task Events ============
-- Event log for each A2A task (state transitions, errors, fallbacks).
CREATE TABLE IF NOT EXISTS a2a_task_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
task_id TEXT NOT NULL REFERENCES a2a_tasks(id) ON DELETE CASCADE,
event_type TEXT NOT NULL,
data_json TEXT,
created_at TEXT DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_a2ae_task ON a2a_task_events(task_id);
CREATE INDEX IF NOT EXISTS idx_a2ae_type ON a2a_task_events(event_type);
-- ============ Routing Decisions ============
-- Records every routing decision for explainability and learning.
CREATE TABLE IF NOT EXISTS routing_decisions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
request_id TEXT,
task_type TEXT,
combo_id TEXT,
provider_selected TEXT,
model_selected TEXT,
score REAL,
factors_json TEXT,
fallbacks_triggered INTEGER DEFAULT 0,
success INTEGER DEFAULT 1,
latency_ms INTEGER,
cost REAL,
source TEXT DEFAULT 'api',
created_at TEXT DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_rd_request ON routing_decisions(request_id);
CREATE INDEX IF NOT EXISTS idx_rd_combo ON routing_decisions(combo_id);
CREATE INDEX IF NOT EXISTS idx_rd_provider ON routing_decisions(provider_selected);
CREATE INDEX IF NOT EXISTS idx_rd_created ON routing_decisions(created_at);
-- ============ Combo Adaptation State ============
-- Persisted learning state for Auto-Combo scoring engine.
CREATE TABLE IF NOT EXISTS combo_adaptation_state (
id INTEGER PRIMARY KEY AUTOINCREMENT,
combo_id TEXT NOT NULL,
provider_id TEXT NOT NULL,
learned_score REAL DEFAULT 0.5,
request_count INTEGER DEFAULT 0,
success_count INTEGER DEFAULT 0,
avg_latency_ms REAL,
last_failure_at TEXT,
excluded_until TEXT,
updated_at TEXT DEFAULT (datetime('now')),
UNIQUE(combo_id, provider_id)
);
CREATE INDEX IF NOT EXISTS idx_cas_combo ON combo_adaptation_state(combo_id);
|