20260425_0001_init_knowledge_models.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. """init knowledge models
  2. Revision ID: 20260425_0001
  3. Revises:
  4. Create Date: 2026-04-25 17:10:00
  5. """
  6. from collections.abc import Sequence
  7. from alembic import op
  8. import sqlalchemy as sa
  9. revision: str = "20260425_0001"
  10. down_revision: str | None = None
  11. branch_labels: Sequence[str] | None = None
  12. depends_on: Sequence[str] | None = None
  13. def upgrade() -> None:
  14. op.create_table(
  15. "knowledge_base",
  16. sa.Column("code", sa.String(length=64), nullable=False),
  17. sa.Column("name", sa.String(length=128), nullable=False),
  18. sa.Column("description", sa.Text(), nullable=True),
  19. sa.Column("status", sa.String(length=32), nullable=False),
  20. sa.Column("metadata_json", sa.JSON(), nullable=True),
  21. sa.Column("id", sa.String(length=36), nullable=False),
  22. sa.Column("tenant_id", sa.String(length=36), nullable=False),
  23. sa.Column("created_by", sa.String(length=36), nullable=True),
  24. sa.Column("updated_by", sa.String(length=36), nullable=True),
  25. sa.Column("created_time", sa.DateTime(), nullable=False),
  26. sa.Column("updated_time", sa.DateTime(), nullable=False),
  27. sa.Column("deleted_time", sa.DateTime(), nullable=True),
  28. sa.Column("version", sa.Integer(), nullable=False),
  29. sa.PrimaryKeyConstraint("id"),
  30. )
  31. op.create_index("ix_knowledge_base_code", "knowledge_base", ["code"], unique=False)
  32. op.create_index("ix_knowledge_base_status", "knowledge_base", ["status"], unique=False)
  33. op.create_index("ix_knowledge_base_tenant_id", "knowledge_base", ["tenant_id"], unique=False)
  34. op.create_table(
  35. "knowledge_document",
  36. sa.Column("knowledge_base_id", sa.String(length=36), nullable=False),
  37. sa.Column("title", sa.String(length=256), nullable=False),
  38. sa.Column("source_type", sa.String(length=32), nullable=False),
  39. sa.Column("source_uri", sa.String(length=512), nullable=True),
  40. sa.Column("status", sa.String(length=32), nullable=False),
  41. sa.Column("content_text", sa.Text(), nullable=False),
  42. sa.Column("content_hash", sa.String(length=64), nullable=True),
  43. sa.Column("metadata_json", sa.JSON(), nullable=True),
  44. sa.Column("indexed_time", sa.DateTime(), nullable=True),
  45. sa.Column("id", sa.String(length=36), nullable=False),
  46. sa.Column("tenant_id", sa.String(length=36), nullable=False),
  47. sa.Column("created_by", sa.String(length=36), nullable=True),
  48. sa.Column("updated_by", sa.String(length=36), nullable=True),
  49. sa.Column("created_time", sa.DateTime(), nullable=False),
  50. sa.Column("updated_time", sa.DateTime(), nullable=False),
  51. sa.Column("deleted_time", sa.DateTime(), nullable=True),
  52. sa.Column("version", sa.Integer(), nullable=False),
  53. sa.PrimaryKeyConstraint("id"),
  54. )
  55. op.create_index(
  56. "ix_knowledge_document_knowledge_base_id",
  57. "knowledge_document",
  58. ["knowledge_base_id"],
  59. unique=False,
  60. )
  61. op.create_index(
  62. "ix_knowledge_document_source_type",
  63. "knowledge_document",
  64. ["source_type"],
  65. unique=False,
  66. )
  67. op.create_index("ix_knowledge_document_status", "knowledge_document", ["status"], unique=False)
  68. op.create_index(
  69. "ix_knowledge_document_content_hash",
  70. "knowledge_document",
  71. ["content_hash"],
  72. unique=False,
  73. )
  74. op.create_index(
  75. "ix_knowledge_document_tenant_id",
  76. "knowledge_document",
  77. ["tenant_id"],
  78. unique=False,
  79. )
  80. op.create_table(
  81. "knowledge_chunk",
  82. sa.Column("knowledge_base_id", sa.String(length=36), nullable=False),
  83. sa.Column("document_id", sa.String(length=36), nullable=False),
  84. sa.Column("chunk_index", sa.Integer(), nullable=False),
  85. sa.Column("content_text", sa.Text(), nullable=False),
  86. sa.Column("token_count", sa.Integer(), nullable=False),
  87. sa.Column("embedding_model", sa.String(length=64), nullable=True),
  88. sa.Column("embedding_json", sa.JSON(), nullable=True),
  89. sa.Column("metadata_json", sa.JSON(), nullable=True),
  90. sa.Column("id", sa.String(length=36), nullable=False),
  91. sa.Column("tenant_id", sa.String(length=36), nullable=False),
  92. sa.Column("created_by", sa.String(length=36), nullable=True),
  93. sa.Column("updated_by", sa.String(length=36), nullable=True),
  94. sa.Column("created_time", sa.DateTime(), nullable=False),
  95. sa.Column("updated_time", sa.DateTime(), nullable=False),
  96. sa.Column("deleted_time", sa.DateTime(), nullable=True),
  97. sa.Column("version", sa.Integer(), nullable=False),
  98. sa.PrimaryKeyConstraint("id"),
  99. )
  100. op.create_index(
  101. "ix_knowledge_chunk_knowledge_base_id",
  102. "knowledge_chunk",
  103. ["knowledge_base_id"],
  104. unique=False,
  105. )
  106. op.create_index(
  107. "ix_knowledge_chunk_document_id",
  108. "knowledge_chunk",
  109. ["document_id"],
  110. unique=False,
  111. )
  112. op.create_index(
  113. "ix_knowledge_chunk_embedding_model",
  114. "knowledge_chunk",
  115. ["embedding_model"],
  116. unique=False,
  117. )
  118. op.create_index("ix_knowledge_chunk_tenant_id", "knowledge_chunk", ["tenant_id"], unique=False)
  119. def downgrade() -> None:
  120. op.drop_index("ix_knowledge_chunk_tenant_id", table_name="knowledge_chunk")
  121. op.drop_index("ix_knowledge_chunk_embedding_model", table_name="knowledge_chunk")
  122. op.drop_index("ix_knowledge_chunk_document_id", table_name="knowledge_chunk")
  123. op.drop_index("ix_knowledge_chunk_knowledge_base_id", table_name="knowledge_chunk")
  124. op.drop_table("knowledge_chunk")
  125. op.drop_index("ix_knowledge_document_tenant_id", table_name="knowledge_document")
  126. op.drop_index("ix_knowledge_document_content_hash", table_name="knowledge_document")
  127. op.drop_index("ix_knowledge_document_status", table_name="knowledge_document")
  128. op.drop_index("ix_knowledge_document_source_type", table_name="knowledge_document")
  129. op.drop_index("ix_knowledge_document_knowledge_base_id", table_name="knowledge_document")
  130. op.drop_table("knowledge_document")
  131. op.drop_index("ix_knowledge_base_tenant_id", table_name="knowledge_base")
  132. op.drop_index("ix_knowledge_base_status", table_name="knowledge_base")
  133. op.drop_index("ix_knowledge_base_code", table_name="knowledge_base")
  134. op.drop_table("knowledge_base")