نسخهٔ وب مستقل — پلتفرم نیروی کار هوش مصنوعی

مخزن اختصاصی برنامهٔ وب؛ محتوای پوشهٔ web در ریشهٔ مخزن قرار گرفت.
تاریخچهٔ پروژهٔ ربات (agy-bot) در این مخزن وجود ندارد و هیچ وابستگی runtime به آن نیست.
This commit is contained in:
mjalmoudy94
2026-10-13 00:39:28 +03:30
commit 717e53a7ce
185 changed files with 39910 additions and 0 deletions
@@ -0,0 +1,833 @@
"""initial schema
Revision ID: c7ecdf7882fe
Revises:
Create Date: 2026-10-12 21:29:22.888817
"""
from __future__ import annotations
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
revision: str = 'c7ecdf7882fe'
down_revision: str | None = None
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('agent_templates',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('role_key', sa.String(length=32), nullable=False),
sa.Column('description', sa.Text(), nullable=False),
sa.Column('default_prompt', sa.Text(), nullable=False),
sa.Column('default_tools_json', sa.JSON(), nullable=False),
sa.Column('default_routing_policy_id', sa.String(length=32), nullable=True),
sa.Column('is_system', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('ai_providers',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('type', sa.String(length=32), nullable=False),
sa.Column('base_url', sa.String(length=512), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('audit_events',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=True),
sa.Column('actor_user_id', sa.String(length=32), nullable=True),
sa.Column('action', sa.String(length=80), nullable=False),
sa.Column('target_type', sa.String(length=40), nullable=False),
sa.Column('target_id', sa.String(length=64), nullable=False),
sa.Column('metadata_json', sa.JSON(), nullable=False),
sa.Column('ip_address', sa.String(length=64), nullable=False),
sa.Column('user_agent', sa.String(length=255), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_audit_action', 'audit_events', ['action'], unique=False)
op.create_index(op.f('ix_audit_events_actor_user_id'), 'audit_events', ['actor_user_id'], unique=False)
op.create_index(op.f('ix_audit_events_organization_id'), 'audit_events', ['organization_id'], unique=False)
op.create_index('ix_audit_org_created', 'audit_events', ['organization_id', 'created_at'], unique=False)
op.create_table('error_events',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=True),
sa.Column('run_id', sa.String(length=32), nullable=True),
sa.Column('kind', sa.String(length=80), nullable=False),
sa.Column('message', sa.Text(), nullable=False),
sa.Column('stack', sa.Text(), nullable=False),
sa.Column('metadata_json', sa.JSON(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_error_events_organization_id'), 'error_events', ['organization_id'], unique=False)
op.create_index(op.f('ix_error_events_run_id'), 'error_events', ['run_id'], unique=False)
op.create_table('plans',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('monthly_price', sa.Float(), nullable=False),
sa.Column('included_credit', sa.Float(), nullable=False),
sa.Column('features_json', sa.JSON(), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('quality_metrics',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('value', sa.Float(), nullable=False),
sa.Column('dimensions_json', sa.JSON(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_metric_org_name', 'quality_metrics', ['organization_id', 'name'], unique=False)
op.create_index(op.f('ix_quality_metrics_organization_id'), 'quality_metrics', ['organization_id'], unique=False)
op.create_table('rate_cards',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('unit', sa.String(length=40), nullable=False),
sa.Column('customer_price', sa.Float(), nullable=False),
sa.Column('internal_cost_estimate', sa.Float(), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('unit')
)
op.create_table('routing_policies',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('description', sa.Text(), nullable=False),
sa.Column('mode', sa.String(length=16), nullable=False),
sa.Column('fallback_policy_json', sa.JSON(), nullable=False),
sa.Column('budget_limits_json', sa.JSON(), nullable=False),
sa.Column('is_default', sa.Boolean(), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('sandbox_resource_limits',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('scope', sa.String(length=32), nullable=False),
sa.Column('scope_id', sa.String(length=32), nullable=True),
sa.Column('cpu', sa.Float(), nullable=False),
sa.Column('memory_mb', sa.Integer(), nullable=False),
sa.Column('disk_mb', sa.Integer(), nullable=False),
sa.Column('timeout_seconds', sa.Integer(), nullable=False),
sa.Column('max_output_bytes', sa.Integer(), nullable=False),
sa.Column('network_policy', sa.String(length=16), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('scope', 'scope_id', name='uq_limit_scope')
)
op.create_table('sandbox_templates',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('provider', sa.String(length=32), nullable=False),
sa.Column('image', sa.String(length=255), nullable=False),
sa.Column('description', sa.Text(), nullable=False),
sa.Column('default_cpu', sa.Float(), nullable=False),
sa.Column('default_memory_mb', sa.Integer(), nullable=False),
sa.Column('default_disk_mb', sa.Integer(), nullable=False),
sa.Column('is_system', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('traces',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('run_id', sa.String(length=32), nullable=True),
sa.Column('name', sa.String(length=160), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_traces_organization_id'), 'traces', ['organization_id'], unique=False)
op.create_index(op.f('ix_traces_run_id'), 'traces', ['run_id'], unique=False)
op.create_table('users',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('email', sa.String(length=320), nullable=False),
sa.Column('password_hash', sa.String(length=255), nullable=False),
sa.Column('name', sa.String(length=160), nullable=False),
sa.Column('avatar_url', sa.String(length=512), nullable=True),
sa.Column('is_platform_owner', sa.Boolean(), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
op.create_table('ai_model_credentials',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('provider_id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('encrypted_api_key', sa.Text(), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['provider_id'], ['ai_providers.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_ai_model_credentials_provider_id'), 'ai_model_credentials', ['provider_id'], unique=False)
op.create_table('ai_models',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('provider_id', sa.String(length=32), nullable=False),
sa.Column('internal_name', sa.String(length=160), nullable=False),
sa.Column('display_name_for_admin', sa.String(length=160), nullable=False),
sa.Column('capabilities', sa.JSON(), nullable=False),
sa.Column('input_price_per_1m', sa.Float(), nullable=False),
sa.Column('output_price_per_1m', sa.Float(), nullable=False),
sa.Column('is_active', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['provider_id'], ['ai_providers.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('provider_id', 'internal_name', name='uq_model_provider_name')
)
op.create_index(op.f('ix_ai_models_provider_id'), 'ai_models', ['provider_id'], unique=False)
op.create_table('organizations',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=160), nullable=False),
sa.Column('slug', sa.String(length=64), nullable=False),
sa.Column('owner_user_id', sa.String(length=32), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['owner_user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_organizations_owner_user_id'), 'organizations', ['owner_user_id'], unique=False)
op.create_index(op.f('ix_organizations_slug'), 'organizations', ['slug'], unique=True)
op.create_table('spans',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('trace_id', sa.String(length=32), nullable=False),
sa.Column('parent_span_id', sa.String(length=32), nullable=True),
sa.Column('name', sa.String(length=160), nullable=False),
sa.Column('kind', sa.String(length=32), nullable=False),
sa.Column('attributes_json', sa.JSON(), nullable=False),
sa.Column('started_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('ended_at', sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(['trace_id'], ['traces.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_spans_trace_id'), 'spans', ['trace_id'], unique=False)
op.create_table('credit_wallets',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('balance', sa.Float(), nullable=False),
sa.Column('currency', sa.String(length=8), nullable=False),
sa.Column('low_balance_threshold', sa.Float(), nullable=False),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_credit_wallets_organization_id'), 'credit_wallets', ['organization_id'], unique=True)
op.create_table('invites',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('email', sa.String(length=320), nullable=False),
sa.Column('role', sa.String(length=16), nullable=False),
sa.Column('token_hash', sa.String(length=128), nullable=False),
sa.Column('invited_by_user_id', sa.String(length=32), nullable=True),
sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('accepted_at', sa.DateTime(timezone=True), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['invited_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('token_hash')
)
op.create_index('ix_invite_org_email', 'invites', ['organization_id', 'email'], unique=False)
op.create_index(op.f('ix_invites_invited_by_user_id'), 'invites', ['invited_by_user_id'], unique=False)
op.create_index(op.f('ix_invites_organization_id'), 'invites', ['organization_id'], unique=False)
op.create_table('invoices',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('amount', sa.Float(), nullable=False),
sa.Column('currency', sa.String(length=8), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('external_invoice_id', sa.String(length=160), nullable=True),
sa.Column('period_start', sa.DateTime(timezone=True), nullable=True),
sa.Column('period_end', sa.DateTime(timezone=True), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_invoices_organization_id'), 'invoices', ['organization_id'], unique=False)
op.create_table('knowledge_sources',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=True),
sa.Column('name', sa.String(length=255), nullable=False),
sa.Column('kind', sa.String(length=16), nullable=False),
sa.Column('uri', sa.String(length=512), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_knowledge_sources_organization_id'), 'knowledge_sources', ['organization_id'], unique=False)
op.create_index(op.f('ix_knowledge_sources_project_id'), 'knowledge_sources', ['project_id'], unique=False)
op.create_table('memberships',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('user_id', sa.String(length=32), nullable=False),
sa.Column('role', sa.String(length=16), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('organization_id', 'user_id', name='uq_membership_org_user')
)
op.create_index('ix_membership_org_role', 'memberships', ['organization_id', 'role'], unique=False)
op.create_index(op.f('ix_memberships_organization_id'), 'memberships', ['organization_id'], unique=False)
op.create_index(op.f('ix_memberships_user_id'), 'memberships', ['user_id'], unique=False)
op.create_table('payments',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('amount', sa.Float(), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('provider', sa.String(length=32), nullable=False),
sa.Column('external_payment_id', sa.String(length=160), nullable=True),
sa.Column('invoice_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_payments_organization_id'), 'payments', ['organization_id'], unique=False)
op.create_table('projects',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=160), nullable=False),
sa.Column('slug', sa.String(length=64), nullable=False),
sa.Column('description', sa.Text(), nullable=False),
sa.Column('created_by_user_id', sa.String(length=32), nullable=True),
sa.Column('default_branch', sa.String(length=80), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['created_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('organization_id', 'slug', name='uq_project_org_slug')
)
op.create_index('ix_project_org_created', 'projects', ['organization_id', 'created_at'], unique=False)
op.create_index(op.f('ix_projects_created_by_user_id'), 'projects', ['created_by_user_id'], unique=False)
op.create_index(op.f('ix_projects_organization_id'), 'projects', ['organization_id'], unique=False)
op.create_table('retrieval_policies',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('scope_json', sa.JSON(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_retrieval_policies_organization_id'), 'retrieval_policies', ['organization_id'], unique=False)
op.create_table('subscriptions',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('plan_id', sa.String(length=32), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('external_subscription_id', sa.String(length=160), nullable=True),
sa.Column('current_period_end', sa.DateTime(timezone=True), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['plan_id'], ['plans.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_subscriptions_organization_id'), 'subscriptions', ['organization_id'], unique=False)
op.create_index(op.f('ix_subscriptions_plan_id'), 'subscriptions', ['plan_id'], unique=False)
op.create_table('usage_events',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=True),
sa.Column('user_id', sa.String(length=32), nullable=True),
sa.Column('employee_id', sa.String(length=32), nullable=True),
sa.Column('run_id', sa.String(length=32), nullable=True),
sa.Column('unit', sa.String(length=40), nullable=False),
sa.Column('quantity', sa.Float(), nullable=False),
sa.Column('unit_price', sa.Float(), nullable=False),
sa.Column('internal_cost_estimate', sa.Float(), nullable=False),
sa.Column('total_price', sa.Float(), nullable=False),
sa.Column('metadata_json', sa.JSON(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_usage_events_employee_id'), 'usage_events', ['employee_id'], unique=False)
op.create_index(op.f('ix_usage_events_organization_id'), 'usage_events', ['organization_id'], unique=False)
op.create_index(op.f('ix_usage_events_project_id'), 'usage_events', ['project_id'], unique=False)
op.create_index(op.f('ix_usage_events_run_id'), 'usage_events', ['run_id'], unique=False)
op.create_index('ix_usage_org_created', 'usage_events', ['organization_id', 'created_at'], unique=False)
op.create_index('ix_usage_org_unit', 'usage_events', ['organization_id', 'unit'], unique=False)
op.create_table('documents',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('source_id', sa.String(length=32), nullable=False),
sa.Column('title', sa.String(length=255), nullable=False),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['source_id'], ['knowledge_sources.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_documents_source_id'), 'documents', ['source_id'], unique=False)
op.create_table('embedding_jobs',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('source_id', sa.String(length=32), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('error', sa.Text(), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['source_id'], ['knowledge_sources.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_embedding_jobs_source_id'), 'embedding_jobs', ['source_id'], unique=False)
op.create_table('employees',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=True),
sa.Column('template_id', sa.String(length=32), nullable=True),
sa.Column('name', sa.String(length=160), nullable=False),
sa.Column('role_key', sa.String(length=32), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('routing_policy_id', sa.String(length=32), nullable=True),
sa.Column('budget_limit_json', sa.JSON(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='SET NULL'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_employee_org_created', 'employees', ['organization_id', 'created_at'], unique=False)
op.create_index(op.f('ix_employees_organization_id'), 'employees', ['organization_id'], unique=False)
op.create_index(op.f('ix_employees_project_id'), 'employees', ['project_id'], unique=False)
op.create_table('preview_domains',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=False),
sa.Column('host', sa.String(length=255), nullable=False),
sa.Column('port', sa.Integer(), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('protected', sa.Boolean(), nullable=False),
sa.Column('created_by_user_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['created_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('host', name='uq_preview_domain_host')
)
op.create_index('ix_preview_domain_org_created', 'preview_domains', ['organization_id', 'created_at'], unique=False)
op.create_index(op.f('ix_preview_domains_created_by_user_id'), 'preview_domains', ['created_by_user_id'], unique=False)
op.create_index(op.f('ix_preview_domains_organization_id'), 'preview_domains', ['organization_id'], unique=False)
op.create_index(op.f('ix_preview_domains_project_id'), 'preview_domains', ['project_id'], unique=False)
op.create_table('preview_ports',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=False),
sa.Column('service_name', sa.String(length=80), nullable=False),
sa.Column('port', sa.Integer(), nullable=False),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('port', name='uq_preview_port_port'),
sa.UniqueConstraint('project_id', 'service_name', name='uq_preview_port_project_service')
)
op.create_index(op.f('ix_preview_ports_organization_id'), 'preview_ports', ['organization_id'], unique=False)
op.create_index(op.f('ix_preview_ports_project_id'), 'preview_ports', ['project_id'], unique=False)
op.create_table('project_git_credentials',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=False),
sa.Column('username', sa.String(length=160), nullable=False),
sa.Column('encrypted_password', sa.Text(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_project_git_credentials_project_id'), 'project_git_credentials', ['project_id'], unique=True)
op.create_table('project_repositories',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=False),
sa.Column('provider', sa.String(length=32), nullable=False),
sa.Column('owner', sa.String(length=120), nullable=False),
sa.Column('repo_name', sa.String(length=160), nullable=False),
sa.Column('clone_url', sa.String(length=512), nullable=False),
sa.Column('web_url', sa.String(length=512), nullable=False),
sa.Column('default_branch', sa.String(length=80), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_project_repositories_project_id'), 'project_repositories', ['project_id'], unique=True)
op.create_table('threads',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=True),
sa.Column('title', sa.String(length=255), nullable=False),
sa.Column('created_by_user_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['created_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='SET NULL'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_thread_org_created', 'threads', ['organization_id', 'created_at'], unique=False)
op.create_index(op.f('ix_threads_created_by_user_id'), 'threads', ['created_by_user_id'], unique=False)
op.create_index(op.f('ix_threads_organization_id'), 'threads', ['organization_id'], unique=False)
op.create_index(op.f('ix_threads_project_id'), 'threads', ['project_id'], unique=False)
op.create_table('workspaces',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=False),
sa.Column('template_id', sa.String(length=32), nullable=False),
sa.Column('provider', sa.String(length=32), nullable=False),
sa.Column('external_workspace_id', sa.String(length=160), nullable=True),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['template_id'], ['sandbox_templates.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_workspace_project_created', 'workspaces', ['project_id', 'created_at'], unique=False)
op.create_index(op.f('ix_workspaces_organization_id'), 'workspaces', ['organization_id'], unique=False)
op.create_index(op.f('ix_workspaces_project_id'), 'workspaces', ['project_id'], unique=False)
op.create_index(op.f('ix_workspaces_template_id'), 'workspaces', ['template_id'], unique=False)
op.create_table('document_chunks',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('document_id', sa.String(length=32), nullable=False),
sa.Column('index', sa.Integer(), nullable=False),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('embedding_json', sa.JSON(), nullable=False),
sa.ForeignKeyConstraint(['document_id'], ['documents.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_chunk_document_index', 'document_chunks', ['document_id', 'index'], unique=False)
op.create_index(op.f('ix_document_chunks_document_id'), 'document_chunks', ['document_id'], unique=False)
op.create_table('employee_tool_permissions',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('employee_id', sa.String(length=32), nullable=False),
sa.Column('tool_key', sa.String(length=80), nullable=False),
sa.Column('allowed', sa.Boolean(), nullable=False),
sa.Column('policy_json', sa.JSON(), nullable=False),
sa.ForeignKeyConstraint(['employee_id'], ['employees.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('employee_id', 'tool_key', name='uq_employee_tool')
)
op.create_index(op.f('ix_employee_tool_permissions_employee_id'), 'employee_tool_permissions', ['employee_id'], unique=False)
op.create_table('messages',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('thread_id', sa.String(length=32), nullable=False),
sa.Column('role', sa.String(length=16), nullable=False),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('employee_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['thread_id'], ['threads.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_message_thread_created', 'messages', ['thread_id', 'created_at'], unique=False)
op.create_index(op.f('ix_messages_employee_id'), 'messages', ['employee_id'], unique=False)
op.create_index(op.f('ix_messages_thread_id'), 'messages', ['thread_id'], unique=False)
op.create_table('preview_urls',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('workspace_id', sa.String(length=32), nullable=False),
sa.Column('port', sa.Integer(), nullable=False),
sa.Column('url', sa.String(length=512), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_preview_urls_workspace_id'), 'preview_urls', ['workspace_id'], unique=False)
op.create_table('prompt_versions',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('employee_id', sa.String(length=32), nullable=False),
sa.Column('version', sa.Integer(), nullable=False),
sa.Column('content', sa.Text(), nullable=False),
sa.Column('created_by_user_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['created_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['employee_id'], ['employees.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('employee_id', 'version', name='uq_prompt_employee_version')
)
op.create_index(op.f('ix_prompt_versions_created_by_user_id'), 'prompt_versions', ['created_by_user_id'], unique=False)
op.create_index(op.f('ix_prompt_versions_employee_id'), 'prompt_versions', ['employee_id'], unique=False)
op.create_table('sandbox_sessions',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('workspace_id', sa.String(length=32), nullable=False),
sa.Column('external_session_id', sa.String(length=160), nullable=True),
sa.Column('status', sa.String(length=16), nullable=False),
sa.Column('started_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('stopped_at', sa.DateTime(timezone=True), nullable=True),
sa.Column('last_active_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_sandbox_sessions_workspace_id'), 'sandbox_sessions', ['workspace_id'], unique=False)
op.create_table('snapshots',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('workspace_id', sa.String(length=32), nullable=False),
sa.Column('name', sa.String(length=120), nullable=False),
sa.Column('external_snapshot_id', sa.String(length=160), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_snapshots_workspace_id'), 'snapshots', ['workspace_id'], unique=False)
op.create_table('tasks',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=True),
sa.Column('thread_id', sa.String(length=32), nullable=True),
sa.Column('title', sa.String(length=255), nullable=False),
sa.Column('description', sa.Text(), nullable=False),
sa.Column('status', sa.String(length=24), nullable=False),
sa.Column('assigned_employee_id', sa.String(length=32), nullable=True),
sa.Column('created_by_user_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['created_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='SET NULL'),
sa.ForeignKeyConstraint(['thread_id'], ['threads.id'], ondelete='SET NULL'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_task_org_created', 'tasks', ['organization_id', 'created_at'], unique=False)
op.create_index('ix_task_org_status', 'tasks', ['organization_id', 'status'], unique=False)
op.create_index(op.f('ix_tasks_assigned_employee_id'), 'tasks', ['assigned_employee_id'], unique=False)
op.create_index(op.f('ix_tasks_created_by_user_id'), 'tasks', ['created_by_user_id'], unique=False)
op.create_index(op.f('ix_tasks_organization_id'), 'tasks', ['organization_id'], unique=False)
op.create_index(op.f('ix_tasks_project_id'), 'tasks', ['project_id'], unique=False)
op.create_index(op.f('ix_tasks_thread_id'), 'tasks', ['thread_id'], unique=False)
op.create_table('command_runs',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('session_id', sa.String(length=32), nullable=False),
sa.Column('command', sa.Text(), nullable=False),
sa.Column('exit_code', sa.Integer(), nullable=True),
sa.Column('stdout_ref', sa.Text(), nullable=False),
sa.Column('stderr_ref', sa.Text(), nullable=False),
sa.Column('duration_ms', sa.Integer(), nullable=False),
sa.Column('truncated', sa.Boolean(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['session_id'], ['sandbox_sessions.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index(op.f('ix_command_runs_session_id'), 'command_runs', ['session_id'], unique=False)
op.create_table('runs',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('task_id', sa.String(length=32), nullable=False),
sa.Column('employee_id', sa.String(length=32), nullable=True),
sa.Column('status', sa.String(length=24), nullable=False),
sa.Column('error', sa.Text(), nullable=True),
sa.Column('started_at', sa.DateTime(timezone=True), nullable=True),
sa.Column('finished_at', sa.DateTime(timezone=True), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['task_id'], ['tasks.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_run_task_created', 'runs', ['task_id', 'created_at'], unique=False)
op.create_index(op.f('ix_runs_employee_id'), 'runs', ['employee_id'], unique=False)
op.create_index(op.f('ix_runs_task_id'), 'runs', ['task_id'], unique=False)
op.create_table('artifacts',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('organization_id', sa.String(length=32), nullable=False),
sa.Column('project_id', sa.String(length=32), nullable=True),
sa.Column('run_id', sa.String(length=32), nullable=True),
sa.Column('name', sa.String(length=255), nullable=False),
sa.Column('kind', sa.String(length=32), nullable=False),
sa.Column('content_ref', sa.Text(), nullable=False),
sa.Column('size_bytes', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['organization_id'], ['organizations.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='SET NULL'),
sa.ForeignKeyConstraint(['run_id'], ['runs.id'], ondelete='SET NULL'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_artifact_org_created', 'artifacts', ['organization_id', 'created_at'], unique=False)
op.create_index(op.f('ix_artifacts_organization_id'), 'artifacts', ['organization_id'], unique=False)
op.create_index(op.f('ix_artifacts_project_id'), 'artifacts', ['project_id'], unique=False)
op.create_index(op.f('ix_artifacts_run_id'), 'artifacts', ['run_id'], unique=False)
op.create_table('run_steps',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('run_id', sa.String(length=32), nullable=False),
sa.Column('index', sa.Integer(), nullable=False),
sa.Column('kind', sa.String(length=40), nullable=False),
sa.Column('title', sa.String(length=255), nullable=False),
sa.Column('payload_json', sa.JSON(), nullable=False),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['run_id'], ['runs.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_run_step_run_index', 'run_steps', ['run_id', 'index'], unique=False)
op.create_index(op.f('ix_run_steps_run_id'), 'run_steps', ['run_id'], unique=False)
op.create_table('tool_calls',
sa.Column('id', sa.String(length=32), nullable=False),
sa.Column('run_id', sa.String(length=32), nullable=False),
sa.Column('tool_key', sa.String(length=80), nullable=False),
sa.Column('arguments_json', sa.JSON(), nullable=False),
sa.Column('result_json', sa.JSON(), nullable=False),
sa.Column('status', sa.String(length=24), nullable=False),
sa.Column('requires_approval', sa.Boolean(), nullable=False),
sa.Column('approved_by_user_id', sa.String(length=32), nullable=True),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.ForeignKeyConstraint(['approved_by_user_id'], ['users.id'], ),
sa.ForeignKeyConstraint(['run_id'], ['runs.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id')
)
op.create_index('ix_tool_call_run_created', 'tool_calls', ['run_id', 'created_at'], unique=False)
op.create_index('ix_tool_call_status', 'tool_calls', ['status'], unique=False)
op.create_index(op.f('ix_tool_calls_approved_by_user_id'), 'tool_calls', ['approved_by_user_id'], unique=False)
op.create_index(op.f('ix_tool_calls_run_id'), 'tool_calls', ['run_id'], unique=False)
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f('ix_tool_calls_run_id'), table_name='tool_calls')
op.drop_index(op.f('ix_tool_calls_approved_by_user_id'), table_name='tool_calls')
op.drop_index('ix_tool_call_status', table_name='tool_calls')
op.drop_index('ix_tool_call_run_created', table_name='tool_calls')
op.drop_table('tool_calls')
op.drop_index(op.f('ix_run_steps_run_id'), table_name='run_steps')
op.drop_index('ix_run_step_run_index', table_name='run_steps')
op.drop_table('run_steps')
op.drop_index(op.f('ix_artifacts_run_id'), table_name='artifacts')
op.drop_index(op.f('ix_artifacts_project_id'), table_name='artifacts')
op.drop_index(op.f('ix_artifacts_organization_id'), table_name='artifacts')
op.drop_index('ix_artifact_org_created', table_name='artifacts')
op.drop_table('artifacts')
op.drop_index(op.f('ix_runs_task_id'), table_name='runs')
op.drop_index(op.f('ix_runs_employee_id'), table_name='runs')
op.drop_index('ix_run_task_created', table_name='runs')
op.drop_table('runs')
op.drop_index(op.f('ix_command_runs_session_id'), table_name='command_runs')
op.drop_table('command_runs')
op.drop_index(op.f('ix_tasks_thread_id'), table_name='tasks')
op.drop_index(op.f('ix_tasks_project_id'), table_name='tasks')
op.drop_index(op.f('ix_tasks_organization_id'), table_name='tasks')
op.drop_index(op.f('ix_tasks_created_by_user_id'), table_name='tasks')
op.drop_index(op.f('ix_tasks_assigned_employee_id'), table_name='tasks')
op.drop_index('ix_task_org_status', table_name='tasks')
op.drop_index('ix_task_org_created', table_name='tasks')
op.drop_table('tasks')
op.drop_index(op.f('ix_snapshots_workspace_id'), table_name='snapshots')
op.drop_table('snapshots')
op.drop_index(op.f('ix_sandbox_sessions_workspace_id'), table_name='sandbox_sessions')
op.drop_table('sandbox_sessions')
op.drop_index(op.f('ix_prompt_versions_employee_id'), table_name='prompt_versions')
op.drop_index(op.f('ix_prompt_versions_created_by_user_id'), table_name='prompt_versions')
op.drop_table('prompt_versions')
op.drop_index(op.f('ix_preview_urls_workspace_id'), table_name='preview_urls')
op.drop_table('preview_urls')
op.drop_index(op.f('ix_messages_thread_id'), table_name='messages')
op.drop_index(op.f('ix_messages_employee_id'), table_name='messages')
op.drop_index('ix_message_thread_created', table_name='messages')
op.drop_table('messages')
op.drop_index(op.f('ix_employee_tool_permissions_employee_id'), table_name='employee_tool_permissions')
op.drop_table('employee_tool_permissions')
op.drop_index(op.f('ix_document_chunks_document_id'), table_name='document_chunks')
op.drop_index('ix_chunk_document_index', table_name='document_chunks')
op.drop_table('document_chunks')
op.drop_index(op.f('ix_workspaces_template_id'), table_name='workspaces')
op.drop_index(op.f('ix_workspaces_project_id'), table_name='workspaces')
op.drop_index(op.f('ix_workspaces_organization_id'), table_name='workspaces')
op.drop_index('ix_workspace_project_created', table_name='workspaces')
op.drop_table('workspaces')
op.drop_index(op.f('ix_threads_project_id'), table_name='threads')
op.drop_index(op.f('ix_threads_organization_id'), table_name='threads')
op.drop_index(op.f('ix_threads_created_by_user_id'), table_name='threads')
op.drop_index('ix_thread_org_created', table_name='threads')
op.drop_table('threads')
op.drop_index(op.f('ix_project_repositories_project_id'), table_name='project_repositories')
op.drop_table('project_repositories')
op.drop_index(op.f('ix_project_git_credentials_project_id'), table_name='project_git_credentials')
op.drop_table('project_git_credentials')
op.drop_index(op.f('ix_preview_ports_project_id'), table_name='preview_ports')
op.drop_index(op.f('ix_preview_ports_organization_id'), table_name='preview_ports')
op.drop_table('preview_ports')
op.drop_index(op.f('ix_preview_domains_project_id'), table_name='preview_domains')
op.drop_index(op.f('ix_preview_domains_organization_id'), table_name='preview_domains')
op.drop_index(op.f('ix_preview_domains_created_by_user_id'), table_name='preview_domains')
op.drop_index('ix_preview_domain_org_created', table_name='preview_domains')
op.drop_table('preview_domains')
op.drop_index(op.f('ix_employees_project_id'), table_name='employees')
op.drop_index(op.f('ix_employees_organization_id'), table_name='employees')
op.drop_index('ix_employee_org_created', table_name='employees')
op.drop_table('employees')
op.drop_index(op.f('ix_embedding_jobs_source_id'), table_name='embedding_jobs')
op.drop_table('embedding_jobs')
op.drop_index(op.f('ix_documents_source_id'), table_name='documents')
op.drop_table('documents')
op.drop_index('ix_usage_org_unit', table_name='usage_events')
op.drop_index('ix_usage_org_created', table_name='usage_events')
op.drop_index(op.f('ix_usage_events_run_id'), table_name='usage_events')
op.drop_index(op.f('ix_usage_events_project_id'), table_name='usage_events')
op.drop_index(op.f('ix_usage_events_organization_id'), table_name='usage_events')
op.drop_index(op.f('ix_usage_events_employee_id'), table_name='usage_events')
op.drop_table('usage_events')
op.drop_index(op.f('ix_subscriptions_plan_id'), table_name='subscriptions')
op.drop_index(op.f('ix_subscriptions_organization_id'), table_name='subscriptions')
op.drop_table('subscriptions')
op.drop_index(op.f('ix_retrieval_policies_organization_id'), table_name='retrieval_policies')
op.drop_table('retrieval_policies')
op.drop_index(op.f('ix_projects_organization_id'), table_name='projects')
op.drop_index(op.f('ix_projects_created_by_user_id'), table_name='projects')
op.drop_index('ix_project_org_created', table_name='projects')
op.drop_table('projects')
op.drop_index(op.f('ix_payments_organization_id'), table_name='payments')
op.drop_table('payments')
op.drop_index(op.f('ix_memberships_user_id'), table_name='memberships')
op.drop_index(op.f('ix_memberships_organization_id'), table_name='memberships')
op.drop_index('ix_membership_org_role', table_name='memberships')
op.drop_table('memberships')
op.drop_index(op.f('ix_knowledge_sources_project_id'), table_name='knowledge_sources')
op.drop_index(op.f('ix_knowledge_sources_organization_id'), table_name='knowledge_sources')
op.drop_table('knowledge_sources')
op.drop_index(op.f('ix_invoices_organization_id'), table_name='invoices')
op.drop_table('invoices')
op.drop_index(op.f('ix_invites_organization_id'), table_name='invites')
op.drop_index(op.f('ix_invites_invited_by_user_id'), table_name='invites')
op.drop_index('ix_invite_org_email', table_name='invites')
op.drop_table('invites')
op.drop_index(op.f('ix_credit_wallets_organization_id'), table_name='credit_wallets')
op.drop_table('credit_wallets')
op.drop_index(op.f('ix_spans_trace_id'), table_name='spans')
op.drop_table('spans')
op.drop_index(op.f('ix_organizations_slug'), table_name='organizations')
op.drop_index(op.f('ix_organizations_owner_user_id'), table_name='organizations')
op.drop_table('organizations')
op.drop_index(op.f('ix_ai_models_provider_id'), table_name='ai_models')
op.drop_table('ai_models')
op.drop_index(op.f('ix_ai_model_credentials_provider_id'), table_name='ai_model_credentials')
op.drop_table('ai_model_credentials')
op.drop_index(op.f('ix_users_email'), table_name='users')
op.drop_table('users')
op.drop_index(op.f('ix_traces_run_id'), table_name='traces')
op.drop_index(op.f('ix_traces_organization_id'), table_name='traces')
op.drop_table('traces')
op.drop_table('sandbox_templates')
op.drop_table('sandbox_resource_limits')
op.drop_table('routing_policies')
op.drop_table('rate_cards')
op.drop_index(op.f('ix_quality_metrics_organization_id'), table_name='quality_metrics')
op.drop_index('ix_metric_org_name', table_name='quality_metrics')
op.drop_table('quality_metrics')
op.drop_table('plans')
op.drop_index(op.f('ix_error_events_run_id'), table_name='error_events')
op.drop_index(op.f('ix_error_events_organization_id'), table_name='error_events')
op.drop_table('error_events')
op.drop_index('ix_audit_org_created', table_name='audit_events')
op.drop_index(op.f('ix_audit_events_organization_id'), table_name='audit_events')
op.drop_index(op.f('ix_audit_events_actor_user_id'), table_name='audit_events')
op.drop_index('ix_audit_action', table_name='audit_events')
op.drop_table('audit_events')
op.drop_table('ai_providers')
op.drop_table('agent_templates')
# ### end Alembic commands ###