bifroest/app/migrations/versions/0002_models.py
2026-10-27 08:34:17 +01:00

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')