Coverage for mindsdb / migrations / versions / 2025-05-21_9f150e4f9a05_checkpoint_1.py: 80%
43 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-21 00:36 +0000
1"""checkpoint_1
3Revision ID: 9f150e4f9a05
4Revises: 53502b6d63bf
5Create Date: 2025-05-21 12:25:55.556388
7"""
8import datetime
10from alembic.operations import Operations
11import sqlalchemy as sa
12import mindsdb.interfaces.storage.db # noqa
15# revision identifiers, used by Alembic.
16revision = '9f150e4f9a05'
17down_revision = '53502b6d63bf'
18branch_labels = None
19depends_on = None
22def upgrade(op: Operations = None):
23 # region skip migration if it is existing app, apply if it is new app
24 if op is None: 24 ↛ 26line 24 didn't jump to line 26 because the condition on line 24 was never true
25 # 'op' is passed only from migrate.py when applying checkpoin migration
26 return
27 connection = op.get_bind()
28 inspector = sa.inspect(connection)
29 if 'alembic_version' in inspector.get_table_names(): 29 ↛ 31line 29 didn't jump to line 31 because the condition on line 29 was never true
30 # If version_num exists, then it is existing app
31 result = connection.execute(sa.text("SELECT version_num FROM alembic_version"))
32 current_version = result.scalar()
33 if current_version is not None:
34 return
35 # endregion
37 op.create_table(
38 'agents',
39 sa.Column('id', sa.Integer(), nullable=False),
40 sa.Column('company_id', sa.Integer(), nullable=True),
41 sa.Column('user_class', sa.Integer(), nullable=True),
42 sa.Column('name', sa.String(), nullable=False),
43 sa.Column('project_id', sa.Integer(), nullable=False),
44 sa.Column('model_name', sa.String(), nullable=True),
45 sa.Column('provider', sa.String(), nullable=True),
46 sa.Column('params', sa.JSON(), nullable=True),
47 sa.Column('updated_at', sa.DateTime(), nullable=True),
48 sa.Column('created_at', sa.DateTime(), nullable=True),
49 sa.Column('deleted_at', sa.DateTime(), nullable=True),
50 sa.PrimaryKeyConstraint('id')
51 )
52 op.create_table(
53 'chat_bots_history',
54 sa.Column('id', sa.Integer(), nullable=False),
55 sa.Column('chat_bot_id', sa.Integer(), nullable=False),
56 sa.Column('type', sa.String(), nullable=True),
57 sa.Column('text', sa.String(), nullable=True),
58 sa.Column('user', sa.String(), nullable=True),
59 sa.Column('destination', sa.String(), nullable=True),
60 sa.Column('sent_at', sa.DateTime(), nullable=True),
61 sa.Column('error', sa.String(), nullable=True),
62 sa.PrimaryKeyConstraint('id')
63 )
64 op.create_table(
65 'file',
66 sa.Column('id', sa.Integer(), nullable=False),
67 sa.Column('name', sa.String(), nullable=False),
68 sa.Column('company_id', sa.Integer(), nullable=True),
69 sa.Column('source_file_path', sa.String(), nullable=False),
70 sa.Column('file_path', sa.String(), nullable=False),
71 sa.Column('row_count', sa.Integer(), nullable=False),
72 sa.Column('columns', mindsdb.interfaces.storage.db.Json(), nullable=False),
73 sa.Column('created_at', sa.DateTime(), nullable=True),
74 sa.Column('metadata', sa.JSON(), nullable=True),
75 sa.Column('updated_at', sa.DateTime(), nullable=True),
76 sa.PrimaryKeyConstraint('id'),
77 sa.UniqueConstraint('name', 'company_id', name='unique_file_name_company_id')
78 )
79 op.create_table(
80 'integration',
81 sa.Column('id', sa.Integer(), nullable=False),
82 sa.Column('updated_at', sa.DateTime(), nullable=True),
83 sa.Column('created_at', sa.DateTime(), nullable=True),
84 sa.Column('name', sa.String(), nullable=False),
85 sa.Column('engine', sa.String(), nullable=False),
86 sa.Column('data', mindsdb.interfaces.storage.db.Json(), nullable=True),
87 sa.Column('company_id', sa.Integer(), nullable=True),
88 sa.PrimaryKeyConstraint('id'),
89 sa.UniqueConstraint('name', 'company_id', name='unique_integration_name_company_id')
90 )
91 op.create_table(
92 'jobs',
93 sa.Column('id', sa.Integer(), nullable=False),
94 sa.Column('company_id', sa.Integer(), nullable=True),
95 sa.Column('user_class', sa.Integer(), nullable=True),
96 sa.Column('active', sa.Boolean(), nullable=True),
97 sa.Column('name', sa.String(), nullable=False),
98 sa.Column('project_id', sa.Integer(), nullable=False),
99 sa.Column('query_str', sa.String(), nullable=False),
100 sa.Column('if_query_str', sa.String(), nullable=True),
101 sa.Column('start_at', sa.DateTime(), nullable=True),
102 sa.Column('end_at', sa.DateTime(), nullable=True),
103 sa.Column('next_run_at', sa.DateTime(), nullable=True),
104 sa.Column('schedule_str', sa.String(), nullable=True),
105 sa.Column('deleted_at', sa.DateTime(), nullable=True),
106 sa.Column('updated_at', sa.DateTime(), nullable=True),
107 sa.Column('created_at', sa.DateTime(), nullable=True),
108 sa.PrimaryKeyConstraint('id')
109 )
110 op.create_table(
111 'jobs_history',
112 sa.Column('id', sa.Integer(), nullable=False),
113 sa.Column('company_id', sa.Integer(), nullable=True),
114 sa.Column('job_id', sa.Integer(), nullable=True),
115 sa.Column('query_str', sa.String(), nullable=True),
116 sa.Column('start_at', sa.DateTime(), nullable=True),
117 sa.Column('end_at', sa.DateTime(), nullable=True),
118 sa.Column('error', sa.String(), nullable=True),
119 sa.Column('created_at', sa.DateTime(), nullable=True),
120 sa.Column('updated_at', sa.DateTime(), nullable=True),
121 sa.PrimaryKeyConstraint('id'),
122 sa.UniqueConstraint('job_id', 'start_at', name='uniq_job_history_job_id_start')
123 )
124 op.create_table(
125 'json_storage',
126 sa.Column('id', sa.Integer(), nullable=False),
127 sa.Column('resource_group', sa.String(), nullable=True),
128 sa.Column('resource_id', sa.Integer(), nullable=True),
129 sa.Column('name', sa.String(), nullable=True),
130 sa.Column('content', sa.JSON(), nullable=True),
131 sa.Column('encrypted_content', sa.LargeBinary(), nullable=True),
132 sa.Column('company_id', sa.Integer(), nullable=True),
133 sa.PrimaryKeyConstraint('id')
134 )
135 op.create_table(
136 'llm_data',
137 sa.Column('id', sa.Integer(), nullable=False),
138 sa.Column('input', sa.String(), nullable=False),
139 sa.Column('output', sa.String(), nullable=False),
140 sa.Column('model_id', sa.Integer(), nullable=False),
141 sa.Column('created_at', sa.DateTime(), nullable=True),
142 sa.Column('updated_at', sa.DateTime(), nullable=True),
143 sa.PrimaryKeyConstraint('id')
144 )
145 op.create_table(
146 'llm_log',
147 sa.Column('id', sa.Integer(), nullable=False),
148 sa.Column('company_id', sa.Integer(), nullable=False),
149 sa.Column('api_key', sa.String(), nullable=True),
150 sa.Column('model_id', sa.Integer(), nullable=True),
151 sa.Column('model_group', sa.String(), nullable=True),
152 sa.Column('input', sa.JSON(), nullable=True),
153 sa.Column('output', sa.JSON(), nullable=True),
154 sa.Column('start_time', sa.DateTime(), nullable=False),
155 sa.Column('end_time', sa.DateTime(), nullable=True),
156 sa.Column('cost', sa.Numeric(precision=5, scale=2), nullable=True),
157 sa.Column('prompt_tokens', sa.Integer(), nullable=True),
158 sa.Column('completion_tokens', sa.Integer(), nullable=True),
159 sa.Column('total_tokens', sa.Integer(), nullable=True),
160 sa.Column('success', sa.Boolean(), nullable=False),
161 sa.Column('exception', sa.String(), nullable=True),
162 sa.Column('traceback', sa.String(), nullable=True),
163 sa.Column('stream', sa.Boolean(), nullable=True, comment="Is this completion done in 'streaming' mode"),
164 sa.Column('metadata', sa.JSON(), nullable=True),
165 sa.PrimaryKeyConstraint('id')
166 )
167 op.create_table(
168 'project',
169 sa.Column('id', sa.Integer(), nullable=False),
170 sa.Column('created_at', sa.DateTime(), nullable=True),
171 sa.Column('updated_at', sa.DateTime(), nullable=True),
172 sa.Column('deleted_at', sa.DateTime(), nullable=True),
173 sa.Column('name', sa.String(), nullable=False),
174 sa.Column('company_id', sa.Integer(), nullable=True),
175 sa.Column('metadata', sa.JSON(), nullable=True),
176 sa.PrimaryKeyConstraint('id'),
177 sa.UniqueConstraint('name', 'company_id', name='unique_project_name_company_id')
178 )
179 op.create_table(
180 'queries',
181 sa.Column('id', sa.Integer(), nullable=False),
182 sa.Column('company_id', sa.Integer(), nullable=True),
183 sa.Column('sql', sa.String(), nullable=False),
184 sa.Column('database', sa.String(), nullable=True),
185 sa.Column('started_at', sa.DateTime(), nullable=True),
186 sa.Column('finished_at', sa.DateTime(), nullable=True),
187 sa.Column('parameters', sa.JSON(), nullable=True),
188 sa.Column('context', sa.JSON(), nullable=True),
189 sa.Column('processed_rows', sa.Integer(), nullable=True),
190 sa.Column('error', sa.String(), nullable=True),
191 sa.Column('updated_at', sa.DateTime(), nullable=True),
192 sa.Column('created_at', sa.DateTime(), nullable=True),
193 sa.PrimaryKeyConstraint('id')
194 )
195 op.create_table(
196 'query_context',
197 sa.Column('id', sa.Integer(), nullable=False),
198 sa.Column('company_id', sa.Integer(), nullable=True),
199 sa.Column('query', sa.String(), nullable=False),
200 sa.Column('context_name', sa.String(), nullable=False),
201 sa.Column('values', sa.JSON(), nullable=True),
202 sa.Column('updated_at', sa.DateTime(), nullable=True),
203 sa.Column('created_at', sa.DateTime(), nullable=True),
204 sa.PrimaryKeyConstraint('id')
205 )
206 op.create_table(
207 'skills',
208 sa.Column('id', sa.Integer(), nullable=False),
209 sa.Column('name', sa.String(), nullable=False),
210 sa.Column('project_id', sa.Integer(), nullable=False),
211 sa.Column('type', sa.String(), nullable=False),
212 sa.Column('params', sa.JSON(), nullable=True),
213 sa.Column('created_at', sa.DateTime(), nullable=True),
214 sa.Column('updated_at', sa.DateTime(), nullable=True),
215 sa.Column('deleted_at', sa.DateTime(), nullable=True),
216 sa.PrimaryKeyConstraint('id')
217 )
218 op.create_table(
219 'tasks',
220 sa.Column('id', sa.Integer(), nullable=False),
221 sa.Column('company_id', sa.Integer(), nullable=True),
222 sa.Column('user_class', sa.Integer(), nullable=True),
223 sa.Column('object_type', sa.String(), nullable=False),
224 sa.Column('object_id', sa.Integer(), nullable=False),
225 sa.Column('last_error', sa.String(), nullable=True),
226 sa.Column('active', sa.Boolean(), nullable=True),
227 sa.Column('reload', sa.Boolean(), nullable=True),
228 sa.Column('run_by', sa.String(), nullable=True),
229 sa.Column('alive_time', sa.DateTime(timezone=True), nullable=True),
230 sa.Column('updated_at', sa.DateTime(), nullable=True),
231 sa.Column('created_at', sa.DateTime(), nullable=True),
232 sa.PrimaryKeyConstraint('id')
233 )
234 op.create_table(
235 'triggers',
236 sa.Column('id', sa.Integer(), nullable=False),
237 sa.Column('name', sa.String(), nullable=False),
238 sa.Column('project_id', sa.Integer(), nullable=False),
239 sa.Column('database_id', sa.Integer(), nullable=False),
240 sa.Column('table_name', sa.String(), nullable=False),
241 sa.Column('query_str', sa.String(), nullable=False),
242 sa.Column('columns', sa.String(), nullable=True),
243 sa.Column('updated_at', sa.DateTime(), nullable=True),
244 sa.Column('created_at', sa.DateTime(), nullable=True),
245 sa.PrimaryKeyConstraint('id')
246 )
247 op.create_table(
248 'agent_skills',
249 sa.Column('agent_id', sa.Integer(), nullable=False),
250 sa.Column('skill_id', sa.Integer(), nullable=False),
251 sa.Column('parameters', sa.JSON(), nullable=True),
252 sa.ForeignKeyConstraint(['agent_id'], ['agents.id'], ),
253 sa.ForeignKeyConstraint(['skill_id'], ['skills.id'], ),
254 sa.PrimaryKeyConstraint('agent_id', 'skill_id')
255 )
256 op.create_table(
257 'chat_bots',
258 sa.Column('id', sa.Integer(), nullable=False),
259 sa.Column('name', sa.String(), nullable=False),
260 sa.Column('project_id', sa.Integer(), nullable=False),
261 sa.Column('agent_id', sa.Integer(), nullable=True),
262 sa.Column('model_name', sa.String(), nullable=True),
263 sa.Column('database_id', sa.Integer(), nullable=True),
264 sa.Column('params', sa.JSON(), nullable=True),
265 sa.Column('updated_at', sa.DateTime(), nullable=True),
266 sa.Column('created_at', sa.DateTime(), nullable=True),
267 sa.Column('webhook_token', sa.String(), nullable=True),
268 sa.ForeignKeyConstraint(['agent_id'], ['agents.id'], name='fk_agent_id'),
269 sa.PrimaryKeyConstraint('id')
270 )
271 op.create_table(
272 'predictor',
273 sa.Column('id', sa.Integer(), nullable=False),
274 sa.Column('updated_at', sa.DateTime(), nullable=True),
275 sa.Column('created_at', sa.DateTime(), nullable=True),
276 sa.Column('deleted_at', sa.DateTime(), nullable=True),
277 sa.Column('name', sa.String(), nullable=True),
278 sa.Column('data', mindsdb.interfaces.storage.db.Json(), nullable=True),
279 sa.Column('to_predict', mindsdb.interfaces.storage.db.Array(), nullable=True),
280 sa.Column('company_id', sa.Integer(), nullable=True),
281 sa.Column('mindsdb_version', sa.String(), nullable=True),
282 sa.Column('native_version', sa.String(), nullable=True),
283 sa.Column('integration_id', sa.Integer(), nullable=True),
284 sa.Column('data_integration_ref', mindsdb.interfaces.storage.db.Json(), nullable=True),
285 sa.Column('fetch_data_query', sa.String(), nullable=True),
286 sa.Column('learn_args', mindsdb.interfaces.storage.db.Json(), nullable=True),
287 sa.Column('update_status', sa.String(), nullable=True),
288 sa.Column('status', sa.String(), nullable=True),
289 sa.Column('active', sa.Boolean(), nullable=True),
290 sa.Column('training_data_columns_count', sa.Integer(), nullable=True),
291 sa.Column('training_data_rows_count', sa.Integer(), nullable=True),
292 sa.Column('training_start_at', sa.DateTime(), nullable=True),
293 sa.Column('training_stop_at', sa.DateTime(), nullable=True),
294 sa.Column('label', sa.String(), nullable=True),
295 sa.Column('version', sa.Integer(), nullable=True),
296 sa.Column('code', sa.String(), nullable=True),
297 sa.Column('lightwood_version', sa.String(), nullable=True),
298 sa.Column('dtype_dict', mindsdb.interfaces.storage.db.Json(), nullable=True),
299 sa.Column('project_id', sa.Integer(), nullable=False),
300 sa.Column('training_phase_current', sa.Integer(), nullable=True),
301 sa.Column('training_phase_total', sa.Integer(), nullable=True),
302 sa.Column('training_phase_name', sa.String(), nullable=True),
303 sa.Column('training_metadata', sa.JSON(), nullable=False),
304 sa.ForeignKeyConstraint(['integration_id'], ['integration.id'], name='fk_integration_id'),
305 sa.ForeignKeyConstraint(['project_id'], ['project.id'], name='fk_project_id'),
306 sa.PrimaryKeyConstraint('id')
307 )
308 with op.batch_alter_table('predictor', schema=None) as batch_op:
309 batch_op.create_index('predictor_index', ['company_id', 'name', 'version', 'active', 'deleted_at'], unique=True)
311 op.create_table(
312 'view',
313 sa.Column('id', sa.Integer(), nullable=False),
314 sa.Column('name', sa.String(), nullable=False),
315 sa.Column('company_id', sa.Integer(), nullable=True),
316 sa.Column('query', sa.String(), nullable=False),
317 sa.Column('project_id', sa.Integer(), nullable=False),
318 sa.ForeignKeyConstraint(['project_id'], ['project.id'], name='fk_project_id'),
319 sa.PrimaryKeyConstraint('id'),
320 sa.UniqueConstraint('name', 'company_id', name='unique_view_name_company_id')
321 )
322 op.create_table(
323 'knowledge_base',
324 sa.Column('id', sa.Integer(), nullable=False),
325 sa.Column('name', sa.String(), nullable=False),
326 sa.Column('project_id', sa.Integer(), nullable=False),
327 sa.Column('params', sa.JSON(), nullable=True),
328 sa.Column('vector_database_id', sa.Integer(), nullable=True),
329 sa.Column('vector_database_table', sa.String(), nullable=True),
330 sa.Column('embedding_model_id', sa.Integer(), nullable=True),
331 sa.Column('query_id', sa.Integer(), nullable=True),
332 sa.Column('created_at', sa.DateTime(), nullable=True),
333 sa.Column('updated_at', sa.DateTime(), nullable=True),
334 sa.ForeignKeyConstraint(['embedding_model_id'], ['predictor.id'], name='fk_knowledge_base_embedding_model_id'),
335 sa.ForeignKeyConstraint(['vector_database_id'], ['integration.id'], name='fk_knowledge_base_vector_database_id'),
336 sa.PrimaryKeyConstraint('id'),
337 sa.UniqueConstraint('name', 'project_id', name='unique_knowledge_base_name_project_id')
338 )
340 # Insert default project
341 op.bulk_insert(
342 sa.table(
343 'project',
344 sa.Column('name', sa.String()),
345 sa.Column('company_id', sa.Integer()),
346 sa.Column('metadata', sa.JSON()),
347 sa.Column('created_at', sa.DateTime())
348 ),
349 [{
350 'name': 'mindsdb',
351 'company_id': 0,
352 'metadata': {'is_default': True},
353 'created_at': datetime.datetime.now()
354 }]
355 )
358def downgrade():
359 # do nothging, since it is checkpoint migration
360 pass