135 lines
6.2 KiB
MySQL
135 lines
6.2 KiB
MySQL
|
|
-- IHF Phase 11 — Advanced AI Federation (IHUB-WP-0012)
|
||
|
|
-- Migration timestamp: 1744156800
|
||
|
|
|
||
|
|
-- agent_registrations: named, versioned AI agents backed by llm-connect providers
|
||
|
|
CREATE TABLE agent_registrations (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
hub_id UUID NOT NULL REFERENCES hubs(id),
|
||
|
|
name TEXT NOT NULL,
|
||
|
|
slug TEXT NOT NULL UNIQUE,
|
||
|
|
description TEXT,
|
||
|
|
provider TEXT NOT NULL,
|
||
|
|
model_name TEXT NOT NULL,
|
||
|
|
trust_level TEXT NOT NULL DEFAULT 'advisory',
|
||
|
|
capabilities JSONB NOT NULL DEFAULT '[]',
|
||
|
|
system_prompt TEXT,
|
||
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||
|
|
version INTEGER NOT NULL DEFAULT 1,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
CHECK (trust_level IN ('advisory', 'elevated', 'autonomous'))
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX agent_registrations_hub_id_idx ON agent_registrations (hub_id);
|
||
|
|
CREATE INDEX agent_registrations_slug_idx ON agent_registrations (slug);
|
||
|
|
CREATE INDEX agent_registrations_is_active_idx ON agent_registrations (is_active);
|
||
|
|
|
||
|
|
-- model_routing_policies: task_type → agent selection rules per hub
|
||
|
|
CREATE TABLE model_routing_policies (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
hub_id UUID NOT NULL REFERENCES hubs(id),
|
||
|
|
task_type TEXT NOT NULL,
|
||
|
|
agent_registration_id UUID NOT NULL REFERENCES agent_registrations(id),
|
||
|
|
priority INTEGER NOT NULL DEFAULT 0,
|
||
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
UNIQUE (hub_id, task_type, priority)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX model_routing_policies_hub_task_idx ON model_routing_policies (hub_id, task_type);
|
||
|
|
|
||
|
|
-- agent_delegations: auditable inter-agent subtask delegation records
|
||
|
|
CREATE TABLE agent_delegations (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
delegating_agent_id UUID NOT NULL REFERENCES agent_registrations(id),
|
||
|
|
receiving_agent_id UUID NOT NULL REFERENCES agent_registrations(id),
|
||
|
|
parent_proposal_id UUID REFERENCES agent_proposals(id),
|
||
|
|
scope TEXT NOT NULL,
|
||
|
|
token_budget INTEGER NOT NULL DEFAULT 1000,
|
||
|
|
tokens_used INTEGER,
|
||
|
|
status TEXT NOT NULL DEFAULT 'pending',
|
||
|
|
result JSONB,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
completed_at TIMESTAMP WITH TIME ZONE,
|
||
|
|
CHECK (status IN ('pending', 'completed', 'failed', 'cancelled'))
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX agent_delegations_delegating_idx ON agent_delegations (delegating_agent_id);
|
||
|
|
CREATE INDEX agent_delegations_receiving_idx ON agent_delegations (receiving_agent_id);
|
||
|
|
CREATE INDEX agent_delegations_parent_proposal_idx ON agent_delegations (parent_proposal_id);
|
||
|
|
|
||
|
|
-- collective_proposals: multi-agent proposals with attribution
|
||
|
|
CREATE TABLE collective_proposals (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
title TEXT NOT NULL,
|
||
|
|
summary TEXT,
|
||
|
|
task_type TEXT NOT NULL,
|
||
|
|
consensus_status TEXT NOT NULL DEFAULT 'pending',
|
||
|
|
final_content JSONB,
|
||
|
|
source_widget_id UUID REFERENCES widgets(id),
|
||
|
|
source_candidate_id UUID REFERENCES requirement_candidates(id),
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
CHECK (consensus_status IN ('pending', 'consensus', 'divergent'))
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX collective_proposals_task_type_idx ON collective_proposals (task_type);
|
||
|
|
CREATE INDEX collective_proposals_consensus_status_idx ON collective_proposals (consensus_status);
|
||
|
|
|
||
|
|
-- collective_proposal_contributions: per-agent contribution records
|
||
|
|
CREATE TABLE collective_proposal_contributions (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
collective_proposal_id UUID NOT NULL REFERENCES collective_proposals(id),
|
||
|
|
agent_registration_id UUID NOT NULL REFERENCES agent_registrations(id),
|
||
|
|
content JSONB NOT NULL,
|
||
|
|
tokens_in INTEGER,
|
||
|
|
tokens_out INTEGER,
|
||
|
|
model_used TEXT,
|
||
|
|
contributed_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX collective_proposal_contributions_proposal_idx ON collective_proposal_contributions (collective_proposal_id);
|
||
|
|
CREATE INDEX collective_proposal_contributions_agent_idx ON collective_proposal_contributions (agent_registration_id);
|
||
|
|
|
||
|
|
-- ai_governance_policies: per-hub rules controlling agent scope
|
||
|
|
CREATE TABLE ai_governance_policies (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
hub_id UUID NOT NULL REFERENCES hubs(id),
|
||
|
|
agent_registration_id UUID NOT NULL REFERENCES agent_registrations(id),
|
||
|
|
artifact_type TEXT NOT NULL,
|
||
|
|
allowed_actions JSONB NOT NULL DEFAULT '["read"]',
|
||
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX ai_governance_policies_hub_agent_idx ON ai_governance_policies (hub_id, agent_registration_id);
|
||
|
|
CREATE INDEX ai_governance_policies_is_active_idx ON ai_governance_policies (is_active);
|
||
|
|
|
||
|
|
-- agent_performance_records: periodic snapshots of per-agent metrics
|
||
|
|
CREATE TABLE agent_performance_records (
|
||
|
|
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY NOT NULL,
|
||
|
|
agent_registration_id UUID NOT NULL REFERENCES agent_registrations(id),
|
||
|
|
hub_id UUID NOT NULL REFERENCES hubs(id),
|
||
|
|
period_start TIMESTAMP WITH TIME ZONE NOT NULL,
|
||
|
|
period_end TIMESTAMP WITH TIME ZONE NOT NULL,
|
||
|
|
proposals_generated INTEGER NOT NULL DEFAULT 0,
|
||
|
|
proposals_accepted INTEGER NOT NULL DEFAULT 0,
|
||
|
|
proposals_rejected INTEGER NOT NULL DEFAULT 0,
|
||
|
|
proposals_revised INTEGER NOT NULL DEFAULT 0,
|
||
|
|
mean_confidence DOUBLE PRECISION,
|
||
|
|
calibration_score DOUBLE PRECISION,
|
||
|
|
computed_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX agent_performance_records_agent_idx ON agent_performance_records (agent_registration_id);
|
||
|
|
CREATE INDEX agent_performance_records_period_idx ON agent_performance_records (period_start, period_end);
|
||
|
|
|
||
|
|
-- Extend agent_proposals with agent_registration_id and token tracking
|
||
|
|
ALTER TABLE agent_proposals
|
||
|
|
ADD COLUMN agent_registration_id UUID REFERENCES agent_registrations(id),
|
||
|
|
ADD COLUMN tokens_in INTEGER,
|
||
|
|
ADD COLUMN tokens_out INTEGER;
|
||
|
|
|
||
|
|
CREATE INDEX agent_proposals_agent_registration_idx ON agent_proposals (agent_registration_id);
|