77 lines
4 KiB
Python
77 lines
4 KiB
Python
"""Modelle und Zugänge
|
|
|
|
Revision ID: 0002
|
|
Revises: 0001
|
|
Erstellt: 2026-10-21 22:40:30.431417
|
|
"""
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
revision = '0002'
|
|
down_revision = '0001'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.create_table('providers',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(length=100), nullable=False),
|
|
sa.Column('base_url', sa.String(length=500), nullable=False),
|
|
sa.Column('active', sa.Boolean(), nullable=False),
|
|
sa.Column('created', sa.DateTime(timezone=True), nullable=False),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_providers')),
|
|
sa.UniqueConstraint('name', name=op.f('uq_providers_name'))
|
|
)
|
|
op.create_table('models',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('provider_id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(length=200), nullable=False),
|
|
sa.Column('label', sa.String(length=200), nullable=False),
|
|
sa.Column('model_class', sa.String(length=20), nullable=False),
|
|
sa.Column('context_window', sa.Integer(), nullable=False),
|
|
sa.Column('supports_tools', sa.Boolean(), nullable=False),
|
|
sa.Column('supports_reasoning', sa.Boolean(), nullable=False),
|
|
sa.Column('active', sa.Boolean(), nullable=False),
|
|
sa.Column('is_default', sa.Boolean(), nullable=False),
|
|
sa.Column('created', sa.DateTime(timezone=True), nullable=False),
|
|
sa.ForeignKeyConstraint(['provider_id'], ['providers.id'], name=op.f('fk_models_provider_id_providers'), ondelete='CASCADE'),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_models')),
|
|
sa.UniqueConstraint('provider_id', 'name', name=op.f('uq_models_provider_id'))
|
|
)
|
|
op.create_index('uq_models_default', 'models', ['is_default'], unique=True, postgresql_where=sa.text('is_default'))
|
|
op.create_table('provider_keys',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('provider_id', sa.Integer(), nullable=False),
|
|
sa.Column('team_id', sa.Integer(), nullable=True),
|
|
sa.Column('secret', sa.String(length=2000), nullable=False),
|
|
sa.Column('hint', sa.String(length=10), nullable=False),
|
|
sa.Column('updated_by', sa.Integer(), nullable=False),
|
|
sa.Column('updated', sa.DateTime(timezone=True), nullable=False),
|
|
sa.ForeignKeyConstraint(['provider_id'], ['providers.id'], name=op.f('fk_provider_keys_provider_id_providers'), ondelete='CASCADE'),
|
|
sa.ForeignKeyConstraint(['team_id'], ['teams.id'], name=op.f('fk_provider_keys_team_id_teams'), ondelete='CASCADE'),
|
|
sa.ForeignKeyConstraint(['updated_by'], ['users.id'], name=op.f('fk_provider_keys_updated_by_users')),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_provider_keys')),
|
|
sa.UniqueConstraint('provider_id', 'team_id', name=op.f('uq_provider_keys_provider_id'))
|
|
)
|
|
op.create_index('uq_provider_keys_default', 'provider_keys', ['provider_id'], unique=True, postgresql_where=sa.text('team_id IS NULL'))
|
|
op.add_column('messages', sa.Column('items', sa.JSON(), nullable=False, server_default='[]'))
|
|
op.add_column('messages', sa.Column('model', sa.String(length=200), nullable=False, server_default=''))
|
|
op.add_column('messages', sa.Column('usage', sa.JSON(), nullable=False, server_default='{}'))
|
|
op.add_column('workspaces', sa.Column('model_id', sa.Integer(), nullable=True))
|
|
op.create_foreign_key(op.f('fk_workspaces_model_id_models'), 'workspaces', 'models', ['model_id'], ['id'], ondelete='SET NULL')
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_constraint(op.f('fk_workspaces_model_id_models'), 'workspaces', type_='foreignkey')
|
|
op.drop_column('workspaces', 'model_id')
|
|
op.drop_column('messages', 'usage')
|
|
op.drop_column('messages', 'model')
|
|
op.drop_column('messages', 'items')
|
|
op.drop_index('uq_provider_keys_default', table_name='provider_keys', postgresql_where=sa.text('team_id IS NULL'))
|
|
op.drop_table('provider_keys')
|
|
op.drop_index('uq_models_default', table_name='models', postgresql_where=sa.text('is_default'))
|
|
op.drop_table('models')
|
|
op.drop_table('providers')
|