mirror of
https://github.com/open-webui/open-webui
synced 2025-06-26 18:26:48 +00:00
Fix: fixed migration to handle postgres json properly
This commit is contained in:
parent
749125c09a
commit
632478be3b
@ -22,29 +22,63 @@
|
|||||||
> migrator.drop_constraints(model, *constraints)
|
> migrator.drop_constraints(model, *constraints)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
"""Add rag_config field to knowledge table if not present."""
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
import peewee as pw
|
|
||||||
from peewee_migrate import Migrator
|
from peewee_migrate import Migrator
|
||||||
|
import peewee as pw
|
||||||
import json
|
import json
|
||||||
with suppress(ImportError):
|
|
||||||
import playhouse.postgres_ext as pw_pext
|
|
||||||
|
|
||||||
class Knowledge(pw.Model):
|
# Try importing JSONField from playhouse.postgres_ext
|
||||||
class Meta:
|
with suppress(ImportError):
|
||||||
table_name = 'knowledge'
|
from playhouse.postgres_ext import JSONField as PostgresJSONField
|
||||||
|
|
||||||
|
|
||||||
|
# Fallback JSONField for SQLite (stores JSON as text)
|
||||||
|
class SQLiteJSONField(pw.TextField):
|
||||||
|
def db_value(self, value):
|
||||||
|
return json.dumps(value)
|
||||||
|
|
||||||
|
def python_value(self, value):
|
||||||
|
if value is not None:
|
||||||
|
return json.loads(value)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_compatible_json_field(database: pw.Database):
|
||||||
|
"""Return a JSON-compatible field for the current database."""
|
||||||
|
if isinstance(database, pw.SqliteDatabase):
|
||||||
|
return SQLiteJSONField(null=False, default={"DEFAULT_RAG_SETTINGS": True})
|
||||||
|
else:
|
||||||
|
return PostgresJSONField(null=False, default={"DEFAULT_RAG_SETTINGS": True})
|
||||||
|
|
||||||
|
|
||||||
def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
|
def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
|
||||||
"""Add rag_config column to knowledge table."""
|
"""Add rag_config JSON field to knowledge table"""
|
||||||
Knowledge._meta.database = database # manually bind DB
|
if 'knowledge' not in database.get_tables():
|
||||||
|
print("Knowledge table hasn't been created yet, skipping migration.")
|
||||||
|
return
|
||||||
|
|
||||||
|
class Knowledge(pw.Model):
|
||||||
|
class Meta:
|
||||||
|
table_name = 'knowledge'
|
||||||
|
|
||||||
|
Knowledge._meta.database = database # bind DB
|
||||||
|
|
||||||
migrator.add_fields(
|
migrator.add_fields(
|
||||||
Knowledge,
|
Knowledge,
|
||||||
rag_config=pw.TextField(null=True, default=json.dumps({"DEFAULT_RAG_SETTINGS": True})),
|
rag_config=get_compatible_json_field(database)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
|
def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
|
||||||
"""Remove rag_config column from knowledge table."""
|
"""Remove rag_config field from knowledge table."""
|
||||||
Knowledge._meta.database = database # manually bind DB
|
if 'knowledge' not in database.get_tables():
|
||||||
|
print("Knowledge table hasn't been created yet, skipping migration.")
|
||||||
|
return
|
||||||
|
|
||||||
migrator.remove_fields(Knowledge, "rag_config")
|
class Knowledge(pw.Model):
|
||||||
|
class Meta:
|
||||||
|
table_name = 'knowledge'
|
||||||
|
|
||||||
|
Knowledge._meta.database = database
|
||||||
|
migrator.remove_fields(Knowledge, 'rag_config')
|
||||||
|
Loading…
Reference in New Issue
Block a user