Files
coder/coderd/database/migrations/000370_aibridge.up.sql
T

69 lines
3.3 KiB
SQL

CREATE TABLE IF NOT EXISTS aibridge_interceptions (
id UUID PRIMARY KEY,
initiator_id uuid NOT NULL,
provider TEXT NOT NULL,
model TEXT NOT NULL,
started_at TIMESTAMP WITH TIME ZONE NOT NULL
);
COMMENT ON TABLE aibridge_interceptions IS 'Audit log of requests intercepted by AI Bridge';
COMMENT ON COLUMN aibridge_interceptions.initiator_id IS 'Relates to a users record, but FK is elided for performance.';
CREATE INDEX idx_aibridge_interceptions_initiator_id ON aibridge_interceptions (initiator_id);
CREATE TABLE IF NOT EXISTS aibridge_token_usages (
id UUID PRIMARY KEY,
interception_id UUID NOT NULL,
provider_response_id TEXT NOT NULL,
input_tokens BIGINT NOT NULL,
output_tokens BIGINT NOT NULL,
metadata JSONB DEFAULT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL
);
COMMENT ON TABLE aibridge_token_usages IS 'Audit log of tokens used by intercepted requests in AI Bridge';
COMMENT ON COLUMN aibridge_token_usages.provider_response_id IS 'The ID for the response in which the tokens were used, produced by the provider.';
CREATE INDEX idx_aibridge_token_usages_interception_id ON aibridge_token_usages (interception_id);
CREATE INDEX idx_aibridge_token_usages_provider_response_id ON aibridge_token_usages (provider_response_id);
CREATE TABLE IF NOT EXISTS aibridge_user_prompts (
id UUID PRIMARY KEY,
interception_id UUID NOT NULL,
provider_response_id TEXT NOT NULL,
prompt TEXT NOT NULL,
metadata JSONB DEFAULT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL
);
COMMENT ON TABLE aibridge_user_prompts IS 'Audit log of prompts used by intercepted requests in AI Bridge';
COMMENT ON COLUMN aibridge_user_prompts.provider_response_id IS 'The ID for the response to the given prompt, produced by the provider.';
CREATE INDEX idx_aibridge_user_prompts_interception_id ON aibridge_user_prompts (interception_id);
CREATE INDEX idx_aibridge_user_prompts_provider_response_id ON aibridge_user_prompts (provider_response_id);
CREATE TABLE IF NOT EXISTS aibridge_tool_usages (
id UUID PRIMARY KEY,
interception_id UUID NOT NULL,
provider_response_id TEXT NOT NULL,
server_url TEXT NULL,
tool TEXT NOT NULL,
input TEXT NOT NULL,
injected BOOLEAN NOT NULL DEFAULT FALSE,
invocation_error TEXT NULL,
metadata JSONB DEFAULT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL
);
COMMENT ON TABLE aibridge_tool_usages IS 'Audit log of tool calls in intercepted requests in AI Bridge';
COMMENT ON COLUMN aibridge_tool_usages.provider_response_id IS 'The ID for the response in which the tools were used, produced by the provider.';
COMMENT ON COLUMN aibridge_tool_usages.server_url IS 'The name of the MCP server against which this tool was invoked. May be NULL, in which case the tool was defined by the client, not injected.';
COMMENT ON COLUMN aibridge_tool_usages.injected IS 'Whether this tool was injected; i.e. Bridge injected these tools into the request from an MCP server. If false it means a tool was defined by the client and already existed in the request (MCP or built-in).';
COMMENT ON COLUMN aibridge_tool_usages.invocation_error IS 'Only injected tools are invoked.';
CREATE INDEX idx_aibridge_tool_usages_interception_id ON aibridge_tool_usages (interception_id);
CREATE INDEX idx_aibridge_tool_usagesprovider_response_id ON aibridge_tool_usages (provider_response_id);