2026-07-15 23:47:19 +08:00
|
|
|
-- Generated by aether-data-schema from crates/aether-data/runtime/schema/logical/*.toml.
|
2026-05-05 18:27:36 +08:00
|
|
|
-- Do not edit generated files directly; edit logical schema or explicit overrides instead.
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS "usage" (
|
|
|
|
|
request_id TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
id TEXT,
|
|
|
|
|
user_id TEXT,
|
|
|
|
|
api_key_id TEXT,
|
|
|
|
|
provider_name TEXT NOT NULL DEFAULT 'unknown',
|
|
|
|
|
model TEXT NOT NULL DEFAULT 'unknown',
|
|
|
|
|
target_model TEXT,
|
|
|
|
|
provider_id TEXT,
|
|
|
|
|
provider_endpoint_id TEXT,
|
|
|
|
|
provider_api_key_id TEXT,
|
|
|
|
|
request_type TEXT,
|
|
|
|
|
api_format TEXT,
|
|
|
|
|
api_family TEXT,
|
|
|
|
|
endpoint_kind TEXT,
|
|
|
|
|
endpoint_api_format TEXT,
|
|
|
|
|
provider_api_family TEXT,
|
|
|
|
|
provider_endpoint_kind TEXT,
|
|
|
|
|
has_format_conversion INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
is_stream INTEGER NOT NULL DEFAULT 0,
|
2026-05-06 03:09:53 +08:00
|
|
|
upstream_is_stream INTEGER,
|
2026-05-05 18:27:36 +08:00
|
|
|
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
input_output_total_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
total_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_input_tokens_5m INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_input_tokens_1h INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_ephemeral_5m_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_ephemeral_1h_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
cache_read_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
input_context_tokens INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
input_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
output_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
cache_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_cost_usd_5m REAL NOT NULL DEFAULT 0,
|
|
|
|
|
cache_creation_cost_usd_1h REAL NOT NULL DEFAULT 0,
|
|
|
|
|
cache_read_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
request_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_input_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_output_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_cache_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_cache_creation_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_cache_creation_cost_usd_5m REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_cache_creation_cost_usd_1h REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_cache_read_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_request_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
rate_multiplier REAL NOT NULL DEFAULT 1,
|
|
|
|
|
input_price_per_1m REAL,
|
|
|
|
|
output_price_per_1m REAL,
|
|
|
|
|
cache_creation_price_per_1m REAL,
|
|
|
|
|
cache_creation_price_per_1m_5m REAL,
|
|
|
|
|
cache_creation_price_per_1m_1h REAL,
|
|
|
|
|
cache_read_price_per_1m REAL,
|
|
|
|
|
price_per_request REAL,
|
|
|
|
|
status_code INTEGER,
|
|
|
|
|
error_message TEXT,
|
|
|
|
|
error_category TEXT,
|
|
|
|
|
response_time_ms INTEGER,
|
|
|
|
|
first_byte_time_ms INTEGER,
|
|
|
|
|
wallet_id TEXT,
|
|
|
|
|
status TEXT NOT NULL DEFAULT 'completed',
|
|
|
|
|
billing_status TEXT NOT NULL DEFAULT 'pending',
|
|
|
|
|
total_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
actual_total_cost_usd REAL NOT NULL DEFAULT 0,
|
|
|
|
|
request_headers TEXT,
|
|
|
|
|
request_body TEXT,
|
|
|
|
|
provider_request_headers TEXT,
|
|
|
|
|
provider_request_body TEXT,
|
|
|
|
|
response_headers TEXT,
|
|
|
|
|
response_body TEXT,
|
|
|
|
|
client_response_headers TEXT,
|
|
|
|
|
client_response_body TEXT,
|
|
|
|
|
request_body_compressed BLOB,
|
|
|
|
|
provider_request_body_compressed BLOB,
|
|
|
|
|
response_body_compressed BLOB,
|
|
|
|
|
client_response_body_compressed BLOB,
|
|
|
|
|
request_metadata TEXT,
|
|
|
|
|
created_at INTEGER,
|
|
|
|
|
candidate_id TEXT,
|
|
|
|
|
candidate_index INTEGER,
|
|
|
|
|
key_name TEXT,
|
|
|
|
|
username TEXT,
|
|
|
|
|
api_key_name TEXT,
|
|
|
|
|
planner_kind TEXT,
|
|
|
|
|
route_family TEXT,
|
|
|
|
|
route_kind TEXT,
|
|
|
|
|
execution_path TEXT,
|
|
|
|
|
local_execution_runtime_miss_reason TEXT,
|
|
|
|
|
wallet_balance_before REAL,
|
|
|
|
|
wallet_balance_after REAL,
|
|
|
|
|
wallet_recharge_balance_before REAL,
|
|
|
|
|
wallet_recharge_balance_after REAL,
|
|
|
|
|
wallet_gift_balance_before REAL,
|
|
|
|
|
wallet_gift_balance_after REAL,
|
|
|
|
|
finalized_at INTEGER,
|
|
|
|
|
created_at_unix_ms INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
updated_at_unix_secs INTEGER NOT NULL DEFAULT 0
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_api_key_id_idx ON "usage" (api_key_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_billing_status_idx ON "usage" (billing_status);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_created_at_idx ON "usage" (created_at_unix_ms);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_provider_api_key_id_idx ON "usage" (provider_api_key_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_provider_id_idx ON "usage" (provider_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_request_id_idx ON "usage" (request_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_user_id_idx ON "usage" (user_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_wallet_id_idx ON "usage" (wallet_id);
|
|
|
|
|
|
2026-07-25 21:28:21 +08:00
|
|
|
CREATE TABLE IF NOT EXISTS usage_body_blobs (
|
|
|
|
|
body_ref TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
request_id TEXT NOT NULL,
|
|
|
|
|
body_field TEXT NOT NULL,
|
|
|
|
|
payload_gzip BLOB NOT NULL,
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
updated_at INTEGER NOT NULL,
|
|
|
|
|
UNIQUE (request_id, body_field),
|
|
|
|
|
CONSTRAINT usage_body_blobs_request_id_fkey FOREIGN KEY (request_id) REFERENCES usage (request_id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_body_blobs_request_id ON usage_body_blobs (request_id);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS usage_http_audits (
|
|
|
|
|
request_id TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
request_headers TEXT,
|
|
|
|
|
provider_request_headers TEXT,
|
|
|
|
|
response_headers TEXT,
|
|
|
|
|
client_response_headers TEXT,
|
|
|
|
|
request_body_ref TEXT,
|
|
|
|
|
provider_request_body_ref TEXT,
|
|
|
|
|
response_body_ref TEXT,
|
|
|
|
|
client_response_body_ref TEXT,
|
|
|
|
|
request_body_state TEXT,
|
|
|
|
|
provider_request_body_state TEXT,
|
|
|
|
|
response_body_state TEXT,
|
|
|
|
|
client_response_body_state TEXT,
|
|
|
|
|
body_capture_mode TEXT NOT NULL DEFAULT 'none',
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
updated_at INTEGER NOT NULL,
|
|
|
|
|
CONSTRAINT usage_http_audits_request_id_fkey FOREIGN KEY (request_id) REFERENCES usage (request_id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_http_audits_updated_at ON usage_http_audits (updated_at);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS usage_routing_snapshots (
|
|
|
|
|
request_id TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
candidate_id TEXT,
|
|
|
|
|
candidate_index INTEGER,
|
|
|
|
|
key_name TEXT,
|
|
|
|
|
planner_kind TEXT,
|
|
|
|
|
route_family TEXT,
|
|
|
|
|
route_kind TEXT,
|
|
|
|
|
execution_path TEXT,
|
|
|
|
|
local_execution_runtime_miss_reason TEXT,
|
|
|
|
|
selected_provider_id TEXT,
|
|
|
|
|
selected_endpoint_id TEXT,
|
|
|
|
|
selected_provider_api_key_id TEXT,
|
|
|
|
|
has_format_conversion INTEGER,
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
updated_at INTEGER NOT NULL,
|
|
|
|
|
CONSTRAINT usage_routing_snapshots_request_id_fkey FOREIGN KEY (request_id) REFERENCES usage (request_id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_routing_snapshots_route_family_kind ON usage_routing_snapshots (route_family, route_kind);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_routing_snapshots_candidate_id ON usage_routing_snapshots (candidate_id);
|
|
|
|
|
|
2026-05-19 00:30:24 +08:00
|
|
|
CREATE TABLE IF NOT EXISTS usage_counter_deltas (
|
|
|
|
|
id TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
request_id TEXT NOT NULL,
|
|
|
|
|
kind TEXT NOT NULL,
|
|
|
|
|
target_id TEXT NOT NULL,
|
2026-09-04 03:45:52 +08:00
|
|
|
target_tunnel_generation TEXT,
|
2026-05-19 00:30:24 +08:00
|
|
|
request_count_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
total_requests_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
success_count_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
error_count_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
dns_failures_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
stream_errors_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
total_tokens_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
total_cost_usd_delta REAL NOT NULL DEFAULT 0,
|
|
|
|
|
total_response_time_ms_delta INTEGER NOT NULL DEFAULT 0,
|
|
|
|
|
last_used_at_unix_secs INTEGER,
|
|
|
|
|
last_used_ip TEXT,
|
|
|
|
|
candidate_last_used_at_unix_secs INTEGER,
|
|
|
|
|
removed_last_used_at_unix_secs INTEGER,
|
|
|
|
|
usage_created_at_unix_secs INTEGER,
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
processed_at INTEGER
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_unprocessed ON usage_counter_deltas (created_at, id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_processed ON usage_counter_deltas (processed_at, created_at, id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_counter_deltas_request_kind ON usage_counter_deltas (request_id, kind, target_id);
|
|
|
|
|
|
2026-05-05 18:27:36 +08:00
|
|
|
CREATE TABLE IF NOT EXISTS usage_settlement_snapshots (
|
|
|
|
|
request_id TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
billing_status TEXT NOT NULL,
|
|
|
|
|
wallet_id TEXT,
|
|
|
|
|
wallet_balance_before REAL,
|
|
|
|
|
wallet_balance_after REAL,
|
|
|
|
|
wallet_recharge_balance_before REAL,
|
|
|
|
|
wallet_recharge_balance_after REAL,
|
|
|
|
|
wallet_gift_balance_before REAL,
|
|
|
|
|
wallet_gift_balance_after REAL,
|
|
|
|
|
provider_monthly_used_usd REAL,
|
2026-07-25 21:28:21 +08:00
|
|
|
billing_snapshot_schema_version TEXT,
|
|
|
|
|
billing_snapshot_status TEXT,
|
|
|
|
|
rate_multiplier REAL,
|
|
|
|
|
is_free_tier INTEGER,
|
|
|
|
|
input_price_per_1m REAL,
|
|
|
|
|
output_price_per_1m REAL,
|
|
|
|
|
cache_creation_price_per_1m REAL,
|
|
|
|
|
cache_read_price_per_1m REAL,
|
|
|
|
|
price_per_request REAL,
|
|
|
|
|
settlement_snapshot_schema_version TEXT,
|
|
|
|
|
settlement_snapshot TEXT,
|
|
|
|
|
billing_dimensions TEXT,
|
|
|
|
|
billing_input_tokens INTEGER,
|
|
|
|
|
billing_effective_input_tokens INTEGER,
|
|
|
|
|
billing_output_tokens INTEGER,
|
|
|
|
|
billing_cache_creation_tokens INTEGER,
|
|
|
|
|
billing_cache_creation_5m_tokens INTEGER,
|
|
|
|
|
billing_cache_creation_1h_tokens INTEGER,
|
|
|
|
|
billing_cache_read_tokens INTEGER,
|
|
|
|
|
billing_total_input_context INTEGER,
|
|
|
|
|
billing_cache_creation_cost_usd REAL,
|
|
|
|
|
billing_cache_read_cost_usd REAL,
|
|
|
|
|
billing_total_cost_usd REAL,
|
|
|
|
|
billing_actual_total_cost_usd REAL,
|
|
|
|
|
billing_pricing_source TEXT,
|
|
|
|
|
billing_rule_id TEXT,
|
|
|
|
|
billing_rule_version TEXT,
|
2026-05-05 18:27:36 +08:00
|
|
|
finalized_at INTEGER,
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
updated_at INTEGER NOT NULL
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_settlement_snapshots_billing_status_idx ON usage_settlement_snapshots (billing_status);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_settlement_snapshots_wallet_id_idx ON usage_settlement_snapshots (wallet_id);
|
2026-07-25 21:28:21 +08:00
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_settlement_snapshots_schema_version ON usage_settlement_snapshots (settlement_snapshot_schema_version);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS ix_usage_settlement_snapshots_pricing_source ON usage_settlement_snapshots (billing_pricing_source);
|
2026-05-05 18:27:36 +08:00
|
|
|
|
2026-09-04 03:45:52 +08:00
|
|
|
CREATE TABLE IF NOT EXISTS usage_cost_reservations (
|
|
|
|
|
request_id TEXT NOT NULL,
|
|
|
|
|
subject_id TEXT NOT NULL,
|
|
|
|
|
reservation_token TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
admitted_at INTEGER NOT NULL,
|
|
|
|
|
reserved_cost_units INTEGER NOT NULL,
|
|
|
|
|
actual_cost_units INTEGER,
|
|
|
|
|
state TEXT NOT NULL,
|
|
|
|
|
reservation_expires_at INTEGER NOT NULL,
|
|
|
|
|
retain_until INTEGER NOT NULL,
|
|
|
|
|
finalized_at INTEGER,
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
updated_at INTEGER NOT NULL,
|
|
|
|
|
CONSTRAINT usage_cost_reservations_subject_id_fkey FOREIGN KEY (subject_id) REFERENCES users (id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_cost_reservations_request_id_idx ON usage_cost_reservations (request_id);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_cost_reservations_subject_admitted_at_idx ON usage_cost_reservations (subject_id, admitted_at);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_cost_reservations_reservation_expires_at_idx ON usage_cost_reservations (reservation_expires_at);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_cost_reservations_retain_until_token_idx ON usage_cost_reservations (retain_until, reservation_token);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS usage_request_admissions (
|
|
|
|
|
request_id TEXT NOT NULL,
|
|
|
|
|
subject_id TEXT NOT NULL,
|
|
|
|
|
event_token TEXT PRIMARY KEY NOT NULL,
|
|
|
|
|
admitted_at INTEGER NOT NULL,
|
|
|
|
|
retain_until INTEGER NOT NULL,
|
|
|
|
|
state TEXT NOT NULL,
|
|
|
|
|
released_at INTEGER,
|
|
|
|
|
created_at INTEGER NOT NULL,
|
|
|
|
|
CONSTRAINT usage_request_admissions_subject_id_fkey FOREIGN KEY (subject_id) REFERENCES users (id) ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_request_admissions_subject_admitted_at_idx ON usage_request_admissions (subject_id, admitted_at);
|
|
|
|
|
CREATE INDEX IF NOT EXISTS usage_request_admissions_retain_until_token_idx ON usage_request_admissions (retain_until, event_token);
|
|
|
|
|
|