From f21782a9a3f72d5b56eb37aec241c6f357c8da14 Mon Sep 17 00:00:00 2001 From: QuantumGhost Date: Thu, 5 Feb 2026 13:28:39 +0800 Subject: [PATCH 1/5] fix(api): fix performance issue in ShardedRedisBroadcastChannel --- .../broadcast_channel/redis/_subscription.py | 3 + api/libs/broadcast_channel/redis/channel.py | 1 + .../redis/sharded_channel.py | 17 +- .../redis/test_channel_unit_tests.py | 84 +- api/upgrade.sql | 3289 +++++++++++++++++ 5 files changed, 3381 insertions(+), 13 deletions(-) create mode 100644 api/upgrade.sql diff --git a/api/libs/broadcast_channel/redis/_subscription.py b/api/libs/broadcast_channel/redis/_subscription.py index fa2be421a1..668de7b7e3 100644 --- a/api/libs/broadcast_channel/redis/_subscription.py +++ b/api/libs/broadcast_channel/redis/_subscription.py @@ -8,6 +8,7 @@ from typing import Self from libs.broadcast_channel.channel import Subscription from libs.broadcast_channel.exc import SubscriptionClosedError from redis.client import PubSub +from redis import Redis, RedisCluster _logger = logging.getLogger(__name__) @@ -22,10 +23,12 @@ class RedisSubscriptionBase(Subscription): def __init__( self, + client: Redis | RedisCluster, pubsub: PubSub, topic: str, ): # The _pubsub is None only if the subscription is closed. + self._client = client self._pubsub: PubSub | None = pubsub self._topic = topic self._closed = threading.Event() diff --git a/api/libs/broadcast_channel/redis/channel.py b/api/libs/broadcast_channel/redis/channel.py index 5bb4f579c1..51c86e0bd0 100644 --- a/api/libs/broadcast_channel/redis/channel.py +++ b/api/libs/broadcast_channel/redis/channel.py @@ -42,6 +42,7 @@ class Topic: def subscribe(self) -> Subscription: return _RedisSubscription( + client=self._client, pubsub=self._client.pubsub(), topic=self._topic, ) diff --git a/api/libs/broadcast_channel/redis/sharded_channel.py b/api/libs/broadcast_channel/redis/sharded_channel.py index 9e8ab90e8e..9a5fc9cdcf 100644 --- a/api/libs/broadcast_channel/redis/sharded_channel.py +++ b/api/libs/broadcast_channel/redis/sharded_channel.py @@ -1,7 +1,7 @@ from __future__ import annotations from libs.broadcast_channel.channel import Producer, Subscriber, Subscription -from redis import Redis +from redis import Redis, RedisCluster from ._subscription import RedisSubscriptionBase @@ -16,7 +16,7 @@ class ShardedRedisBroadcastChannel: def __init__( self, - redis_client: Redis, + redis_client: Redis | RedisCluster, ): self._client = redis_client @@ -25,7 +25,7 @@ class ShardedRedisBroadcastChannel: class ShardedTopic: - def __init__(self, redis_client: Redis, topic: str): + def __init__(self, redis_client: Redis | RedisCluster, topic: str): self._client = redis_client self._topic = topic @@ -40,6 +40,7 @@ class ShardedTopic: def subscribe(self) -> Subscription: return _RedisShardedSubscription( + client=self._client, pubsub=self._client.pubsub(), topic=self._topic, ) @@ -68,7 +69,15 @@ class _RedisShardedSubscription(RedisSubscriptionBase): # # Since we have already filtered at the caller's site, we can safely set # `ignore_subscribe_messages=False`. - return self._pubsub.get_sharded_message(ignore_subscribe_messages=False, timeout=0.1) # type: ignore[attr-defined] + if isinstance(self._client, RedisCluster): + node = self._client.get_node_from_key(self._topic) + return self._pubsub.get_sharded_message( + ignore_subscribe_messages=False, + timeout=0.1, + target_node=node, + ) + else: + return self._pubsub.get_sharded_message(ignore_subscribe_messages=False, timeout=0.1) # type: ignore[attr-defined] def _get_message_type(self) -> str: return "smessage" diff --git a/api/tests/unit_tests/libs/broadcast_channel/redis/test_channel_unit_tests.py b/api/tests/unit_tests/libs/broadcast_channel/redis/test_channel_unit_tests.py index ccba075fdf..54bb9954d5 100644 --- a/api/tests/unit_tests/libs/broadcast_channel/redis/test_channel_unit_tests.py +++ b/api/tests/unit_tests/libs/broadcast_channel/redis/test_channel_unit_tests.py @@ -181,6 +181,7 @@ class TestShardedTopic: subscription = sharded_topic.subscribe() assert isinstance(subscription, _RedisShardedSubscription) + assert subscription._client is mock_redis_client assert subscription._pubsub is mock_redis_client.pubsub.return_value assert subscription._topic == "test-sharded-topic" @@ -200,6 +201,11 @@ class SubscriptionTestCase: class TestRedisSubscription: """Test cases for the _RedisSubscription class.""" + @pytest.fixture + def mock_redis_client(self) -> MagicMock: + client = MagicMock() + return client + @pytest.fixture def mock_pubsub(self) -> MagicMock: """Create a mock PubSub instance for testing.""" @@ -211,9 +217,12 @@ class TestRedisSubscription: return pubsub @pytest.fixture - def subscription(self, mock_pubsub: MagicMock) -> Generator[_RedisSubscription, None, None]: + def subscription( + self, mock_pubsub: MagicMock, mock_redis_client: MagicMock + ) -> Generator[_RedisSubscription, None, None]: """Create a _RedisSubscription instance for testing.""" subscription = _RedisSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic="test-topic", ) @@ -228,13 +237,15 @@ class TestRedisSubscription: # ==================== Lifecycle Tests ==================== - def test_subscription_initialization(self, mock_pubsub: MagicMock): + def test_subscription_initialization(self, mock_pubsub: MagicMock, mock_redis_client: MagicMock): """Test that subscription is properly initialized.""" subscription = _RedisSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic="test-topic", ) + assert subscription._client is mock_redis_client assert subscription._pubsub is mock_pubsub assert subscription._topic == "test-topic" assert not subscription._closed.is_set() @@ -486,9 +497,12 @@ class TestRedisSubscription: ), ], ) - def test_subscription_scenarios(self, test_case: SubscriptionTestCase, mock_pubsub: MagicMock): + def test_subscription_scenarios( + self, test_case: SubscriptionTestCase, mock_pubsub: MagicMock, mock_redis_client: MagicMock + ): """Test various subscription scenarios using table-driven approach.""" subscription = _RedisSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic="test-topic", ) @@ -572,7 +586,7 @@ class TestRedisSubscription: # Close should still work subscription.close() # Should not raise - def test_channel_name_variations(self, mock_pubsub: MagicMock): + def test_channel_name_variations(self, mock_pubsub: MagicMock, mock_redis_client: MagicMock): """Test various channel name formats.""" channel_names = [ "simple", @@ -586,6 +600,7 @@ class TestRedisSubscription: for channel_name in channel_names: subscription = _RedisSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic=channel_name, ) @@ -604,6 +619,11 @@ class TestRedisSubscription: class TestRedisShardedSubscription: """Test cases for the _RedisShardedSubscription class.""" + @pytest.fixture + def mock_redis_client(self) -> MagicMock: + client = MagicMock() + return client + @pytest.fixture def mock_pubsub(self) -> MagicMock: """Create a mock PubSub instance for testing.""" @@ -615,9 +635,12 @@ class TestRedisShardedSubscription: return pubsub @pytest.fixture - def sharded_subscription(self, mock_pubsub: MagicMock) -> Generator[_RedisShardedSubscription, None, None]: + def sharded_subscription( + self, mock_pubsub: MagicMock, mock_redis_client: MagicMock + ) -> Generator[_RedisShardedSubscription, None, None]: """Create a _RedisShardedSubscription instance for testing.""" subscription = _RedisShardedSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic="test-sharded-topic", ) @@ -634,13 +657,15 @@ class TestRedisShardedSubscription: # ==================== Lifecycle Tests ==================== - def test_sharded_subscription_initialization(self, mock_pubsub: MagicMock): + def test_sharded_subscription_initialization(self, mock_pubsub: MagicMock, mock_redis_client: MagicMock): """Test that sharded subscription is properly initialized.""" subscription = _RedisShardedSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic="test-sharded-topic", ) + assert subscription._client is mock_redis_client assert subscription._pubsub is mock_pubsub assert subscription._topic == "test-sharded-topic" assert not subscription._closed.is_set() @@ -808,6 +833,37 @@ class TestRedisShardedSubscription: assert not sharded_subscription._queue.empty() assert sharded_subscription._queue.get_nowait() == b"test sharded payload" + def test_get_message_uses_target_node_for_cluster_client(self, mock_pubsub: MagicMock, monkeypatch): + """Test that cluster clients use target_node for sharded messages.""" + + class DummyRedisCluster: + def __init__(self): + self.get_node_from_key = MagicMock(return_value="node-1") + + monkeypatch.setattr("libs.broadcast_channel.redis.sharded_channel.RedisCluster", DummyRedisCluster) + + client = DummyRedisCluster() + subscription = _RedisShardedSubscription( + client=client, + pubsub=mock_pubsub, + topic="test-sharded-topic", + ) + mock_pubsub.get_sharded_message.return_value = { + "type": "smessage", + "channel": "test-sharded-topic", + "data": b"payload", + } + + result = subscription._get_message() + + client.get_node_from_key.assert_called_once_with("test-sharded-topic") + mock_pubsub.get_sharded_message.assert_called_once_with( + ignore_subscribe_messages=False, + timeout=0.1, + target_node="node-1", + ) + assert result == mock_pubsub.get_sharded_message.return_value + def test_listener_thread_ignores_subscribe_messages( self, sharded_subscription: _RedisShardedSubscription, mock_pubsub: MagicMock ): @@ -913,9 +969,12 @@ class TestRedisShardedSubscription: ), ], ) - def test_sharded_subscription_scenarios(self, test_case: SubscriptionTestCase, mock_pubsub: MagicMock): + def test_sharded_subscription_scenarios( + self, test_case: SubscriptionTestCase, mock_pubsub: MagicMock, mock_redis_client: MagicMock + ): """Test various sharded subscription scenarios using table-driven approach.""" subscription = _RedisShardedSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic="test-sharded-topic", ) @@ -999,7 +1058,7 @@ class TestRedisShardedSubscription: # Close should still work sharded_subscription.close() # Should not raise - def test_channel_name_variations(self, mock_pubsub: MagicMock): + def test_channel_name_variations(self, mock_pubsub: MagicMock, mock_redis_client: MagicMock): """Test various sharded channel name formats.""" channel_names = [ "simple", @@ -1013,6 +1072,7 @@ class TestRedisShardedSubscription: for channel_name in channel_names: subscription = _RedisShardedSubscription( + client=mock_redis_client, pubsub=mock_pubsub, topic=channel_name, ) @@ -1060,6 +1120,11 @@ class TestRedisSubscriptionCommon: """Parameterized fixture providing subscription type and class.""" return request.param + @pytest.fixture + def mock_redis_client(self) -> MagicMock: + client = MagicMock() + return client + @pytest.fixture def mock_pubsub(self) -> MagicMock: """Create a mock PubSub instance for testing.""" @@ -1075,11 +1140,12 @@ class TestRedisSubscriptionCommon: return pubsub @pytest.fixture - def subscription(self, subscription_params, mock_pubsub: MagicMock): + def subscription(self, subscription_params, mock_pubsub: MagicMock, mock_redis_client: MagicMock): """Create a subscription instance based on parameterized type.""" subscription_type, subscription_class = subscription_params topic_name = f"test-{subscription_type}-topic" subscription = subscription_class( + client=mock_redis_client, pubsub=mock_pubsub, topic=topic_name, ) diff --git a/api/upgrade.sql b/api/upgrade.sql new file mode 100644 index 0000000000..3cd0cfdab0 --- /dev/null +++ b/api/upgrade.sql @@ -0,0 +1,3289 @@ +BEGIN; + +CREATE TABLE alembic_version ( + version_num VARCHAR(32) NOT NULL, + CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num) +); + +-- Running upgrade -> 64b051264f32 + +CREATE EXTENSION IF NOT EXISTS "uuid-ossp";; + +CREATE TABLE account_integrates ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + account_id UUID NOT NULL, + provider VARCHAR(16) NOT NULL, + open_id VARCHAR(255) NOT NULL, + encrypted_token VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT account_integrate_pkey PRIMARY KEY (id), + CONSTRAINT unique_account_provider UNIQUE (account_id, provider), + CONSTRAINT unique_provider_open_id UNIQUE (provider, open_id) +); + +CREATE TABLE accounts ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(255) NOT NULL, + email VARCHAR(255) NOT NULL, + password VARCHAR(255), + password_salt VARCHAR(255), + avatar VARCHAR(255), + interface_language VARCHAR(255), + interface_theme VARCHAR(255), + timezone VARCHAR(255), + last_login_at TIMESTAMP WITHOUT TIME ZONE, + last_login_ip VARCHAR(255), + status VARCHAR(16) DEFAULT 'active'::character varying NOT NULL, + initialized_at TIMESTAMP WITHOUT TIME ZONE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT account_pkey PRIMARY KEY (id) +); + +CREATE INDEX account_email_idx ON accounts (email); + +CREATE TABLE api_requests ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + api_token_id UUID NOT NULL, + path VARCHAR(255) NOT NULL, + request TEXT, + response TEXT, + ip VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT api_request_pkey PRIMARY KEY (id) +); + +CREATE INDEX api_request_token_idx ON api_requests (tenant_id, api_token_id); + +CREATE TABLE api_tokens ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID, + dataset_id UUID, + type VARCHAR(16) NOT NULL, + token VARCHAR(255) NOT NULL, + last_used_at TIMESTAMP WITHOUT TIME ZONE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT api_token_pkey PRIMARY KEY (id) +); + +CREATE INDEX api_token_app_id_type_idx ON api_tokens (app_id, type); + +CREATE INDEX api_token_token_idx ON api_tokens (token, type); + +CREATE TABLE app_dataset_joins ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + dataset_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT app_dataset_join_pkey PRIMARY KEY (id) +); + +CREATE INDEX app_dataset_join_app_dataset_idx ON app_dataset_joins (dataset_id, app_id); + +CREATE TABLE app_model_configs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + provider VARCHAR(255) NOT NULL, + model_id VARCHAR(255) NOT NULL, + configs JSON NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + opening_statement TEXT, + suggested_questions TEXT, + suggested_questions_after_answer TEXT, + more_like_this TEXT, + model TEXT, + user_input_form TEXT, + pre_prompt TEXT, + agent_mode TEXT, + CONSTRAINT app_model_config_pkey PRIMARY KEY (id) +); + +CREATE INDEX app_app_id_idx ON app_model_configs (app_id); + +CREATE TABLE apps ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + mode VARCHAR(255) NOT NULL, + icon VARCHAR(255), + icon_background VARCHAR(255), + app_model_config_id UUID, + status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, + enable_site BOOLEAN NOT NULL, + enable_api BOOLEAN NOT NULL, + api_rpm INTEGER NOT NULL, + api_rph INTEGER NOT NULL, + is_demo BOOLEAN DEFAULT false NOT NULL, + is_public BOOLEAN DEFAULT false NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT app_pkey PRIMARY KEY (id) +); + +CREATE INDEX app_tenant_id_idx ON apps (tenant_id); + +CREATE SEQUENCE task_id_sequence;; + +CREATE SEQUENCE taskset_id_sequence;; + +CREATE TABLE celery_taskmeta ( + id INTEGER DEFAULT nextval('task_id_sequence') NOT NULL, + task_id VARCHAR(155), + status VARCHAR(50), + result BYTEA, + date_done TIMESTAMP WITHOUT TIME ZONE, + traceback TEXT, + name VARCHAR(155), + args BYTEA, + kwargs BYTEA, + worker VARCHAR(155), + retries INTEGER, + queue VARCHAR(155), + CONSTRAINT celery_taskmeta_pkey PRIMARY KEY (id), + CONSTRAINT celery_taskmeta_task_id_key UNIQUE (task_id) +); + +CREATE TABLE celery_tasksetmeta ( + id INTEGER DEFAULT nextval('taskset_id_sequence') NOT NULL, + taskset_id VARCHAR(155), + result BYTEA, + date_done TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT celery_tasksetmeta_pkey PRIMARY KEY (id), + CONSTRAINT celery_tasksetmeta_taskset_id_key UNIQUE (taskset_id) +); + +CREATE TABLE conversations ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + app_model_config_id UUID NOT NULL, + model_provider VARCHAR(255) NOT NULL, + override_model_configs TEXT, + model_id VARCHAR(255) NOT NULL, + mode VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + summary TEXT, + inputs JSON, + introduction TEXT, + system_instruction TEXT, + system_instruction_tokens INTEGER DEFAULT 0 NOT NULL, + status VARCHAR(255) NOT NULL, + from_source VARCHAR(255) NOT NULL, + from_end_user_id UUID, + from_account_id UUID, + read_at TIMESTAMP WITHOUT TIME ZONE, + read_account_id UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT conversation_pkey PRIMARY KEY (id) +); + +CREATE INDEX conversation_app_from_user_idx ON conversations (app_id, from_source, from_end_user_id); + +CREATE TABLE dataset_keyword_tables ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + dataset_id UUID NOT NULL, + keyword_table TEXT NOT NULL, + CONSTRAINT dataset_keyword_table_pkey PRIMARY KEY (id), + CONSTRAINT dataset_keyword_tables_dataset_id_key UNIQUE (dataset_id) +); + +CREATE INDEX dataset_keyword_table_dataset_id_idx ON dataset_keyword_tables (dataset_id); + +CREATE TABLE dataset_process_rules ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + dataset_id UUID NOT NULL, + mode VARCHAR(255) DEFAULT 'automatic'::character varying NOT NULL, + rules TEXT, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT dataset_process_rule_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_process_rule_dataset_id_idx ON dataset_process_rules (dataset_id); + +CREATE TABLE dataset_queries ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + dataset_id UUID NOT NULL, + content TEXT NOT NULL, + source VARCHAR(255) NOT NULL, + source_app_id UUID, + created_by_role VARCHAR NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT dataset_query_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_query_dataset_id_idx ON dataset_queries (dataset_id); + +CREATE TABLE datasets ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + description TEXT, + provider VARCHAR(255) DEFAULT 'vendor'::character varying NOT NULL, + permission VARCHAR(255) DEFAULT 'only_me'::character varying NOT NULL, + data_source_type VARCHAR(255), + indexing_technique VARCHAR(255), + index_struct TEXT, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_by UUID, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT dataset_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_tenant_idx ON datasets (tenant_id); + +CREATE TABLE dify_setups ( + version VARCHAR(255) NOT NULL, + setup_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT dify_setup_pkey PRIMARY KEY (version) +); + +CREATE TABLE document_segments ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + document_id UUID NOT NULL, + position INTEGER NOT NULL, + content TEXT NOT NULL, + word_count INTEGER NOT NULL, + tokens INTEGER NOT NULL, + keywords JSON, + index_node_id VARCHAR(255), + index_node_hash VARCHAR(255), + hit_count INTEGER NOT NULL, + enabled BOOLEAN DEFAULT true NOT NULL, + disabled_at TIMESTAMP WITHOUT TIME ZONE, + disabled_by UUID, + status VARCHAR(255) DEFAULT 'waiting'::character varying NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + indexing_at TIMESTAMP WITHOUT TIME ZONE, + completed_at TIMESTAMP WITHOUT TIME ZONE, + error TEXT, + stopped_at TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT document_segment_pkey PRIMARY KEY (id) +); + +CREATE INDEX document_segment_dataset_id_idx ON document_segments (dataset_id); + +CREATE INDEX document_segment_dataset_node_idx ON document_segments (dataset_id, index_node_id); + +CREATE INDEX document_segment_document_id_idx ON document_segments (document_id); + +CREATE INDEX document_segment_tenant_dataset_idx ON document_segments (dataset_id, tenant_id); + +CREATE INDEX document_segment_tenant_document_idx ON document_segments (document_id, tenant_id); + +CREATE TABLE documents ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + position INTEGER NOT NULL, + data_source_type VARCHAR(255) NOT NULL, + data_source_info TEXT, + dataset_process_rule_id UUID, + batch VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + created_from VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + created_api_request_id UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + processing_started_at TIMESTAMP WITHOUT TIME ZONE, + file_id TEXT, + word_count INTEGER, + parsing_completed_at TIMESTAMP WITHOUT TIME ZONE, + cleaning_completed_at TIMESTAMP WITHOUT TIME ZONE, + splitting_completed_at TIMESTAMP WITHOUT TIME ZONE, + tokens INTEGER, + indexing_latency FLOAT, + completed_at TIMESTAMP WITHOUT TIME ZONE, + is_paused BOOLEAN DEFAULT false, + paused_by UUID, + paused_at TIMESTAMP WITHOUT TIME ZONE, + error TEXT, + stopped_at TIMESTAMP WITHOUT TIME ZONE, + indexing_status VARCHAR(255) DEFAULT 'waiting'::character varying NOT NULL, + enabled BOOLEAN DEFAULT true NOT NULL, + disabled_at TIMESTAMP WITHOUT TIME ZONE, + disabled_by UUID, + archived BOOLEAN DEFAULT false NOT NULL, + archived_reason VARCHAR(255), + archived_by UUID, + archived_at TIMESTAMP WITHOUT TIME ZONE, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + doc_type VARCHAR(40), + doc_metadata JSON, + CONSTRAINT document_pkey PRIMARY KEY (id) +); + +CREATE INDEX document_dataset_id_idx ON documents (dataset_id); + +CREATE INDEX document_is_paused_idx ON documents (is_paused); + +CREATE TABLE embeddings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + hash VARCHAR(64) NOT NULL, + embedding BYTEA NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT embedding_pkey PRIMARY KEY (id), + CONSTRAINT embedding_hash_idx UNIQUE (hash) +); + +CREATE TABLE end_users ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID, + type VARCHAR(255) NOT NULL, + external_user_id VARCHAR(255), + name VARCHAR(255), + is_anonymous BOOLEAN DEFAULT true NOT NULL, + session_id VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT end_user_pkey PRIMARY KEY (id) +); + +CREATE INDEX end_user_session_id_idx ON end_users (session_id, type); + +CREATE INDEX end_user_tenant_session_id_idx ON end_users (tenant_id, session_id, type); + +CREATE TABLE installed_apps ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + app_owner_tenant_id UUID NOT NULL, + position INTEGER NOT NULL, + is_pinned BOOLEAN DEFAULT false NOT NULL, + last_used_at TIMESTAMP WITHOUT TIME ZONE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT installed_app_pkey PRIMARY KEY (id), + CONSTRAINT unique_tenant_app UNIQUE (tenant_id, app_id) +); + +CREATE INDEX installed_app_app_id_idx ON installed_apps (app_id); + +CREATE INDEX installed_app_tenant_id_idx ON installed_apps (tenant_id); + +CREATE TABLE invitation_codes ( + id SERIAL NOT NULL, + batch VARCHAR(255) NOT NULL, + code VARCHAR(32) NOT NULL, + status VARCHAR(16) DEFAULT 'unused'::character varying NOT NULL, + used_at TIMESTAMP WITHOUT TIME ZONE, + used_by_tenant_id UUID, + used_by_account_id UUID, + deprecated_at TIMESTAMP WITHOUT TIME ZONE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT invitation_code_pkey PRIMARY KEY (id) +); + +CREATE INDEX invitation_codes_batch_idx ON invitation_codes (batch); + +CREATE INDEX invitation_codes_code_idx ON invitation_codes (code, status); + +CREATE TABLE message_agent_thoughts ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + message_id UUID NOT NULL, + message_chain_id UUID NOT NULL, + position INTEGER NOT NULL, + thought TEXT, + tool TEXT, + tool_input TEXT, + observation TEXT, + tool_process_data TEXT, + message TEXT, + message_token INTEGER, + message_unit_price NUMERIC, + answer TEXT, + answer_token INTEGER, + answer_unit_price NUMERIC, + tokens INTEGER, + total_price NUMERIC, + currency VARCHAR, + latency FLOAT, + created_by_role VARCHAR NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT message_agent_thought_pkey PRIMARY KEY (id) +); + +CREATE INDEX message_agent_thought_message_chain_id_idx ON message_agent_thoughts (message_chain_id); + +CREATE INDEX message_agent_thought_message_id_idx ON message_agent_thoughts (message_id); + +CREATE TABLE message_chains ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + message_id UUID NOT NULL, + type VARCHAR(255) NOT NULL, + input TEXT, + output TEXT, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT message_chain_pkey PRIMARY KEY (id) +); + +CREATE INDEX message_chain_message_id_idx ON message_chains (message_id); + +CREATE TABLE message_feedbacks ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + conversation_id UUID NOT NULL, + message_id UUID NOT NULL, + rating VARCHAR(255) NOT NULL, + content TEXT, + from_source VARCHAR(255) NOT NULL, + from_end_user_id UUID, + from_account_id UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT message_feedback_pkey PRIMARY KEY (id) +); + +CREATE INDEX message_feedback_app_idx ON message_feedbacks (app_id); + +CREATE INDEX message_feedback_conversation_idx ON message_feedbacks (conversation_id, from_source, rating); + +CREATE INDEX message_feedback_message_idx ON message_feedbacks (message_id, from_source); + +CREATE TABLE operation_logs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + account_id UUID NOT NULL, + action VARCHAR(255) NOT NULL, + content JSON, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + created_ip VARCHAR(255) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT operation_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX operation_log_account_action_idx ON operation_logs (tenant_id, account_id, action); + +CREATE TABLE pinned_conversations ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + conversation_id UUID NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT pinned_conversation_pkey PRIMARY KEY (id) +); + +CREATE INDEX pinned_conversation_conversation_idx ON pinned_conversations (app_id, conversation_id, created_by); + +CREATE TABLE providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(40) NOT NULL, + provider_type VARCHAR(40) DEFAULT 'custom'::character varying NOT NULL, + encrypted_config TEXT, + is_valid BOOLEAN DEFAULT false NOT NULL, + last_used TIMESTAMP WITHOUT TIME ZONE, + quota_type VARCHAR(40) DEFAULT ''::character varying, + quota_limit INTEGER, + quota_used INTEGER, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT provider_pkey PRIMARY KEY (id), + CONSTRAINT unique_provider_name_type_quota UNIQUE (tenant_id, provider_name, provider_type, quota_type) +); + +CREATE INDEX provider_tenant_id_provider_idx ON providers (tenant_id, provider_name); + +CREATE TABLE recommended_apps ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + description JSON NOT NULL, + copyright VARCHAR(255) NOT NULL, + privacy_policy VARCHAR(255) NOT NULL, + category VARCHAR(255) NOT NULL, + position INTEGER NOT NULL, + is_listed BOOLEAN NOT NULL, + install_count INTEGER NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT recommended_app_pkey PRIMARY KEY (id) +); + +CREATE INDEX recommended_app_app_id_idx ON recommended_apps (app_id); + +CREATE INDEX recommended_app_is_listed_idx ON recommended_apps (is_listed); + +CREATE TABLE saved_messages ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + message_id UUID NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT saved_message_pkey PRIMARY KEY (id) +); + +CREATE INDEX saved_message_message_idx ON saved_messages (app_id, message_id, created_by); + +CREATE TABLE sessions ( + id SERIAL NOT NULL, + session_id VARCHAR(255), + data BYTEA, + expiry TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT sessions_pkey PRIMARY KEY (id), + CONSTRAINT sessions_session_id_key UNIQUE (session_id) +); + +CREATE TABLE sites ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + title VARCHAR(255) NOT NULL, + icon VARCHAR(255), + icon_background VARCHAR(255), + description VARCHAR(255), + default_language VARCHAR(255) NOT NULL, + copyright VARCHAR(255), + privacy_policy VARCHAR(255), + customize_domain VARCHAR(255), + customize_token_strategy VARCHAR(255) NOT NULL, + prompt_public BOOLEAN DEFAULT false NOT NULL, + status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + code VARCHAR(255), + CONSTRAINT site_pkey PRIMARY KEY (id) +); + +CREATE INDEX site_app_id_idx ON sites (app_id); + +CREATE INDEX site_code_idx ON sites (code, status); + +CREATE TABLE tenant_account_joins ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + account_id UUID NOT NULL, + role VARCHAR(16) DEFAULT 'normal' NOT NULL, + invited_by UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tenant_account_join_pkey PRIMARY KEY (id), + CONSTRAINT unique_tenant_account_join UNIQUE (tenant_id, account_id) +); + +CREATE INDEX tenant_account_join_account_id_idx ON tenant_account_joins (account_id); + +CREATE INDEX tenant_account_join_tenant_id_idx ON tenant_account_joins (tenant_id); + +CREATE TABLE tenants ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(255) NOT NULL, + encrypt_public_key TEXT, + plan VARCHAR(255) DEFAULT 'basic'::character varying NOT NULL, + status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tenant_pkey PRIMARY KEY (id) +); + +CREATE TABLE upload_files ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + storage_type VARCHAR(255) NOT NULL, + key VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + size INTEGER NOT NULL, + extension VARCHAR(255) NOT NULL, + mime_type VARCHAR(255), + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + used BOOLEAN DEFAULT false NOT NULL, + used_by UUID, + used_at TIMESTAMP WITHOUT TIME ZONE, + hash VARCHAR(255), + CONSTRAINT upload_file_pkey PRIMARY KEY (id) +); + +CREATE INDEX upload_file_tenant_idx ON upload_files (tenant_id); + +CREATE TABLE message_annotations ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + conversation_id UUID NOT NULL, + message_id UUID NOT NULL, + content TEXT NOT NULL, + account_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT message_annotation_pkey PRIMARY KEY (id) +); + +CREATE INDEX message_annotation_app_idx ON message_annotations (app_id); + +CREATE INDEX message_annotation_conversation_idx ON message_annotations (conversation_id); + +CREATE INDEX message_annotation_message_idx ON message_annotations (message_id); + +CREATE TABLE messages ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + model_provider VARCHAR(255) NOT NULL, + model_id VARCHAR(255) NOT NULL, + override_model_configs TEXT, + conversation_id UUID NOT NULL, + inputs JSON, + query TEXT NOT NULL, + message JSON NOT NULL, + message_tokens INTEGER DEFAULT 0 NOT NULL, + message_unit_price NUMERIC(10, 4) NOT NULL, + answer TEXT NOT NULL, + answer_tokens INTEGER DEFAULT 0 NOT NULL, + answer_unit_price NUMERIC(10, 4) NOT NULL, + provider_response_latency FLOAT DEFAULT 0 NOT NULL, + total_price NUMERIC(10, 7), + currency VARCHAR(255) NOT NULL, + from_source VARCHAR(255) NOT NULL, + from_end_user_id UUID, + from_account_id UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + agent_based BOOLEAN DEFAULT false NOT NULL, + CONSTRAINT message_pkey PRIMARY KEY (id) +); + +CREATE INDEX message_account_idx ON messages (app_id, from_source, from_account_id); + +CREATE INDEX message_app_id_idx ON messages (app_id, created_at); + +CREATE INDEX message_conversation_id_idx ON messages (conversation_id); + +CREATE INDEX message_end_user_idx ON messages (app_id, from_source, from_end_user_id); + +INSERT INTO alembic_version (version_num) VALUES ('64b051264f32') RETURNING alembic_version.version_num; + +-- Running upgrade 64b051264f32 -> 9f4e3427ea84 + +ALTER TABLE pinned_conversations ADD COLUMN created_by_role VARCHAR(255) DEFAULT 'end_user'::character varying NOT NULL; + +DROP INDEX pinned_conversation_conversation_idx; + +CREATE INDEX pinned_conversation_conversation_idx ON pinned_conversations (app_id, conversation_id, created_by_role, created_by); + +ALTER TABLE saved_messages ADD COLUMN created_by_role VARCHAR(255) DEFAULT 'end_user'::character varying NOT NULL; + +DROP INDEX saved_message_message_idx; + +CREATE INDEX saved_message_message_idx ON saved_messages (app_id, message_id, created_by_role, created_by); + +UPDATE alembic_version SET version_num='9f4e3427ea84' WHERE alembic_version.version_num = '64b051264f32'; + +-- Running upgrade 9f4e3427ea84 -> a45f4dfde53b + +ALTER TABLE recommended_apps ADD COLUMN language VARCHAR(255) DEFAULT 'en-US'::character varying NOT NULL; + +DROP INDEX recommended_app_is_listed_idx; + +CREATE INDEX recommended_app_is_listed_idx ON recommended_apps (is_listed, language); + +UPDATE alembic_version SET version_num='a45f4dfde53b' WHERE alembic_version.version_num = '9f4e3427ea84'; + +-- Running upgrade a45f4dfde53b -> 614f77cecc48 + +ALTER TABLE accounts ADD COLUMN last_active_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; + +UPDATE alembic_version SET version_num='614f77cecc48' WHERE alembic_version.version_num = 'a45f4dfde53b'; + +-- Running upgrade 614f77cecc48 -> e32f6ccb87c6 + +CREATE TABLE data_source_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + access_token VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + source_info JSONB NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + disabled BOOLEAN DEFAULT false, + CONSTRAINT source_binding_pkey PRIMARY KEY (id) +); + +CREATE INDEX source_binding_tenant_id_idx ON data_source_bindings (tenant_id); + +CREATE INDEX source_info_idx ON data_source_bindings USING gin (source_info); + +UPDATE alembic_version SET version_num='e32f6ccb87c6' WHERE alembic_version.version_num = '614f77cecc48'; + +-- Running upgrade e32f6ccb87c6 -> d3d503a3471c + +ALTER TABLE conversations ADD COLUMN is_deleted BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='d3d503a3471c' WHERE alembic_version.version_num = 'e32f6ccb87c6'; + +-- Running upgrade d3d503a3471c -> a5b56fb053ef + +ALTER TABLE app_model_configs ADD COLUMN speech_to_text TEXT; + +UPDATE alembic_version SET version_num='a5b56fb053ef' WHERE alembic_version.version_num = 'd3d503a3471c'; + +-- Running upgrade a5b56fb053ef -> 2beac44e5f5f + +ALTER TABLE apps ADD COLUMN is_universal BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='2beac44e5f5f' WHERE alembic_version.version_num = 'a5b56fb053ef'; + +-- Running upgrade 2beac44e5f5f -> 7ce5a52e4eee + +CREATE TABLE tool_providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + tool_name VARCHAR(40) NOT NULL, + encrypted_credentials TEXT, + is_enabled BOOLEAN DEFAULT false NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tool_provider_pkey PRIMARY KEY (id), + CONSTRAINT unique_tool_provider_tool_name UNIQUE (tenant_id, tool_name) +); + +ALTER TABLE app_model_configs ADD COLUMN sensitive_word_avoidance TEXT; + +UPDATE alembic_version SET version_num='7ce5a52e4eee' WHERE alembic_version.version_num = '2beac44e5f5f'; + +-- Running upgrade 7ce5a52e4eee -> 8d2d099ceb74 + +ALTER TABLE document_segments ADD COLUMN answer TEXT; + +ALTER TABLE document_segments ADD COLUMN updated_by UUID; + +ALTER TABLE document_segments ADD COLUMN updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; + +ALTER TABLE documents ADD COLUMN doc_form VARCHAR(255) DEFAULT 'text_model'::character varying NOT NULL; + +UPDATE alembic_version SET version_num='8d2d099ceb74' WHERE alembic_version.version_num = '7ce5a52e4eee'; + +-- Running upgrade 8d2d099ceb74 -> 16fa53d9faec + +CREATE TABLE provider_models ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(40) NOT NULL, + model_name VARCHAR(40) NOT NULL, + model_type VARCHAR(40) NOT NULL, + encrypted_config TEXT, + is_valid BOOLEAN DEFAULT false NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT provider_model_pkey PRIMARY KEY (id), + CONSTRAINT unique_provider_model_name UNIQUE (tenant_id, provider_name, model_name, model_type) +); + +CREATE INDEX provider_model_tenant_id_provider_idx ON provider_models (tenant_id, provider_name); + +CREATE TABLE tenant_default_models ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(40) NOT NULL, + model_name VARCHAR(40) NOT NULL, + model_type VARCHAR(40) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tenant_default_model_pkey PRIMARY KEY (id) +); + +CREATE INDEX tenant_default_model_tenant_id_provider_type_idx ON tenant_default_models (tenant_id, provider_name, model_type); + +CREATE TABLE tenant_preferred_model_providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(40) NOT NULL, + preferred_provider_type VARCHAR(40) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tenant_preferred_model_provider_pkey PRIMARY KEY (id) +); + +CREATE INDEX tenant_preferred_model_provider_tenant_provider_idx ON tenant_preferred_model_providers (tenant_id, provider_name); + +UPDATE alembic_version SET version_num='16fa53d9faec' WHERE alembic_version.version_num = '8d2d099ceb74'; + +-- Running upgrade 16fa53d9faec -> e35ed59becda + +ALTER TABLE providers ALTER COLUMN quota_limit TYPE BIGINT; + +ALTER TABLE providers ALTER COLUMN quota_used TYPE BIGINT; + +UPDATE alembic_version SET version_num='e35ed59becda' WHERE alembic_version.version_num = '16fa53d9faec'; + +-- Running upgrade e35ed59becda -> bf0aec5ba2cf + +CREATE TABLE provider_orders ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(40) NOT NULL, + account_id UUID NOT NULL, + payment_product_id VARCHAR(191) NOT NULL, + payment_id VARCHAR(191), + transaction_id VARCHAR(191), + quantity INTEGER DEFAULT 1 NOT NULL, + currency VARCHAR(40), + total_amount INTEGER, + payment_status VARCHAR(40) DEFAULT 'wait_pay'::character varying NOT NULL, + paid_at TIMESTAMP WITHOUT TIME ZONE, + pay_failed_at TIMESTAMP WITHOUT TIME ZONE, + refunded_at TIMESTAMP WITHOUT TIME ZONE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT provider_order_pkey PRIMARY KEY (id) +); + +CREATE INDEX provider_order_tenant_provider_idx ON provider_orders (tenant_id, provider_name); + +UPDATE alembic_version SET version_num='bf0aec5ba2cf' WHERE alembic_version.version_num = 'e35ed59becda'; + +-- Running upgrade bf0aec5ba2cf -> 5022897aaceb + +ALTER TABLE embeddings ADD COLUMN model_name VARCHAR(40) DEFAULT 'text-embedding-ada-002'::character varying NOT NULL; + +ALTER TABLE embeddings DROP CONSTRAINT embedding_hash_idx; + +ALTER TABLE embeddings ADD CONSTRAINT embedding_hash_idx UNIQUE (model_name, hash); + +UPDATE alembic_version SET version_num='5022897aaceb' WHERE alembic_version.version_num = 'bf0aec5ba2cf'; + +-- Running upgrade 5022897aaceb -> 2c8af9671032 + +ALTER TABLE documents ADD COLUMN doc_language VARCHAR(255); + +UPDATE alembic_version SET version_num='2c8af9671032' WHERE alembic_version.version_num = '5022897aaceb'; + +-- Running upgrade 2c8af9671032 -> e8883b0148c9 + +ALTER TABLE datasets ADD COLUMN embedding_model VARCHAR(255) DEFAULT 'text-embedding-ada-002'::character varying NOT NULL; + +ALTER TABLE datasets ADD COLUMN embedding_model_provider VARCHAR(255) DEFAULT 'openai'::character varying NOT NULL; + +UPDATE alembic_version SET version_num='e8883b0148c9' WHERE alembic_version.version_num = '2c8af9671032'; + +-- Running upgrade e8883b0148c9 -> 853f9b9cd3b6 + +ALTER TABLE message_agent_thoughts ADD COLUMN message_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; + +ALTER TABLE message_agent_thoughts ADD COLUMN answer_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; + +ALTER TABLE messages ADD COLUMN message_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; + +ALTER TABLE messages ADD COLUMN answer_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; + +UPDATE alembic_version SET version_num='853f9b9cd3b6' WHERE alembic_version.version_num = 'e8883b0148c9'; + +-- Running upgrade 853f9b9cd3b6 -> 4bcffcd64aa4 + +ALTER TABLE datasets ALTER COLUMN embedding_model DROP NOT NULL; + +ALTER TABLE datasets ALTER COLUMN embedding_model_provider DROP NOT NULL; + +UPDATE alembic_version SET version_num='4bcffcd64aa4' WHERE alembic_version.version_num = '853f9b9cd3b6'; + +-- Running upgrade 4bcffcd64aa4 -> 6dcb43972bdc + +CREATE TABLE dataset_retriever_resources ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + message_id UUID NOT NULL, + position INTEGER NOT NULL, + dataset_id UUID NOT NULL, + dataset_name TEXT NOT NULL, + document_id UUID NOT NULL, + document_name TEXT NOT NULL, + data_source_type TEXT NOT NULL, + segment_id UUID NOT NULL, + score FLOAT, + content TEXT NOT NULL, + hit_count INTEGER, + word_count INTEGER, + segment_position INTEGER, + index_node_hash TEXT, + retriever_from TEXT NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT dataset_retriever_resource_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_retriever_resource_message_id_idx ON dataset_retriever_resources (message_id); + +UPDATE alembic_version SET version_num='6dcb43972bdc' WHERE alembic_version.version_num = '4bcffcd64aa4'; + +-- Running upgrade 6dcb43972bdc -> 77e83833755c + +ALTER TABLE app_model_configs ADD COLUMN retriever_resource TEXT; + +UPDATE alembic_version SET version_num='77e83833755c' WHERE alembic_version.version_num = '6dcb43972bdc'; + +-- Running upgrade 77e83833755c -> 6e2cfb077b04 + +CREATE TABLE dataset_collection_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + provider_name VARCHAR(40) NOT NULL, + model_name VARCHAR(40) NOT NULL, + collection_name VARCHAR(64) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT dataset_collection_bindings_pkey PRIMARY KEY (id) +); + +CREATE INDEX provider_model_name_idx ON dataset_collection_bindings (provider_name, model_name); + +ALTER TABLE datasets ADD COLUMN collection_binding_id UUID; + +UPDATE alembic_version SET version_num='6e2cfb077b04' WHERE alembic_version.version_num = '77e83833755c'; + +-- Running upgrade 6e2cfb077b04 -> ab23c11305d4 + +ALTER TABLE app_model_configs ADD COLUMN dataset_query_variable VARCHAR(255); + +UPDATE alembic_version SET version_num='ab23c11305d4' WHERE alembic_version.version_num = '6e2cfb077b04'; + +-- Running upgrade ab23c11305d4 -> 2e9819ca5b28 + +ALTER TABLE api_tokens ADD COLUMN tenant_id UUID; + +CREATE INDEX api_token_tenant_idx ON api_tokens (tenant_id, type); + +ALTER TABLE api_tokens DROP COLUMN dataset_id; + +UPDATE alembic_version SET version_num='2e9819ca5b28' WHERE alembic_version.version_num = 'ab23c11305d4'; + +-- Running upgrade 2e9819ca5b28 -> b3a09c049e8e + +ALTER TABLE app_model_configs ADD COLUMN prompt_type VARCHAR(255) DEFAULT 'simple' NOT NULL; + +ALTER TABLE app_model_configs ADD COLUMN chat_prompt_config TEXT; + +ALTER TABLE app_model_configs ADD COLUMN completion_prompt_config TEXT; + +ALTER TABLE app_model_configs ADD COLUMN dataset_configs TEXT; + +UPDATE alembic_version SET version_num='b3a09c049e8e' WHERE alembic_version.version_num = '2e9819ca5b28'; + +-- Running upgrade b3a09c049e8e -> 968fff4c0ab9 + +CREATE TABLE api_based_extensions ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + api_endpoint VARCHAR(255) NOT NULL, + api_key TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT api_based_extension_pkey PRIMARY KEY (id) +); + +CREATE INDEX api_based_extension_tenant_idx ON api_based_extensions (tenant_id); + +UPDATE alembic_version SET version_num='968fff4c0ab9' WHERE alembic_version.version_num = 'b3a09c049e8e'; + +-- Running upgrade 968fff4c0ab9 -> a9836e3baeee + +ALTER TABLE app_model_configs ADD COLUMN external_data_tools TEXT; + +UPDATE alembic_version SET version_num='a9836e3baeee' WHERE alembic_version.version_num = '968fff4c0ab9'; + +-- Running upgrade a9836e3baeee -> 8fe468ba0ca5 + +CREATE TABLE message_files ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + message_id UUID NOT NULL, + type VARCHAR(255) NOT NULL, + transfer_method VARCHAR(255) NOT NULL, + url TEXT, + upload_file_id UUID, + created_by_role VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT message_file_pkey PRIMARY KEY (id) +); + +CREATE INDEX message_file_created_by_idx ON message_files (created_by); + +CREATE INDEX message_file_message_idx ON message_files (message_id); + +ALTER TABLE app_model_configs ADD COLUMN file_upload TEXT; + +ALTER TABLE upload_files ADD COLUMN created_by_role VARCHAR(255) DEFAULT 'account'::character varying NOT NULL; + +UPDATE alembic_version SET version_num='8fe468ba0ca5' WHERE alembic_version.version_num = 'a9836e3baeee'; + +-- Running upgrade 8fe468ba0ca5 -> fca025d3b60f + +DROP TABLE sessions; + +ALTER TABLE datasets ADD COLUMN retrieval_model JSONB; + +CREATE INDEX retrieval_model_idx ON datasets USING gin (retrieval_model); + +UPDATE alembic_version SET version_num='fca025d3b60f' WHERE alembic_version.version_num = '8fe468ba0ca5'; + +-- Running upgrade fca025d3b60f -> e1901f623fd0 + +CREATE TABLE app_annotation_hit_histories ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + annotation_id UUID NOT NULL, + source TEXT NOT NULL, + question TEXT NOT NULL, + account_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT app_annotation_hit_histories_pkey PRIMARY KEY (id) +); + +CREATE INDEX app_annotation_hit_histories_account_idx ON app_annotation_hit_histories (account_id); + +CREATE INDEX app_annotation_hit_histories_annotation_idx ON app_annotation_hit_histories (annotation_id); + +CREATE INDEX app_annotation_hit_histories_app_idx ON app_annotation_hit_histories (app_id); + +ALTER TABLE app_model_configs ADD COLUMN annotation_reply TEXT; + +ALTER TABLE dataset_collection_bindings ADD COLUMN type VARCHAR(40) DEFAULT 'dataset'::character varying NOT NULL; + +ALTER TABLE message_annotations ADD COLUMN question TEXT; + +ALTER TABLE message_annotations ADD COLUMN hit_count INTEGER DEFAULT 0 NOT NULL; + +ALTER TABLE message_annotations ALTER COLUMN conversation_id DROP NOT NULL; + +ALTER TABLE message_annotations ALTER COLUMN message_id DROP NOT NULL; + +UPDATE alembic_version SET version_num='e1901f623fd0' WHERE alembic_version.version_num = 'fca025d3b60f'; + +-- Running upgrade e1901f623fd0 -> 46976cc39132 + +ALTER TABLE app_annotation_hit_histories ADD COLUMN score FLOAT DEFAULT 0 NOT NULL; + +UPDATE alembic_version SET version_num='46976cc39132' WHERE alembic_version.version_num = 'e1901f623fd0'; + +-- Running upgrade 46976cc39132 -> f2a6fc85e260 + +ALTER TABLE app_annotation_hit_histories ADD COLUMN message_id UUID NOT NULL; + +CREATE INDEX app_annotation_hit_histories_message_idx ON app_annotation_hit_histories (message_id); + +UPDATE alembic_version SET version_num='f2a6fc85e260' WHERE alembic_version.version_num = '46976cc39132'; + +-- Running upgrade f2a6fc85e260 -> 714aafe25d39 + +ALTER TABLE app_annotation_hit_histories ADD COLUMN annotation_question TEXT NOT NULL; + +ALTER TABLE app_annotation_hit_histories ADD COLUMN annotation_content TEXT NOT NULL; + +UPDATE alembic_version SET version_num='714aafe25d39' WHERE alembic_version.version_num = 'f2a6fc85e260'; + +-- Running upgrade 714aafe25d39 -> 246ba09cbbdb + +CREATE TABLE app_annotation_settings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + score_threshold FLOAT DEFAULT 0 NOT NULL, + collection_binding_id UUID NOT NULL, + created_user_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_user_id UUID NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT app_annotation_settings_pkey PRIMARY KEY (id) +); + +CREATE INDEX app_annotation_settings_app_idx ON app_annotation_settings (app_id); + +ALTER TABLE app_model_configs DROP COLUMN annotation_reply; + +UPDATE alembic_version SET version_num='246ba09cbbdb' WHERE alembic_version.version_num = '714aafe25d39'; + +-- Running upgrade 246ba09cbbdb -> 88072f0caa04 + +ALTER TABLE tenants ADD COLUMN custom_config TEXT; + +UPDATE alembic_version SET version_num='88072f0caa04' WHERE alembic_version.version_num = '246ba09cbbdb'; + +-- Running upgrade 88072f0caa04 -> 187385f442fc + +ALTER TABLE provider_models ALTER COLUMN model_name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='187385f442fc' WHERE alembic_version.version_num = '88072f0caa04'; + +-- Running upgrade 187385f442fc -> 89c7899ca936 + +ALTER TABLE sites ALTER COLUMN description TYPE TEXT; + +UPDATE alembic_version SET version_num='89c7899ca936' WHERE alembic_version.version_num = '187385f442fc'; + +-- Running upgrade 89c7899ca936 -> 3ef9b2b6bee6 + +CREATE TABLE tool_api_providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(40) NOT NULL, + schema TEXT NOT NULL, + schema_type_str VARCHAR(40) NOT NULL, + user_id UUID NOT NULL, + tenant_id UUID NOT NULL, + description_str TEXT NOT NULL, + tools_str TEXT NOT NULL, + CONSTRAINT tool_api_provider_pkey PRIMARY KEY (id) +); + +CREATE TABLE tool_builtin_providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID, + user_id UUID NOT NULL, + provider VARCHAR(40) NOT NULL, + encrypted_credentials TEXT, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tool_builtin_provider_pkey PRIMARY KEY (id), + CONSTRAINT unique_builtin_tool_provider UNIQUE (tenant_id, provider) +); + +CREATE TABLE tool_published_apps ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + user_id UUID NOT NULL, + description TEXT NOT NULL, + llm_description TEXT NOT NULL, + query_description TEXT NOT NULL, + query_name VARCHAR(40) NOT NULL, + tool_name VARCHAR(40) NOT NULL, + author VARCHAR(40) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT published_app_tool_pkey PRIMARY KEY (id), + CONSTRAINT tool_published_apps_app_id_fkey FOREIGN KEY(app_id) REFERENCES apps (id), + CONSTRAINT unique_published_app_tool UNIQUE (app_id, user_id) +); + +UPDATE alembic_version SET version_num='3ef9b2b6bee6' WHERE alembic_version.version_num = '89c7899ca936'; + +-- Running upgrade 3ef9b2b6bee6 -> ad472b61a054 + +ALTER TABLE tool_api_providers ADD COLUMN icon VARCHAR(256) NOT NULL; + +UPDATE alembic_version SET version_num='ad472b61a054' WHERE alembic_version.version_num = '3ef9b2b6bee6'; + +-- Running upgrade ad472b61a054 -> 8ec536f3c800 + +ALTER TABLE tool_api_providers ADD COLUMN credentials_str TEXT NOT NULL; + +UPDATE alembic_version SET version_num='8ec536f3c800' WHERE alembic_version.version_num = 'ad472b61a054'; + +-- Running upgrade 8ec536f3c800 -> 00bacef91f18 + +ALTER TABLE tool_api_providers ADD COLUMN description TEXT NOT NULL; + +ALTER TABLE tool_api_providers DROP COLUMN description_str; + +UPDATE alembic_version SET version_num='00bacef91f18' WHERE alembic_version.version_num = '8ec536f3c800'; + +-- Running upgrade 00bacef91f18 -> f25003750af4 + +ALTER TABLE tool_api_providers ADD COLUMN created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; + +ALTER TABLE tool_api_providers ADD COLUMN updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; + +UPDATE alembic_version SET version_num='f25003750af4' WHERE alembic_version.version_num = '00bacef91f18'; + +-- Running upgrade f25003750af4 -> c71211c8f604 + +CREATE TABLE tool_model_invokes ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + user_id UUID NOT NULL, + tenant_id UUID NOT NULL, + provider VARCHAR(40) NOT NULL, + tool_type VARCHAR(40) NOT NULL, + tool_name VARCHAR(40) NOT NULL, + tool_id UUID NOT NULL, + model_parameters TEXT NOT NULL, + prompt_messages TEXT NOT NULL, + model_response TEXT NOT NULL, + prompt_tokens INTEGER DEFAULT 0 NOT NULL, + answer_tokens INTEGER DEFAULT 0 NOT NULL, + answer_unit_price NUMERIC(10, 4) NOT NULL, + answer_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL, + provider_response_latency FLOAT DEFAULT 0 NOT NULL, + total_price NUMERIC(10, 7), + currency VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tool_model_invoke_pkey PRIMARY KEY (id) +); + +UPDATE alembic_version SET version_num='c71211c8f604' WHERE alembic_version.version_num = 'f25003750af4'; + +-- Running upgrade c71211c8f604 -> 114eed84c228 + +ALTER TABLE tool_model_invokes DROP COLUMN tool_id; + +UPDATE alembic_version SET version_num='114eed84c228' WHERE alembic_version.version_num = 'c71211c8f604'; + +-- Running upgrade 114eed84c228 -> 4829e54d2fee + +ALTER TABLE message_agent_thoughts ALTER COLUMN message_chain_id DROP NOT NULL; + +UPDATE alembic_version SET version_num='4829e54d2fee' WHERE alembic_version.version_num = '114eed84c228'; + +-- Running upgrade 4829e54d2fee -> 053da0c1d756 + +CREATE TABLE tool_conversation_variables ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + user_id UUID NOT NULL, + tenant_id UUID NOT NULL, + conversation_id UUID NOT NULL, + variables_str TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tool_conversation_variables_pkey PRIMARY KEY (id) +); + +ALTER TABLE tool_api_providers ADD COLUMN privacy_policy VARCHAR(255); + +ALTER TABLE tool_api_providers ALTER COLUMN icon TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='053da0c1d756' WHERE alembic_version.version_num = '4829e54d2fee'; + +-- Running upgrade 053da0c1d756 -> 4823da1d26cf + +CREATE TABLE tool_files ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + user_id UUID NOT NULL, + tenant_id UUID NOT NULL, + conversation_id UUID NOT NULL, + file_key VARCHAR(255) NOT NULL, + mimetype VARCHAR(255) NOT NULL, + original_url VARCHAR(255), + CONSTRAINT tool_file_pkey PRIMARY KEY (id) +); + +UPDATE alembic_version SET version_num='4823da1d26cf' WHERE alembic_version.version_num = '053da0c1d756'; + +-- Running upgrade 4823da1d26cf -> 9fafbd60eca1 + +ALTER TABLE message_files ADD COLUMN belongs_to VARCHAR(255); + +UPDATE alembic_version SET version_num='9fafbd60eca1' WHERE alembic_version.version_num = '4823da1d26cf'; + +-- Running upgrade 9fafbd60eca1 -> 8ae9bc661daa + +CREATE INDEX conversation_id_idx ON tool_conversation_variables (conversation_id); + +CREATE INDEX user_id_idx ON tool_conversation_variables (user_id); + +UPDATE alembic_version SET version_num='8ae9bc661daa' WHERE alembic_version.version_num = '9fafbd60eca1'; + +-- Running upgrade 8ae9bc661daa -> 23db93619b9d + +ALTER TABLE message_agent_thoughts ADD COLUMN message_files TEXT; + +UPDATE alembic_version SET version_num='23db93619b9d' WHERE alembic_version.version_num = '8ae9bc661daa'; + +-- Running upgrade 23db93619b9d -> de95f5c77138 + + /* + 1. select all tool_providers + 2. insert api_key to tool_provider_configs + + tool_providers + - id + - tenant_id + - tool_name + - encrypted_credentials + {"api_key": "$KEY"} + - created_at + - updated_at + + tool_builtin_providers + - id <- tool_providers.id + - tenant_id <- tool_providers.tenant_id + - user_id <- tenant_account_joins.account_id (tenant_account_joins.tenant_id = tool_providers.tenant_id and tenant_account_joins.role = 'owner') + - encrypted_credentials <- tool_providers.encrypted_credentials + {"serpapi_api_key": "$KEY"} + - created_at <- tool_providers.created_at + - updated_at <- tool_providers.updated_at + */ + +UPDATE alembic_version SET version_num='de95f5c77138' WHERE alembic_version.version_num = '23db93619b9d'; + +-- Running upgrade de95f5c77138 -> b24be59fbb04 + +ALTER TABLE app_model_configs ADD COLUMN text_to_speech TEXT; + +UPDATE alembic_version SET version_num='b24be59fbb04' WHERE alembic_version.version_num = 'de95f5c77138'; + +-- Running upgrade b24be59fbb04 -> dfb3b7f477da + +ALTER TABLE tool_api_providers ADD CONSTRAINT unique_api_tool_provider UNIQUE (name, tenant_id); + +CREATE INDEX tool_file_conversation_id_idx ON tool_files (conversation_id); + +UPDATE alembic_version SET version_num='dfb3b7f477da' WHERE alembic_version.version_num = 'b24be59fbb04'; + +-- Running upgrade dfb3b7f477da -> 380c6aa5a70d + +ALTER TABLE message_agent_thoughts ADD COLUMN tool_labels_str TEXT DEFAULT '{}'::text NOT NULL; + +UPDATE alembic_version SET version_num='380c6aa5a70d' WHERE alembic_version.version_num = 'dfb3b7f477da'; + +-- Running upgrade 380c6aa5a70d -> 16830a790f0f + +ALTER TABLE tenant_account_joins ADD COLUMN current BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='16830a790f0f' WHERE alembic_version.version_num = '380c6aa5a70d'; + +-- Running upgrade 16830a790f0f -> a8f9b3c45e4a + +CREATE INDEX document_segment_tenant_idx ON document_segments (tenant_id); + +CREATE INDEX document_tenant_idx ON documents (tenant_id); + +UPDATE alembic_version SET version_num='a8f9b3c45e4a' WHERE alembic_version.version_num = '16830a790f0f'; + +-- Running upgrade a8f9b3c45e4a -> 17b5ab037c40 + +ALTER TABLE dataset_keyword_tables ADD COLUMN data_source_type VARCHAR(255) DEFAULT 'database'::character varying NOT NULL; + +UPDATE alembic_version SET version_num='17b5ab037c40' WHERE alembic_version.version_num = 'a8f9b3c45e4a'; + +-- Running upgrade 17b5ab037c40 -> a8d7385a7b66 + +ALTER TABLE embeddings ADD COLUMN provider_name VARCHAR(40) DEFAULT ''::character varying NOT NULL; + +ALTER TABLE embeddings DROP CONSTRAINT embedding_hash_idx; + +ALTER TABLE embeddings ADD CONSTRAINT embedding_hash_idx UNIQUE (model_name, hash, provider_name); + +UPDATE alembic_version SET version_num='a8d7385a7b66' WHERE alembic_version.version_num = '17b5ab037c40'; + +-- Running upgrade a8d7385a7b66 -> b289e2408ee2 + +CREATE TABLE workflow_app_logs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + workflow_id UUID NOT NULL, + workflow_run_id UUID NOT NULL, + created_from VARCHAR(255) NOT NULL, + created_by_role VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT workflow_app_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_app_log_app_idx ON workflow_app_logs (tenant_id, app_id); + +CREATE TABLE workflow_node_executions ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + workflow_id UUID NOT NULL, + triggered_from VARCHAR(255) NOT NULL, + workflow_run_id UUID, + index INTEGER NOT NULL, + predecessor_node_id VARCHAR(255), + node_id VARCHAR(255) NOT NULL, + node_type VARCHAR(255) NOT NULL, + title VARCHAR(255) NOT NULL, + inputs TEXT, + process_data TEXT, + outputs TEXT, + status VARCHAR(255) NOT NULL, + error TEXT, + elapsed_time FLOAT DEFAULT 0 NOT NULL, + execution_metadata TEXT, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + created_by_role VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + finished_at TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT workflow_node_execution_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_node_execution_node_run_idx ON workflow_node_executions (tenant_id, app_id, workflow_id, triggered_from, node_id); + +CREATE INDEX workflow_node_execution_workflow_run_idx ON workflow_node_executions (tenant_id, app_id, workflow_id, triggered_from, workflow_run_id); + +CREATE TABLE workflow_runs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + sequence_number INTEGER NOT NULL, + workflow_id UUID NOT NULL, + type VARCHAR(255) NOT NULL, + triggered_from VARCHAR(255) NOT NULL, + version VARCHAR(255) NOT NULL, + graph TEXT, + inputs TEXT, + status VARCHAR(255) NOT NULL, + outputs TEXT, + error TEXT, + elapsed_time FLOAT DEFAULT 0 NOT NULL, + total_tokens INTEGER DEFAULT 0 NOT NULL, + total_steps INTEGER DEFAULT 0, + created_by_role VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + finished_at TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT workflow_run_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_run_triggerd_from_idx ON workflow_runs (tenant_id, app_id, triggered_from); + +CREATE TABLE workflows ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + type VARCHAR(255) NOT NULL, + version VARCHAR(255) NOT NULL, + graph TEXT, + features TEXT, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_by UUID, + updated_at TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT workflow_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_version_idx ON workflows (tenant_id, app_id, version); + +ALTER TABLE apps ADD COLUMN workflow_id UUID; + +ALTER TABLE messages ADD COLUMN workflow_run_id UUID; + +UPDATE alembic_version SET version_num='b289e2408ee2' WHERE alembic_version.version_num = 'a8d7385a7b66'; + +-- Running upgrade b289e2408ee2 -> cc04d0998d4d + +ALTER TABLE app_model_configs ALTER COLUMN provider DROP NOT NULL; + +ALTER TABLE app_model_configs ALTER COLUMN model_id DROP NOT NULL; + +ALTER TABLE app_model_configs ALTER COLUMN configs DROP NOT NULL; + +ALTER TABLE apps ALTER COLUMN api_rpm SET NOT NULL; + +ALTER TABLE apps ALTER COLUMN api_rpm SET DEFAULT '0'; + +ALTER TABLE apps ALTER COLUMN api_rph SET NOT NULL; + +ALTER TABLE apps ALTER COLUMN api_rph SET DEFAULT '0'; + +UPDATE alembic_version SET version_num='cc04d0998d4d' WHERE alembic_version.version_num = 'b289e2408ee2'; + +-- Running upgrade cc04d0998d4d -> f9107f83abab + +ALTER TABLE apps ADD COLUMN description TEXT DEFAULT ''::character varying NOT NULL; + +UPDATE alembic_version SET version_num='f9107f83abab' WHERE alembic_version.version_num = 'cc04d0998d4d'; + +-- Running upgrade f9107f83abab -> 42e85ed5564d + +ALTER TABLE conversations ALTER COLUMN app_model_config_id DROP NOT NULL; + +ALTER TABLE conversations ALTER COLUMN model_provider DROP NOT NULL; + +ALTER TABLE conversations ALTER COLUMN model_id DROP NOT NULL; + +UPDATE alembic_version SET version_num='42e85ed5564d' WHERE alembic_version.version_num = 'f9107f83abab'; + +-- Running upgrade 42e85ed5564d -> b5429b71023c + +ALTER TABLE messages ALTER COLUMN model_provider DROP NOT NULL; + +ALTER TABLE messages ALTER COLUMN model_id DROP NOT NULL; + +UPDATE alembic_version SET version_num='b5429b71023c' WHERE alembic_version.version_num = '42e85ed5564d'; + +-- Running upgrade b5429b71023c -> 563cf8bf777b + +ALTER TABLE tool_files ALTER COLUMN conversation_id DROP NOT NULL; + +UPDATE alembic_version SET version_num='563cf8bf777b' WHERE alembic_version.version_num = 'b5429b71023c'; + +-- Running upgrade 563cf8bf777b -> e2eacc9a1b63 + +ALTER TABLE conversations ADD COLUMN invoke_from VARCHAR(255); + +ALTER TABLE messages ADD COLUMN status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL; + +ALTER TABLE messages ADD COLUMN error TEXT; + +ALTER TABLE messages ADD COLUMN message_metadata TEXT; + +ALTER TABLE messages ADD COLUMN invoke_from VARCHAR(255); + +UPDATE alembic_version SET version_num='e2eacc9a1b63' WHERE alembic_version.version_num = '563cf8bf777b'; + +-- Running upgrade e2eacc9a1b63 -> c3311b089690 + +ALTER TABLE message_agent_thoughts ADD COLUMN tool_meta_str TEXT DEFAULT '{}'::text NOT NULL; + +UPDATE alembic_version SET version_num='c3311b089690' WHERE alembic_version.version_num = 'e2eacc9a1b63'; + +-- Running upgrade c3311b089690 -> 3c7cac9521c6 + +CREATE TABLE tag_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID, + tag_id UUID, + target_id UUID, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tag_binding_pkey PRIMARY KEY (id) +); + +CREATE INDEX tag_bind_tag_id_idx ON tag_bindings (tag_id); + +CREATE INDEX tag_bind_target_id_idx ON tag_bindings (target_id); + +CREATE TABLE tags ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID, + type VARCHAR(16) NOT NULL, + name VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tag_pkey PRIMARY KEY (id) +); + +CREATE INDEX tag_name_idx ON tags (name); + +CREATE INDEX tag_type_idx ON tags (type); + +UPDATE alembic_version SET version_num='3c7cac9521c6' WHERE alembic_version.version_num = 'c3311b089690'; + +-- Running upgrade 3c7cac9521c6 -> 47cc7df8c4f3 + +ALTER TABLE tenant_default_models ALTER COLUMN model_name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='47cc7df8c4f3' WHERE alembic_version.version_num = '3c7cac9521c6'; + +-- Running upgrade 47cc7df8c4f3 -> 5fda94355fce + +ALTER TABLE recommended_apps ADD COLUMN custom_disclaimer VARCHAR(255); + +ALTER TABLE sites ADD COLUMN custom_disclaimer VARCHAR(255); + +ALTER TABLE tool_api_providers ADD COLUMN custom_disclaimer VARCHAR(255); + +UPDATE alembic_version SET version_num='5fda94355fce' WHERE alembic_version.version_num = '47cc7df8c4f3'; + +-- Running upgrade 5fda94355fce -> 7bdef072e63a + +CREATE TABLE tool_workflow_providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(40) NOT NULL, + icon VARCHAR(255) NOT NULL, + app_id UUID NOT NULL, + user_id UUID NOT NULL, + tenant_id UUID NOT NULL, + description TEXT NOT NULL, + parameter_configuration TEXT DEFAULT '[]' NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tool_workflow_provider_pkey PRIMARY KEY (id), + CONSTRAINT unique_workflow_tool_provider UNIQUE (name, tenant_id), + CONSTRAINT unique_workflow_tool_provider_app_id UNIQUE (tenant_id, app_id) +); + +UPDATE alembic_version SET version_num='7bdef072e63a' WHERE alembic_version.version_num = '5fda94355fce'; + +-- Running upgrade 7bdef072e63a -> 3b18fea55204 + +CREATE TABLE tool_label_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tool_id VARCHAR(64) NOT NULL, + tool_type VARCHAR(40) NOT NULL, + label_name VARCHAR(40) NOT NULL, + CONSTRAINT tool_label_bind_pkey PRIMARY KEY (id) +); + +ALTER TABLE tool_workflow_providers ADD COLUMN privacy_policy VARCHAR(255) DEFAULT ''; + +UPDATE alembic_version SET version_num='3b18fea55204' WHERE alembic_version.version_num = '7bdef072e63a'; + +-- Running upgrade 3b18fea55204 -> 9e98fbaffb88 + +ALTER TABLE tool_workflow_providers ADD COLUMN version VARCHAR(255) DEFAULT '' NOT NULL; + +UPDATE alembic_version SET version_num='9e98fbaffb88' WHERE alembic_version.version_num = '3b18fea55204'; + +-- Running upgrade 9e98fbaffb88 -> 03f98355ba0e + +ALTER TABLE tool_label_bindings ADD CONSTRAINT unique_tool_label_bind UNIQUE (tool_id, label_name); + +ALTER TABLE tool_workflow_providers ADD COLUMN label VARCHAR(255) DEFAULT '' NOT NULL; + +UPDATE alembic_version SET version_num='03f98355ba0e' WHERE alembic_version.version_num = '9e98fbaffb88'; + +-- Running upgrade 03f98355ba0e -> 64a70a7aab8b + +CREATE INDEX workflow_run_tenant_app_sequence_idx ON workflow_runs (tenant_id, app_id, sequence_number); + +UPDATE alembic_version SET version_num='64a70a7aab8b' WHERE alembic_version.version_num = '03f98355ba0e'; + +-- Running upgrade 64a70a7aab8b -> 4e99a8df00ff + +CREATE TABLE load_balancing_model_configs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(255) NOT NULL, + model_name VARCHAR(255) NOT NULL, + model_type VARCHAR(40) NOT NULL, + name VARCHAR(255) NOT NULL, + encrypted_config TEXT, + enabled BOOLEAN DEFAULT true NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT load_balancing_model_config_pkey PRIMARY KEY (id) +); + +CREATE INDEX load_balancing_model_config_tenant_provider_model_idx ON load_balancing_model_configs (tenant_id, provider_name, model_type); + +CREATE TABLE provider_model_settings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(255) NOT NULL, + model_name VARCHAR(255) NOT NULL, + model_type VARCHAR(40) NOT NULL, + enabled BOOLEAN DEFAULT true NOT NULL, + load_balancing_enabled BOOLEAN DEFAULT false NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT provider_model_setting_pkey PRIMARY KEY (id) +); + +CREATE INDEX provider_model_setting_tenant_provider_model_idx ON provider_model_settings (tenant_id, provider_name, model_type); + +ALTER TABLE provider_models ALTER COLUMN provider_name TYPE VARCHAR(255); + +ALTER TABLE provider_orders ALTER COLUMN provider_name TYPE VARCHAR(255); + +ALTER TABLE providers ALTER COLUMN provider_name TYPE VARCHAR(255); + +ALTER TABLE tenant_default_models ALTER COLUMN provider_name TYPE VARCHAR(255); + +ALTER TABLE tenant_preferred_model_providers ALTER COLUMN provider_name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='4e99a8df00ff' WHERE alembic_version.version_num = '64a70a7aab8b'; + +-- Running upgrade 4e99a8df00ff -> 7b45942e39bb + +CREATE TABLE data_source_api_key_auth_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + category VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + credentials TEXT, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + disabled BOOLEAN DEFAULT false, + CONSTRAINT data_source_api_key_auth_binding_pkey PRIMARY KEY (id) +); + +CREATE INDEX data_source_api_key_auth_binding_provider_idx ON data_source_api_key_auth_bindings (provider); + +CREATE INDEX data_source_api_key_auth_binding_tenant_id_idx ON data_source_api_key_auth_bindings (tenant_id); + +DROP INDEX source_binding_tenant_id_idx; + +DROP INDEX source_info_idx; + +ALTER TABLE data_source_bindings RENAME TO data_source_oauth_bindings; + +CREATE INDEX source_binding_tenant_id_idx ON data_source_oauth_bindings (tenant_id); + +CREATE INDEX source_info_idx ON data_source_oauth_bindings USING gin (source_info); + +UPDATE alembic_version SET version_num='7b45942e39bb' WHERE alembic_version.version_num = '4e99a8df00ff'; + +-- Running upgrade 7b45942e39bb -> 4ff534e1eb11 + +ALTER TABLE sites ADD COLUMN show_workflow_steps BOOLEAN DEFAULT true NOT NULL; + +UPDATE alembic_version SET version_num='4ff534e1eb11' WHERE alembic_version.version_num = '7b45942e39bb'; + +-- Running upgrade 4ff534e1eb11 -> b69ca54b9208 + +ALTER TABLE sites ADD COLUMN chat_color_theme VARCHAR(255); + +ALTER TABLE sites ADD COLUMN chat_color_theme_inverted BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='b69ca54b9208' WHERE alembic_version.version_num = '4ff534e1eb11'; + +-- Running upgrade 4ff534e1eb11 -> 04c602f5dc9b + +CREATE TABLE tracing_app_configs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + tracing_provider VARCHAR(255), + tracing_config JSON, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, + CONSTRAINT tracing_app_config_pkey PRIMARY KEY (id) +); + +INSERT INTO alembic_version (version_num) VALUES ('04c602f5dc9b') RETURNING alembic_version.version_num; + +-- Running upgrade 04c602f5dc9b -> c031d46af369 + +CREATE TABLE trace_app_config ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + tracing_provider VARCHAR(255), + tracing_config JSON, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, + is_active BOOLEAN DEFAULT true NOT NULL, + CONSTRAINT trace_app_config_pkey PRIMARY KEY (id) +); + +CREATE INDEX trace_app_config_app_id_idx ON trace_app_config (app_id); + +UPDATE alembic_version SET version_num='c031d46af369' WHERE alembic_version.version_num = '04c602f5dc9b'; + +-- Running upgrade c031d46af369 -> 2a3aebbbf4bb + +ALTER TABLE apps ADD COLUMN tracing TEXT; + +UPDATE alembic_version SET version_num='2a3aebbbf4bb' WHERE alembic_version.version_num = 'c031d46af369'; + +-- Running upgrade 2a3aebbbf4bb, b69ca54b9208 -> 63f9175e515b + +DELETE FROM alembic_version WHERE alembic_version.version_num = '2a3aebbbf4bb'; + +UPDATE alembic_version SET version_num='63f9175e515b' WHERE alembic_version.version_num = 'b69ca54b9208'; + +-- Running upgrade 63f9175e515b -> b2602e131636 + +CREATE INDEX message_workflow_run_id_idx ON messages (conversation_id, workflow_run_id); + +UPDATE alembic_version SET version_num='b2602e131636' WHERE alembic_version.version_num = '63f9175e515b'; + +-- Running upgrade b2602e131636 -> 7e6a8693e07a + +CREATE TABLE dataset_permissions ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + dataset_id UUID NOT NULL, + account_id UUID NOT NULL, + has_permission BOOLEAN DEFAULT true NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT dataset_permission_pkey PRIMARY KEY (id) +); + +CREATE INDEX idx_dataset_permissions_account_id ON dataset_permissions (account_id); + +CREATE INDEX idx_dataset_permissions_dataset_id ON dataset_permissions (dataset_id); + +UPDATE alembic_version SET version_num='7e6a8693e07a' WHERE alembic_version.version_num = 'b2602e131636'; + +-- Running upgrade 7e6a8693e07a -> 161cadc1af8d + +ALTER TABLE dataset_permissions ADD COLUMN tenant_id UUID NOT NULL; + +UPDATE alembic_version SET version_num='161cadc1af8d' WHERE alembic_version.version_num = '7e6a8693e07a'; + +-- Running upgrade 161cadc1af8d -> 408176b91ad3 + +ALTER TABLE apps ADD COLUMN max_active_requests INTEGER; + +UPDATE alembic_version SET version_num='408176b91ad3' WHERE alembic_version.version_num = '161cadc1af8d'; + +-- Running upgrade 408176b91ad3 -> fecff1c3da27 + +DROP TABLE tracing_app_configs; + +CREATE INDEX idx_dataset_permissions_tenant_id ON dataset_permissions (tenant_id); + +UPDATE alembic_version SET version_num='fecff1c3da27' WHERE alembic_version.version_num = '408176b91ad3'; + +-- Running upgrade fecff1c3da27 -> 6e957a32015b + +CREATE INDEX created_at_idx ON embeddings (created_at); + +UPDATE alembic_version SET version_num='6e957a32015b' WHERE alembic_version.version_num = 'fecff1c3da27'; + +-- Running upgrade 6e957a32015b -> 8e5588e6412e + +ALTER TABLE workflows ADD COLUMN environment_variables TEXT DEFAULT '{}' NOT NULL; + +UPDATE alembic_version SET version_num='8e5588e6412e' WHERE alembic_version.version_num = '6e957a32015b'; + +-- Running upgrade 8e5588e6412e -> 53bf8af60645 + +ALTER TABLE embeddings ALTER COLUMN provider_name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='53bf8af60645' WHERE alembic_version.version_num = '8e5588e6412e'; + +-- Running upgrade 53bf8af60645 -> eeb2e349e6ac + +ALTER TABLE dataset_collection_bindings ALTER COLUMN model_name TYPE VARCHAR(255); + +ALTER TABLE embeddings ALTER COLUMN model_name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='eeb2e349e6ac' WHERE alembic_version.version_num = '53bf8af60645'; + +-- Running upgrade eeb2e349e6ac -> 1787fbae959a + +ALTER TABLE tool_files ALTER COLUMN original_url TYPE VARCHAR(2048); + +UPDATE alembic_version SET version_num='1787fbae959a' WHERE alembic_version.version_num = 'eeb2e349e6ac'; + +-- Running upgrade 1787fbae959a -> 63a83fcf12ba + +CREATE TABLE workflow__conversation_variables ( + id UUID NOT NULL, + conversation_id UUID NOT NULL, + app_id UUID NOT NULL, + data TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT workflow__conversation_variables_pkey PRIMARY KEY (id, conversation_id) +); + +CREATE INDEX workflow__conversation_variables_app_id_idx ON workflow__conversation_variables (app_id); + +CREATE INDEX workflow__conversation_variables_created_at_idx ON workflow__conversation_variables (created_at); + +ALTER TABLE workflows ADD COLUMN conversation_variables TEXT DEFAULT '{}' NOT NULL; + +UPDATE alembic_version SET version_num='63a83fcf12ba' WHERE alembic_version.version_num = '1787fbae959a'; + +-- Running upgrade 63a83fcf12ba -> 8782057ff0dc + +ALTER TABLE conversations ADD COLUMN dialogue_count INTEGER DEFAULT '0' NOT NULL; + +UPDATE alembic_version SET version_num='8782057ff0dc' WHERE alembic_version.version_num = '63a83fcf12ba'; + +-- Running upgrade 8782057ff0dc -> a6be81136580 + +ALTER TABLE apps ADD COLUMN icon_type VARCHAR(255); + +ALTER TABLE sites ADD COLUMN icon_type VARCHAR(255); + +UPDATE alembic_version SET version_num='a6be81136580' WHERE alembic_version.version_num = '8782057ff0dc'; + +-- Running upgrade a6be81136580 -> 2dbe42621d96 + +ALTER TABLE workflow__conversation_variables RENAME TO workflow_conversation_variables; + +UPDATE alembic_version SET version_num='2dbe42621d96' WHERE alembic_version.version_num = 'a6be81136580'; + +-- Running upgrade 2dbe42621d96 -> d0187d6a88dd + +ALTER TABLE app_model_configs ADD COLUMN created_by UUID; + +ALTER TABLE app_model_configs ADD COLUMN updated_by UUID; + +ALTER TABLE apps ADD COLUMN created_by UUID; + +ALTER TABLE apps ADD COLUMN updated_by UUID; + +ALTER TABLE sites ADD COLUMN created_by UUID; + +ALTER TABLE sites ADD COLUMN updated_by UUID; + +UPDATE alembic_version SET version_num='d0187d6a88dd' WHERE alembic_version.version_num = '2dbe42621d96'; + +-- Running upgrade d0187d6a88dd -> 030f4915f36a + +ALTER TABLE apps ADD COLUMN use_icon_as_answer_icon BOOLEAN DEFAULT false NOT NULL; + +ALTER TABLE sites ADD COLUMN use_icon_as_answer_icon BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='030f4915f36a' WHERE alembic_version.version_num = 'd0187d6a88dd'; + +-- Running upgrade 030f4915f36a -> 675b5321501b + +ALTER TABLE workflow_node_executions ADD COLUMN node_execution_id VARCHAR(255); + +CREATE INDEX workflow_node_execution_id_idx ON workflow_node_executions (tenant_id, app_id, workflow_id, triggered_from, node_execution_id); + +UPDATE alembic_version SET version_num='675b5321501b' WHERE alembic_version.version_num = '030f4915f36a'; + +-- Running upgrade 675b5321501b -> d57ba9ebb251 + +ALTER TABLE messages ADD COLUMN parent_message_id UUID; + +UPDATE messages SET parent_message_id = uuid_nil() WHERE parent_message_id IS NULL; + +UPDATE alembic_version SET version_num='d57ba9ebb251' WHERE alembic_version.version_num = '675b5321501b'; + +-- Running upgrade d57ba9ebb251 -> 6af6a521a53e + +ALTER TABLE dataset_retriever_resources ALTER COLUMN document_id DROP NOT NULL; + +ALTER TABLE dataset_retriever_resources ALTER COLUMN data_source_type DROP NOT NULL; + +ALTER TABLE dataset_retriever_resources ALTER COLUMN segment_id DROP NOT NULL; + +UPDATE alembic_version SET version_num='6af6a521a53e' WHERE alembic_version.version_num = 'd57ba9ebb251'; + +-- Running upgrade 6af6a521a53e -> 33f5fac87f29 + +CREATE TABLE external_knowledge_apis ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(255) NOT NULL, + description VARCHAR(255) NOT NULL, + tenant_id UUID NOT NULL, + settings TEXT, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_by UUID, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT external_knowledge_apis_pkey PRIMARY KEY (id) +); + +CREATE INDEX external_knowledge_apis_name_idx ON external_knowledge_apis (name); + +CREATE INDEX external_knowledge_apis_tenant_idx ON external_knowledge_apis (tenant_id); + +CREATE TABLE external_knowledge_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + external_knowledge_api_id UUID NOT NULL, + dataset_id UUID NOT NULL, + external_knowledge_id TEXT NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_by UUID, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT external_knowledge_bindings_pkey PRIMARY KEY (id) +); + +CREATE INDEX external_knowledge_bindings_dataset_idx ON external_knowledge_bindings (dataset_id); + +CREATE INDEX external_knowledge_bindings_external_knowledge_api_idx ON external_knowledge_bindings (external_knowledge_api_id); + +CREATE INDEX external_knowledge_bindings_external_knowledge_idx ON external_knowledge_bindings (external_knowledge_id); + +CREATE INDEX external_knowledge_bindings_tenant_idx ON external_knowledge_bindings (tenant_id); + +UPDATE alembic_version SET version_num='33f5fac87f29' WHERE alembic_version.version_num = '6af6a521a53e'; + +-- Running upgrade 33f5fac87f29 -> d8e744d88ed6 + +UPDATE + messages +SET + parent_message_id = '00000000-0000-0000-0000-000000000000' +WHERE + invoke_from = 'service-api' + AND parent_message_id IS NULL + AND created_at >= '2024-09-29 12:00:00';; + +UPDATE alembic_version SET version_num='d8e744d88ed6' WHERE alembic_version.version_num = '33f5fac87f29'; + +-- Running upgrade d8e744d88ed6 -> bbadea11becb + +-- Executing in offline mode, assuming the name and size columns do not exist. +-- The generated SQL may differ from what will actually be executed. +-- Please review the migration script carefully!; + +ALTER TABLE tool_files ADD COLUMN name VARCHAR; + +ALTER TABLE tool_files ADD COLUMN size INTEGER; + +UPDATE tool_files SET name = '' WHERE name IS NULL; + +UPDATE tool_files SET size = -1 WHERE size IS NULL; + +ALTER TABLE tool_files ALTER COLUMN name SET NOT NULL; + +ALTER TABLE tool_files ALTER COLUMN size SET NOT NULL; + +UPDATE alembic_version SET version_num='bbadea11becb' WHERE alembic_version.version_num = 'd8e744d88ed6'; + +-- Running upgrade bbadea11becb -> 0251a1c768cc + +CREATE TABLE tidb_auth_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID, + cluster_id VARCHAR(255) NOT NULL, + cluster_name VARCHAR(255) NOT NULL, + active BOOLEAN DEFAULT false NOT NULL, + status VARCHAR(255) DEFAULT 'CREATING'::character varying NOT NULL, + account VARCHAR(255) NOT NULL, + password VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tidb_auth_bindings_pkey PRIMARY KEY (id) +); + +CREATE INDEX tidb_auth_bindings_active_idx ON tidb_auth_bindings (active); + +CREATE INDEX tidb_auth_bindings_status_idx ON tidb_auth_bindings (status); + +CREATE INDEX tidb_auth_bindings_created_at_idx ON tidb_auth_bindings (created_at); + +CREATE INDEX tidb_auth_bindings_tenant_idx ON tidb_auth_bindings (tenant_id); + +UPDATE alembic_version SET version_num='0251a1c768cc' WHERE alembic_version.version_num = 'bbadea11becb'; + +-- Running upgrade 0251a1c768cc -> 43fa78bc3b7d + +CREATE TABLE whitelists ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID, + category VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT whitelists_pkey PRIMARY KEY (id) +); + +CREATE INDEX whitelists_tenant_idx ON whitelists (tenant_id); + +UPDATE alembic_version SET version_num='43fa78bc3b7d' WHERE alembic_version.version_num = '0251a1c768cc'; + +-- Running upgrade 43fa78bc3b7d -> d3f6769a94a3 + +ALTER TABLE upload_files ADD COLUMN source_url VARCHAR(255) DEFAULT '' NOT NULL; + +UPDATE alembic_version SET version_num='d3f6769a94a3' WHERE alembic_version.version_num = '43fa78bc3b7d'; + +-- Running upgrade d3f6769a94a3 -> 93ad8c19c40b + +ALTER INDEX workflow__conversation_variables_app_id_idx RENAME TO workflow_conversation_variables_app_id_idx; + +ALTER INDEX workflow__conversation_variables_created_at_idx RENAME TO workflow_conversation_variables_created_at_idx; + +UPDATE alembic_version SET version_num='93ad8c19c40b' WHERE alembic_version.version_num = 'd3f6769a94a3'; + +-- Running upgrade 93ad8c19c40b -> f4d7ce70a7ca + +ALTER TABLE upload_files ALTER COLUMN source_url TYPE TEXT; + +UPDATE alembic_version SET version_num='f4d7ce70a7ca' WHERE alembic_version.version_num = '93ad8c19c40b'; + +-- Running upgrade f4d7ce70a7ca -> d07474999927 + +UPDATE recommended_apps SET custom_disclaimer = '' WHERE custom_disclaimer IS NULL; + +UPDATE sites SET custom_disclaimer = '' WHERE custom_disclaimer IS NULL; + +UPDATE tool_api_providers SET custom_disclaimer = '' WHERE custom_disclaimer IS NULL; + +ALTER TABLE recommended_apps ALTER COLUMN custom_disclaimer TYPE TEXT; + +ALTER TABLE recommended_apps ALTER COLUMN custom_disclaimer SET NOT NULL; + +ALTER TABLE sites ALTER COLUMN custom_disclaimer TYPE TEXT; + +ALTER TABLE sites ALTER COLUMN custom_disclaimer SET NOT NULL; + +ALTER TABLE tool_api_providers ALTER COLUMN custom_disclaimer TYPE TEXT; + +ALTER TABLE tool_api_providers ALTER COLUMN custom_disclaimer SET NOT NULL; + +UPDATE alembic_version SET version_num='d07474999927' WHERE alembic_version.version_num = 'f4d7ce70a7ca'; + +-- Running upgrade d07474999927 -> 09a8d1878d9b + +ALTER TABLE conversations ALTER COLUMN inputs SET NOT NULL; + +ALTER TABLE messages ALTER COLUMN inputs SET NOT NULL; + +UPDATE workflows SET updated_at = created_at WHERE updated_at IS NULL; + +UPDATE workflows SET graph = '' WHERE graph IS NULL; + +UPDATE workflows SET features = '' WHERE features IS NULL; + +ALTER TABLE workflows ALTER COLUMN graph SET NOT NULL; + +ALTER TABLE workflows ALTER COLUMN features SET NOT NULL; + +ALTER TABLE workflows ALTER COLUMN updated_at SET NOT NULL; + +UPDATE alembic_version SET version_num='09a8d1878d9b' WHERE alembic_version.version_num = 'd07474999927'; + +-- Running upgrade 09a8d1878d9b -> 01d6889832f7 + +CREATE INDEX message_created_at_idx ON messages (created_at); + +UPDATE alembic_version SET version_num='01d6889832f7' WHERE alembic_version.version_num = '09a8d1878d9b'; + +-- Running upgrade 01d6889832f7 -> cf8f4fc45278 + +ALTER TABLE workflow_runs ADD COLUMN exceptions_count INTEGER DEFAULT 0; + +UPDATE alembic_version SET version_num='cf8f4fc45278' WHERE alembic_version.version_num = '01d6889832f7'; + +-- Running upgrade cf8f4fc45278 -> 11b07f66c737 + +DROP TABLE tool_providers; + +UPDATE alembic_version SET version_num='11b07f66c737' WHERE alembic_version.version_num = 'cf8f4fc45278'; + +-- Running upgrade 11b07f66c737 -> e1944c35e15e + +UPDATE alembic_version SET version_num='e1944c35e15e' WHERE alembic_version.version_num = '11b07f66c737'; + +-- Running upgrade e1944c35e15e -> d7999dfa4aae + +-- Executing in offline mode: assuming the "retry_index" column does not exist. +-- The generated SQL may differ from what will actually be executed. +-- Please review the migration script carefully!; + +UPDATE alembic_version SET version_num='d7999dfa4aae' WHERE alembic_version.version_num = 'e1944c35e15e'; + +-- Running upgrade d7999dfa4aae -> e19037032219 + +CREATE TABLE child_chunks ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + document_id UUID NOT NULL, + segment_id UUID NOT NULL, + position INTEGER NOT NULL, + content TEXT NOT NULL, + word_count INTEGER NOT NULL, + index_node_id VARCHAR(255), + index_node_hash VARCHAR(255), + type VARCHAR(255) DEFAULT 'automatic'::character varying NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_by UUID, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + indexing_at TIMESTAMP WITHOUT TIME ZONE, + completed_at TIMESTAMP WITHOUT TIME ZONE, + error TEXT, + CONSTRAINT child_chunk_pkey PRIMARY KEY (id) +); + +CREATE INDEX child_chunk_dataset_id_idx ON child_chunks (tenant_id, dataset_id, document_id, segment_id, index_node_id); + +UPDATE alembic_version SET version_num='e19037032219' WHERE alembic_version.version_num = 'd7999dfa4aae'; + +-- Running upgrade e19037032219 -> 923752d42eb6 + +CREATE TABLE dataset_auto_disable_logs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + document_id UUID NOT NULL, + notified BOOLEAN DEFAULT false NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT dataset_auto_disable_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_auto_disable_log_created_atx ON dataset_auto_disable_logs (created_at); + +CREATE INDEX dataset_auto_disable_log_dataset_idx ON dataset_auto_disable_logs (dataset_id); + +CREATE INDEX dataset_auto_disable_log_tenant_idx ON dataset_auto_disable_logs (tenant_id); + +UPDATE alembic_version SET version_num='923752d42eb6' WHERE alembic_version.version_num = 'e19037032219'; + +-- Running upgrade 923752d42eb6 -> a91b476a53de + +ALTER TABLE workflow_runs ALTER COLUMN total_tokens TYPE BIGINT; + +UPDATE alembic_version SET version_num='a91b476a53de' WHERE alembic_version.version_num = '923752d42eb6'; + +-- Running upgrade a91b476a53de -> ddcc8bbef391 + +ALTER TABLE tool_builtin_providers ALTER COLUMN provider TYPE VARCHAR(256); + +UPDATE alembic_version SET version_num='ddcc8bbef391' WHERE alembic_version.version_num = 'a91b476a53de'; + +-- Running upgrade ddcc8bbef391 -> 08ec4f75af5e + +CREATE TABLE account_plugin_permissions ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + install_permission VARCHAR(16) DEFAULT 'everyone' NOT NULL, + debug_permission VARCHAR(16) DEFAULT 'noone' NOT NULL, + CONSTRAINT account_plugin_permission_pkey PRIMARY KEY (id), + CONSTRAINT unique_tenant_plugin UNIQUE (tenant_id) +); + +UPDATE alembic_version SET version_num='08ec4f75af5e' WHERE alembic_version.version_num = 'ddcc8bbef391'; + +-- Running upgrade 08ec4f75af5e -> 4413929e1ec2 + +ALTER TABLE dataset_collection_bindings ALTER COLUMN provider_name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='4413929e1ec2' WHERE alembic_version.version_num = '08ec4f75af5e'; + +-- Running upgrade 4413929e1ec2 -> 5511c782ee4c + +ALTER TABLE tool_api_providers ALTER COLUMN name TYPE VARCHAR(255); + +ALTER TABLE tool_model_invokes ALTER COLUMN provider TYPE VARCHAR(255); + +ALTER TABLE tool_workflow_providers ALTER COLUMN name TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='5511c782ee4c' WHERE alembic_version.version_num = '4413929e1ec2'; + +-- Running upgrade 5511c782ee4c -> ee79d9b1c156 + +ALTER TABLE workflows ADD COLUMN marked_name VARCHAR DEFAULT '' NOT NULL; + +ALTER TABLE workflows ADD COLUMN marked_comment VARCHAR DEFAULT '' NOT NULL; + +UPDATE alembic_version SET version_num='ee79d9b1c156' WHERE alembic_version.version_num = '5511c782ee4c'; + +-- Running upgrade ee79d9b1c156 -> f051706725cc + +CREATE TABLE rate_limit_logs ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + subscription_plan VARCHAR(255) NOT NULL, + operation VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT rate_limit_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX rate_limit_log_operation_idx ON rate_limit_logs (operation); + +CREATE INDEX rate_limit_log_tenant_idx ON rate_limit_logs (tenant_id); + +UPDATE alembic_version SET version_num='f051706725cc' WHERE alembic_version.version_num = 'ee79d9b1c156'; + +-- Running upgrade f051706725cc -> d20049ed0af6 + +CREATE TABLE dataset_metadata_bindings ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + metadata_id UUID NOT NULL, + document_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + created_by UUID NOT NULL, + CONSTRAINT dataset_metadata_binding_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_metadata_binding_dataset_idx ON dataset_metadata_bindings (dataset_id); + +CREATE INDEX dataset_metadata_binding_document_idx ON dataset_metadata_bindings (document_id); + +CREATE INDEX dataset_metadata_binding_metadata_idx ON dataset_metadata_bindings (metadata_id); + +CREATE INDEX dataset_metadata_binding_tenant_idx ON dataset_metadata_bindings (tenant_id); + +CREATE TABLE dataset_metadatas ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + type VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + created_by UUID NOT NULL, + updated_by UUID, + CONSTRAINT dataset_metadata_pkey PRIMARY KEY (id) +); + +CREATE INDEX dataset_metadata_dataset_idx ON dataset_metadatas (dataset_id); + +CREATE INDEX dataset_metadata_tenant_idx ON dataset_metadatas (tenant_id); + +ALTER TABLE datasets ADD COLUMN built_in_field_enabled BOOLEAN DEFAULT false NOT NULL; + +ALTER TABLE documents ALTER COLUMN doc_metadata TYPE JSONB; + +CREATE INDEX document_metadata_idx ON documents USING gin (doc_metadata); + +UPDATE alembic_version SET version_num='d20049ed0af6' WHERE alembic_version.version_num = 'f051706725cc'; + +-- Running upgrade d20049ed0af6 -> 6a9f914f656c + +CREATE INDEX child_chunks_node_idx ON child_chunks (index_node_id, dataset_id); + +CREATE INDEX child_chunks_segment_idx ON child_chunks (segment_id); + +DROP INDEX document_segment_dataset_node_idx; + +CREATE INDEX document_segment_node_dataset_idx ON document_segments (index_node_id, dataset_id); + +UPDATE alembic_version SET version_num='6a9f914f656c' WHERE alembic_version.version_num = 'd20049ed0af6'; + +-- Running upgrade 6a9f914f656c -> d28f2004b072 + +CREATE INDEX workflow_conversation_variables_conversation_id_idx ON workflow_conversation_variables (conversation_id); + +UPDATE alembic_version SET version_num='d28f2004b072' WHERE alembic_version.version_num = '6a9f914f656c'; + +-- Running upgrade d28f2004b072 -> 2adcbe1f5dfb + +CREATE TABLE workflow_draft_variables ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + app_id UUID NOT NULL, + last_edited_at TIMESTAMP WITHOUT TIME ZONE, + node_id VARCHAR(255) NOT NULL, + name VARCHAR(255) NOT NULL, + description VARCHAR(255) NOT NULL, + selector VARCHAR(255) NOT NULL, + value_type VARCHAR(20) NOT NULL, + value TEXT NOT NULL, + visible BOOLEAN NOT NULL, + editable BOOLEAN NOT NULL, + CONSTRAINT workflow_draft_variables_pkey PRIMARY KEY (id), + CONSTRAINT workflow_draft_variables_app_id_key UNIQUE (app_id, node_id, name) +); + +UPDATE alembic_version SET version_num='2adcbe1f5dfb' WHERE alembic_version.version_num = 'd28f2004b072'; + +-- Running upgrade 2adcbe1f5dfb -> 4474872b0ee6 + +COMMIT; + +CREATE INDEX CONCURRENTLY workflow_node_executions_tenant_id_idx ON workflow_node_executions (tenant_id, workflow_id, node_id, created_at DESC); + +BEGIN; + +ALTER TABLE workflow_draft_variables ADD COLUMN node_execution_id UUID; + +UPDATE alembic_version SET version_num='4474872b0ee6' WHERE alembic_version.version_num = '2adcbe1f5dfb'; + +-- Running upgrade 4474872b0ee6 -> 0ab65e1cc7fa + +DROP INDEX workflow_run_tenant_app_sequence_idx; + +ALTER TABLE workflow_runs DROP COLUMN sequence_number; + +UPDATE alembic_version SET version_num='0ab65e1cc7fa' WHERE alembic_version.version_num = '4474872b0ee6'; + +-- Running upgrade 0ab65e1cc7fa -> 58eb7bdb93fe + +CREATE TABLE app_mcp_servers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + description VARCHAR(255) NOT NULL, + server_code VARCHAR(255) NOT NULL, + status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, + parameters TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT app_mcp_server_pkey PRIMARY KEY (id), + CONSTRAINT unique_app_mcp_server_tenant_app_id UNIQUE (tenant_id, app_id), + CONSTRAINT unique_app_mcp_server_server_code UNIQUE (server_code) +); + +CREATE TABLE tool_mcp_providers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(40) NOT NULL, + server_identifier VARCHAR(24) NOT NULL, + server_url TEXT NOT NULL, + server_url_hash VARCHAR(64) NOT NULL, + icon VARCHAR(255), + tenant_id UUID NOT NULL, + user_id UUID NOT NULL, + encrypted_credentials TEXT, + authed BOOLEAN NOT NULL, + tools TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT tool_mcp_provider_pkey PRIMARY KEY (id), + CONSTRAINT unique_mcp_provider_name UNIQUE (tenant_id, name), + CONSTRAINT unique_mcp_provider_server_identifier UNIQUE (tenant_id, server_identifier), + CONSTRAINT unique_mcp_provider_server_url UNIQUE (tenant_id, server_url_hash) +); + +UPDATE alembic_version SET version_num='58eb7bdb93fe' WHERE alembic_version.version_num = '0ab65e1cc7fa'; + +-- Running upgrade 58eb7bdb93fe -> 1c9ba48be8e4 + +/* Main function to generate a uuidv7 value with millisecond precision */ +CREATE FUNCTION uuidv7() RETURNS uuid +AS +$$ + -- Replace the first 48 bits of a uuidv4 with the current + -- number of milliseconds since 1970-01-01 UTC + -- and set the "ver" field to 7 by setting additional bits +SELECT encode( + set_bit( + set_bit( + overlay(uuid_send(gen_random_uuid()) placing + substring(int8send((extract(epoch from clock_timestamp()) * 1000)::bigint) from + 3) + from 1 for 6), + 52, 1), + 53, 1), 'hex')::uuid; +$$ LANGUAGE SQL VOLATILE PARALLEL SAFE; + +COMMENT ON FUNCTION uuidv7 IS + 'Generate a uuid-v7 value with a 48-bit timestamp (millisecond precision) and 74 bits of randomness';; + +CREATE FUNCTION uuidv7_boundary(timestamptz) RETURNS uuid +AS +$$ + /* uuid fields: version=0b0111, variant=0b10 */ +SELECT encode( + overlay('\x00000000000070008000000000000000'::bytea + placing substring(int8send(floor(extract(epoch from $1) * 1000)::bigint) from 3) + from 1 for 6), + 'hex')::uuid; +$$ LANGUAGE SQL STABLE STRICT PARALLEL SAFE; + +COMMENT ON FUNCTION uuidv7_boundary(timestamptz) IS + 'Generate a non-random uuidv7 with the given timestamp (first 48 bits) and all random bits to 0. As the smallest possible uuidv7 for that timestamp, it may be used as a boundary for partitions.';; + +UPDATE alembic_version SET version_num='1c9ba48be8e4' WHERE alembic_version.version_num = '58eb7bdb93fe'; + +-- Running upgrade 1c9ba48be8e4 -> 71f5020c6470 + +CREATE TABLE tool_oauth_system_clients ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + plugin_id VARCHAR(512) NOT NULL, + provider VARCHAR(255) NOT NULL, + encrypted_oauth_params TEXT NOT NULL, + CONSTRAINT tool_oauth_system_client_pkey PRIMARY KEY (id), + CONSTRAINT tool_oauth_system_client_plugin_id_provider_idx UNIQUE (plugin_id, provider) +); + +CREATE TABLE tool_oauth_tenant_clients ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + plugin_id VARCHAR(512) NOT NULL, + provider VARCHAR(255) NOT NULL, + enabled BOOLEAN DEFAULT true NOT NULL, + encrypted_oauth_params TEXT NOT NULL, + CONSTRAINT tool_oauth_tenant_client_pkey PRIMARY KEY (id), + CONSTRAINT unique_tool_oauth_tenant_client UNIQUE (tenant_id, plugin_id, provider) +); + +ALTER TABLE tool_builtin_providers ADD COLUMN name VARCHAR(256) DEFAULT 'API KEY 1'::character varying NOT NULL; + +ALTER TABLE tool_builtin_providers ADD COLUMN is_default BOOLEAN DEFAULT false NOT NULL; + +ALTER TABLE tool_builtin_providers ADD COLUMN credential_type VARCHAR(32) DEFAULT 'api-key'::character varying NOT NULL; + +ALTER TABLE tool_builtin_providers DROP CONSTRAINT unique_builtin_tool_provider; + +ALTER TABLE tool_builtin_providers ADD CONSTRAINT unique_builtin_tool_provider UNIQUE (tenant_id, provider, name); + +UPDATE alembic_version SET version_num='71f5020c6470' WHERE alembic_version.version_num = '1c9ba48be8e4'; + +-- Running upgrade 71f5020c6470 -> 1a83934ad6d1 + +ALTER TABLE tool_mcp_providers ALTER COLUMN server_identifier TYPE VARCHAR(64); + +ALTER TABLE tool_model_invokes ALTER COLUMN tool_name TYPE VARCHAR(128); + +UPDATE alembic_version SET version_num='1a83934ad6d1' WHERE alembic_version.version_num = '71f5020c6470'; + +-- Running upgrade 1a83934ad6d1 -> 375fe79ead14 + +ALTER TABLE tool_builtin_providers ADD COLUMN expires_at BIGINT DEFAULT -1 NOT NULL; + +UPDATE alembic_version SET version_num='375fe79ead14' WHERE alembic_version.version_num = '1a83934ad6d1'; + +-- Running upgrade 375fe79ead14 -> 8bcc02c9bd07 + +CREATE TABLE tenant_plugin_auto_upgrade_strategies ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + strategy_setting VARCHAR(16) DEFAULT 'fix_only' NOT NULL, + upgrade_time_of_day INTEGER NOT NULL, + upgrade_mode VARCHAR(16) DEFAULT 'exclude' NOT NULL, + exclude_plugins VARCHAR(255)[] NOT NULL, + include_plugins VARCHAR(255)[] NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT tenant_plugin_auto_upgrade_strategy_pkey PRIMARY KEY (id), + CONSTRAINT unique_tenant_plugin_auto_upgrade_strategy UNIQUE (tenant_id) +); + +UPDATE alembic_version SET version_num='8bcc02c9bd07' WHERE alembic_version.version_num = '375fe79ead14'; + +-- Running upgrade 8bcc02c9bd07 -> 532b3f888abf + +ALTER TABLE tidb_auth_bindings ALTER COLUMN status SET DEFAULT 'CREATING'::character varying; + +UPDATE alembic_version SET version_num='532b3f888abf' WHERE alembic_version.version_num = '8bcc02c9bd07'; + +-- Running upgrade 532b3f888abf -> fa8b0fa6f407 + +ALTER TABLE tool_mcp_providers ADD COLUMN timeout FLOAT DEFAULT 30 NOT NULL; + +ALTER TABLE tool_mcp_providers ADD COLUMN sse_read_timeout FLOAT DEFAULT 300 NOT NULL; + +UPDATE alembic_version SET version_num='fa8b0fa6f407' WHERE alembic_version.version_num = '532b3f888abf'; + +-- Running upgrade fa8b0fa6f407 -> e8446f481c1e + +CREATE TABLE provider_credentials ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(255) NOT NULL, + credential_name VARCHAR(255) NOT NULL, + encrypted_config TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT provider_credential_pkey PRIMARY KEY (id) +); + +CREATE INDEX provider_credential_tenant_provider_idx ON provider_credentials (tenant_id, provider_name); + +ALTER TABLE providers ADD COLUMN credential_id UUID; + +ALTER TABLE load_balancing_model_configs ADD COLUMN credential_id UUID; + +-- [IMPORTANT] Data migration skipped!!! +-- You should manually run data migration function `migrate_existing_providers_data` +-- inside file /Users/qg/workspace/langgenius/dify/api/migrations/versions/2025_08_09_1553-e8446f481c1e_add_provider_credential_pool_support.py +-- Please review the migration script carefully!; + +ALTER TABLE providers DROP COLUMN encrypted_config; + +UPDATE alembic_version SET version_num='e8446f481c1e' WHERE alembic_version.version_num = 'fa8b0fa6f407'; + +-- Running upgrade e8446f481c1e -> 0e154742a5fa + +CREATE TABLE provider_model_credentials ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + provider_name VARCHAR(255) NOT NULL, + model_name VARCHAR(255) NOT NULL, + model_type VARCHAR(40) NOT NULL, + credential_name VARCHAR(255) NOT NULL, + encrypted_config TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT provider_model_credential_pkey PRIMARY KEY (id) +); + +CREATE INDEX provider_model_credential_tenant_provider_model_idx ON provider_model_credentials (tenant_id, provider_name, model_name, model_type); + +ALTER TABLE provider_models ADD COLUMN credential_id UUID; + +ALTER TABLE load_balancing_model_configs ADD COLUMN credential_source_type VARCHAR(40); + +-- [IMPORTANT] Data migration skipped!!! +-- You should manually run data migration function `migrate_existing_provider_models_data` +-- inside file /Users/qg/workspace/langgenius/dify/api/migrations/versions/2025_08_13_1605-0e154742a5fa_add_provider_model_multi_credential.py +-- Please review the migration script carefully!; + +ALTER TABLE provider_models DROP COLUMN encrypted_config; + +UPDATE alembic_version SET version_num='0e154742a5fa' WHERE alembic_version.version_num = 'e8446f481c1e'; + +-- Running upgrade 0e154742a5fa -> 8d289573e1da + +CREATE TABLE oauth_provider_apps ( + id UUID DEFAULT uuidv7() NOT NULL, + app_icon VARCHAR(255) NOT NULL, + app_label JSON DEFAULT '{}' NOT NULL, + client_id VARCHAR(255) NOT NULL, + client_secret VARCHAR(255) NOT NULL, + redirect_uris JSON DEFAULT '[]' NOT NULL, + scope VARCHAR(255) DEFAULT 'read:name read:email read:avatar read:interface_language read:timezone' NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, + CONSTRAINT oauth_provider_app_pkey PRIMARY KEY (id) +); + +CREATE INDEX oauth_provider_app_client_id_idx ON oauth_provider_apps (client_id); + +UPDATE alembic_version SET version_num='8d289573e1da' WHERE alembic_version.version_num = '0e154742a5fa'; + +-- Running upgrade 8d289573e1da -> b95962a3885c + +CREATE INDEX workflow_app_log_workflow_run_id_idx ON workflow_app_logs (workflow_run_id); + +UPDATE alembic_version SET version_num='b95962a3885c' WHERE alembic_version.version_num = '8d289573e1da'; + +-- Running upgrade b95962a3885c -> c20211f18133 + +ALTER TABLE tool_mcp_providers ADD COLUMN encrypted_headers TEXT; + +UPDATE alembic_version SET version_num='c20211f18133' WHERE alembic_version.version_num = 'b95962a3885c'; + +-- Running upgrade c20211f18133 -> cf7c38a32b2d + +ALTER TABLE providers ADD COLUMN credential_status VARCHAR(20) DEFAULT 'active'::character varying; + +UPDATE alembic_version SET version_num='cf7c38a32b2d' WHERE alembic_version.version_num = 'c20211f18133'; + +-- Running upgrade cf7c38a32b2d -> 68519ad5cd18 + +CREATE TABLE datasource_oauth_params ( + id UUID DEFAULT uuidv7() NOT NULL, + plugin_id VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + system_credentials JSONB NOT NULL, + CONSTRAINT datasource_oauth_config_pkey PRIMARY KEY (id), + CONSTRAINT datasource_oauth_config_datasource_id_provider_idx UNIQUE (plugin_id, provider) +); + +CREATE TABLE datasource_oauth_tenant_params ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + provider VARCHAR(255) NOT NULL, + plugin_id VARCHAR(255) NOT NULL, + client_params JSONB NOT NULL, + enabled BOOLEAN NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT datasource_oauth_tenant_config_pkey PRIMARY KEY (id), + CONSTRAINT datasource_oauth_tenant_config_unique UNIQUE (tenant_id, plugin_id, provider) +); + +CREATE TABLE datasource_providers ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + plugin_id VARCHAR(255) NOT NULL, + auth_type VARCHAR(255) NOT NULL, + encrypted_credentials JSONB NOT NULL, + avatar_url TEXT, + is_default BOOLEAN DEFAULT false NOT NULL, + expires_at INTEGER DEFAULT '-1' NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT datasource_provider_pkey PRIMARY KEY (id), + CONSTRAINT datasource_provider_unique_name UNIQUE (tenant_id, plugin_id, provider, name) +); + +CREATE INDEX datasource_provider_auth_type_provider_idx ON datasource_providers (tenant_id, plugin_id, provider); + +CREATE TABLE document_pipeline_execution_logs ( + id UUID DEFAULT uuidv7() NOT NULL, + pipeline_id UUID NOT NULL, + document_id UUID NOT NULL, + datasource_type VARCHAR(255) NOT NULL, + datasource_info TEXT NOT NULL, + datasource_node_id VARCHAR(255) NOT NULL, + input_data JSON NOT NULL, + created_by UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT document_pipeline_execution_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX document_pipeline_execution_logs_document_id_idx ON document_pipeline_execution_logs (document_id); + +CREATE TABLE pipeline_built_in_templates ( + id UUID DEFAULT uuidv7() NOT NULL, + name VARCHAR(255) NOT NULL, + description TEXT NOT NULL, + chunk_structure VARCHAR(255) NOT NULL, + icon JSON NOT NULL, + yaml_content TEXT NOT NULL, + copyright VARCHAR(255) NOT NULL, + privacy_policy VARCHAR(255) NOT NULL, + position INTEGER NOT NULL, + install_count INTEGER NOT NULL, + language VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + created_by UUID NOT NULL, + updated_by UUID, + CONSTRAINT pipeline_built_in_template_pkey PRIMARY KEY (id) +); + +CREATE TABLE pipeline_customized_templates ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + description TEXT NOT NULL, + chunk_structure VARCHAR(255) NOT NULL, + icon JSON NOT NULL, + position INTEGER NOT NULL, + yaml_content TEXT NOT NULL, + install_count INTEGER NOT NULL, + language VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + updated_by UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT pipeline_customized_template_pkey PRIMARY KEY (id) +); + +CREATE INDEX pipeline_customized_template_tenant_idx ON pipeline_customized_templates (tenant_id); + +CREATE TABLE pipeline_recommended_plugins ( + id UUID DEFAULT uuidv7() NOT NULL, + plugin_id TEXT NOT NULL, + provider_name TEXT NOT NULL, + position INTEGER NOT NULL, + active BOOLEAN NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT pipeline_recommended_plugin_pkey PRIMARY KEY (id) +); + +CREATE TABLE pipelines ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + name VARCHAR(255) NOT NULL, + description TEXT DEFAULT ''::character varying NOT NULL, + workflow_id UUID, + is_public BOOLEAN DEFAULT false NOT NULL, + is_published BOOLEAN DEFAULT false NOT NULL, + created_by UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_by UUID, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT pipeline_pkey PRIMARY KEY (id) +); + +CREATE TABLE workflow_draft_variable_files ( + id UUID DEFAULT uuidv7() NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + user_id UUID NOT NULL, + upload_file_id UUID NOT NULL, + size BIGINT NOT NULL, + length INTEGER, + value_type VARCHAR(20) NOT NULL, + CONSTRAINT workflow_draft_variable_files_pkey PRIMARY KEY (id) +); + +COMMENT ON COLUMN workflow_draft_variable_files.tenant_id IS 'The tenant to which the WorkflowDraftVariableFile belongs, referencing Tenant.id'; + +COMMENT ON COLUMN workflow_draft_variable_files.app_id IS 'The application to which the WorkflowDraftVariableFile belongs, referencing App.id'; + +COMMENT ON COLUMN workflow_draft_variable_files.user_id IS 'The owner to of the WorkflowDraftVariableFile, referencing Account.id'; + +COMMENT ON COLUMN workflow_draft_variable_files.upload_file_id IS 'Reference to UploadFile containing the large variable data'; + +COMMENT ON COLUMN workflow_draft_variable_files.size IS 'Size of the original variable content in bytes'; + +COMMENT ON COLUMN workflow_draft_variable_files.length IS 'Length of the original variable content. For array and array-like types, this represents the number of elements. For object types, it indicates the number of keys. For other types, the value is NULL.'; + +CREATE TABLE workflow_node_execution_offload ( + id UUID DEFAULT uuidv7() NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + node_execution_id UUID, + type VARCHAR(20) NOT NULL, + file_id UUID NOT NULL, + CONSTRAINT workflow_node_execution_offload_pkey PRIMARY KEY (id), + CONSTRAINT workflow_node_execution_offload_node_execution_id_key UNIQUE (node_execution_id, type) +); + +ALTER TABLE datasets ADD COLUMN keyword_number INTEGER DEFAULT 10; + +ALTER TABLE datasets ADD COLUMN icon_info JSONB; + +ALTER TABLE datasets ADD COLUMN runtime_mode VARCHAR(255) DEFAULT 'general'::character varying; + +ALTER TABLE datasets ADD COLUMN pipeline_id UUID; + +ALTER TABLE datasets ADD COLUMN chunk_structure VARCHAR(255); + +ALTER TABLE datasets ADD COLUMN enable_api BOOLEAN DEFAULT true NOT NULL; + +ALTER TABLE workflow_draft_variables ADD COLUMN file_id UUID; + +COMMENT ON COLUMN workflow_draft_variables.file_id IS 'Reference to WorkflowDraftVariableFile if variable is offloaded to external storage'; + +ALTER TABLE workflow_draft_variables ADD COLUMN is_default_value BOOLEAN DEFAULT FALSE NOT NULL; + +COMMENT ON COLUMN workflow_draft_variables.is_default_value IS 'Indicates whether the current value is the default for a conversation variable. Always `FALSE` for other types of variables.'; + +CREATE INDEX workflow_draft_variable_file_id_idx ON workflow_draft_variables (file_id); + +ALTER TABLE workflows ADD COLUMN rag_pipeline_variables TEXT DEFAULT '{}' NOT NULL; + +UPDATE alembic_version SET version_num='68519ad5cd18' WHERE alembic_version.version_num = 'cf7c38a32b2d'; + +-- Running upgrade 68519ad5cd18 -> d98acf217d43 + +ALTER TABLE messages ADD COLUMN app_mode VARCHAR(255); + +CREATE INDEX message_app_mode_idx ON messages (app_mode); + +UPDATE alembic_version SET version_num='d98acf217d43' WHERE alembic_version.version_num = '68519ad5cd18'; + +-- Running upgrade d98acf217d43 -> ae662b25d9bc + +ALTER TABLE pipeline_built_in_templates DROP COLUMN updated_by; + +ALTER TABLE pipeline_built_in_templates DROP COLUMN created_by; + +UPDATE alembic_version SET version_num='ae662b25d9bc' WHERE alembic_version.version_num = 'd98acf217d43'; + +-- Running upgrade ae662b25d9bc -> 03f8dcbc611e + +CREATE TABLE workflow_pauses ( + workflow_id UUID NOT NULL, + workflow_run_id UUID NOT NULL, + resumed_at TIMESTAMP WITHOUT TIME ZONE, + state_object_key VARCHAR(255) NOT NULL, + id UUID DEFAULT uuidv7() NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT workflow_pauses_pkey PRIMARY KEY (id), + CONSTRAINT workflow_pauses_workflow_run_id_key UNIQUE (workflow_run_id) +); + +UPDATE alembic_version SET version_num='03f8dcbc611e' WHERE alembic_version.version_num = 'ae662b25d9bc'; + +-- Running upgrade 03f8dcbc611e -> 669ffd70119c + +CREATE TABLE app_triggers ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + node_id VARCHAR(64) NOT NULL, + trigger_type VARCHAR(50) NOT NULL, + title VARCHAR(255) NOT NULL, + provider_name VARCHAR(255) DEFAULT '', + status VARCHAR(50) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + CONSTRAINT app_trigger_pkey PRIMARY KEY (id) +); + +CREATE INDEX app_trigger_tenant_app_idx ON app_triggers (tenant_id, app_id); + +CREATE TABLE trigger_oauth_system_clients ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + plugin_id VARCHAR(512) NOT NULL, + provider VARCHAR(255) NOT NULL, + encrypted_oauth_params TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT trigger_oauth_system_client_pkey PRIMARY KEY (id), + CONSTRAINT trigger_oauth_system_client_plugin_id_provider_idx UNIQUE (plugin_id, provider) +); + +CREATE TABLE trigger_oauth_tenant_clients ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + plugin_id VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + enabled BOOLEAN DEFAULT true NOT NULL, + encrypted_oauth_params TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT trigger_oauth_tenant_client_pkey PRIMARY KEY (id), + CONSTRAINT unique_trigger_oauth_tenant_client UNIQUE (tenant_id, plugin_id, provider) +); + +CREATE TABLE trigger_subscriptions ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + name VARCHAR(255) NOT NULL, + tenant_id UUID NOT NULL, + user_id UUID NOT NULL, + provider_id VARCHAR(255) NOT NULL, + endpoint_id VARCHAR(255) NOT NULL, + parameters JSON NOT NULL, + properties JSON NOT NULL, + credentials JSON NOT NULL, + credential_type VARCHAR(50) NOT NULL, + credential_expires_at INTEGER NOT NULL, + expires_at INTEGER NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT trigger_provider_pkey PRIMARY KEY (id), + CONSTRAINT unique_trigger_provider UNIQUE (tenant_id, provider_id, name) +); + +COMMENT ON COLUMN trigger_subscriptions.name IS 'Subscription instance name'; + +COMMENT ON COLUMN trigger_subscriptions.provider_id IS 'Provider identifier (e.g., plugin_id/provider_name)'; + +COMMENT ON COLUMN trigger_subscriptions.endpoint_id IS 'Subscription endpoint'; + +COMMENT ON COLUMN trigger_subscriptions.parameters IS 'Subscription parameters JSON'; + +COMMENT ON COLUMN trigger_subscriptions.properties IS 'Subscription properties JSON'; + +COMMENT ON COLUMN trigger_subscriptions.credentials IS 'Subscription credentials JSON'; + +COMMENT ON COLUMN trigger_subscriptions.credential_type IS 'oauth or api_key'; + +COMMENT ON COLUMN trigger_subscriptions.credential_expires_at IS 'OAuth token expiration timestamp, -1 for never'; + +COMMENT ON COLUMN trigger_subscriptions.expires_at IS 'Subscription instance expiration timestamp, -1 for never'; + +CREATE UNIQUE INDEX idx_trigger_providers_endpoint ON trigger_subscriptions (endpoint_id); + +CREATE INDEX idx_trigger_providers_tenant_endpoint ON trigger_subscriptions (tenant_id, endpoint_id); + +CREATE INDEX idx_trigger_providers_tenant_provider ON trigger_subscriptions (tenant_id, provider_id); + +CREATE TABLE workflow_plugin_triggers ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + node_id VARCHAR(64) NOT NULL, + tenant_id UUID NOT NULL, + provider_id VARCHAR(512) NOT NULL, + event_name VARCHAR(255) NOT NULL, + subscription_id VARCHAR(255) NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT workflow_plugin_trigger_pkey PRIMARY KEY (id), + CONSTRAINT uniq_app_node_subscription UNIQUE (app_id, node_id) +); + +CREATE INDEX workflow_plugin_trigger_tenant_subscription_idx ON workflow_plugin_triggers (tenant_id, subscription_id, event_name); + +CREATE TABLE workflow_schedule_plans ( + id UUID DEFAULT uuidv7() NOT NULL, + app_id UUID NOT NULL, + node_id VARCHAR(64) NOT NULL, + tenant_id UUID NOT NULL, + cron_expression VARCHAR(255) NOT NULL, + timezone VARCHAR(64) NOT NULL, + next_run_at TIMESTAMP WITHOUT TIME ZONE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT workflow_schedule_plan_pkey PRIMARY KEY (id), + CONSTRAINT uniq_app_node UNIQUE (app_id, node_id) +); + +CREATE INDEX workflow_schedule_plan_next_idx ON workflow_schedule_plans (next_run_at); + +CREATE TABLE workflow_trigger_logs ( + id UUID DEFAULT uuidv7() NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + workflow_id UUID NOT NULL, + workflow_run_id UUID, + root_node_id VARCHAR(255), + trigger_metadata TEXT NOT NULL, + trigger_type VARCHAR(50) NOT NULL, + trigger_data TEXT NOT NULL, + inputs TEXT NOT NULL, + outputs TEXT, + status VARCHAR(50) NOT NULL, + error TEXT, + queue_name VARCHAR(100) NOT NULL, + celery_task_id VARCHAR(255), + retry_count INTEGER NOT NULL, + elapsed_time FLOAT, + total_tokens INTEGER, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + created_by_role VARCHAR(255) NOT NULL, + created_by VARCHAR(255) NOT NULL, + triggered_at TIMESTAMP WITHOUT TIME ZONE, + finished_at TIMESTAMP WITHOUT TIME ZONE, + CONSTRAINT workflow_trigger_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_trigger_log_created_at_idx ON workflow_trigger_logs (created_at); + +CREATE INDEX workflow_trigger_log_status_idx ON workflow_trigger_logs (status); + +CREATE INDEX workflow_trigger_log_tenant_app_idx ON workflow_trigger_logs (tenant_id, app_id); + +CREATE INDEX workflow_trigger_log_workflow_id_idx ON workflow_trigger_logs (workflow_id); + +CREATE INDEX workflow_trigger_log_workflow_run_idx ON workflow_trigger_logs (workflow_run_id); + +CREATE TABLE workflow_webhook_triggers ( + id UUID DEFAULT uuidv7() NOT NULL, + app_id UUID NOT NULL, + node_id VARCHAR(64) NOT NULL, + tenant_id UUID NOT NULL, + webhook_id VARCHAR(24) NOT NULL, + created_by UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT workflow_webhook_trigger_pkey PRIMARY KEY (id), + CONSTRAINT uniq_node UNIQUE (app_id, node_id), + CONSTRAINT uniq_webhook_id UNIQUE (webhook_id) +); + +CREATE INDEX workflow_webhook_trigger_tenant_idx ON workflow_webhook_triggers (tenant_id); + +ALTER TABLE celery_taskmeta ALTER COLUMN task_id SET NOT NULL; + +ALTER TABLE celery_taskmeta ALTER COLUMN status SET NOT NULL; + +ALTER TABLE celery_tasksetmeta ALTER COLUMN taskset_id SET NOT NULL; + +ALTER TABLE providers DROP COLUMN credential_status; + +UPDATE alembic_version SET version_num='669ffd70119c' WHERE alembic_version.version_num = '03f8dcbc611e'; + +-- Running upgrade 669ffd70119c -> 09cfdda155d1 + +ALTER TABLE datasource_providers ALTER COLUMN provider TYPE VARCHAR(128); + +ALTER TABLE external_knowledge_bindings ALTER COLUMN external_knowledge_id TYPE VARCHAR(512); + +ALTER TABLE tenant_plugin_auto_upgrade_strategies ALTER COLUMN exclude_plugins TYPE JSON USING to_jsonb(exclude_plugins)::json; + +ALTER TABLE tenant_plugin_auto_upgrade_strategies ALTER COLUMN include_plugins TYPE JSON USING to_jsonb(include_plugins)::json; + +ALTER TABLE tool_oauth_tenant_clients ALTER COLUMN plugin_id TYPE VARCHAR(255); + +ALTER TABLE trigger_oauth_system_clients ALTER COLUMN plugin_id TYPE VARCHAR(255); + +UPDATE alembic_version SET version_num='09cfdda155d1' WHERE alembic_version.version_num = '669ffd70119c'; + +-- Running upgrade 09cfdda155d1 -> 7bb281b7a422 + +CREATE TABLE workflow_pause_reasons ( + id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + pause_id UUID NOT NULL, + type_ VARCHAR(20) NOT NULL, + form_id VARCHAR(36) NOT NULL, + node_id VARCHAR(255) NOT NULL, + message VARCHAR(255) NOT NULL, + CONSTRAINT workflow_pause_reasons_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_pause_reasons_pause_id_idx ON workflow_pause_reasons (pause_id); + +UPDATE alembic_version SET version_num='7bb281b7a422' WHERE alembic_version.version_num = '09cfdda155d1'; + +-- Running upgrade 7bb281b7a422 -> d57accd375ae + +CREATE TABLE segment_attachment_bindings ( + id UUID NOT NULL, + tenant_id UUID NOT NULL, + dataset_id UUID NOT NULL, + document_id UUID NOT NULL, + segment_id UUID NOT NULL, + attachment_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT segment_attachment_binding_pkey PRIMARY KEY (id) +); + +CREATE INDEX segment_attachment_binding_tenant_dataset_document_segment_idx ON segment_attachment_bindings (tenant_id, dataset_id, document_id, segment_id); + +CREATE INDEX segment_attachment_binding_attachment_idx ON segment_attachment_bindings (attachment_id); + +ALTER TABLE datasets ADD COLUMN is_multimodal BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='d57accd375ae' WHERE alembic_version.version_num = '7bb281b7a422'; + +-- Running upgrade d57accd375ae -> 03ea244985ce + +ALTER TABLE pipeline_recommended_plugins ADD COLUMN type VARCHAR(50) DEFAULT 'tool' NOT NULL; + +UPDATE alembic_version SET version_num='03ea244985ce' WHERE alembic_version.version_num = 'd57accd375ae'; + +-- Running upgrade 03ea244985ce -> 7df29de0f6be + +CREATE TABLE tenant_credit_pools ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + tenant_id UUID NOT NULL, + pool_type VARCHAR(40) DEFAULT 'trial' NOT NULL, + quota_limit BIGINT NOT NULL, + quota_used BIGINT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT tenant_credit_pool_pkey PRIMARY KEY (id) +); + +CREATE INDEX tenant_credit_pool_pool_type_idx ON tenant_credit_pools (pool_type); + +CREATE INDEX tenant_credit_pool_tenant_id_idx ON tenant_credit_pools (tenant_id); + +UPDATE alembic_version SET version_num='7df29de0f6be' WHERE alembic_version.version_num = '03ea244985ce'; + +-- Running upgrade 7df29de0f6be -> 905527cc8fd3 + +CREATE INDEX workflow_run_created_at_id_idx ON workflow_runs (created_at, id); + +UPDATE alembic_version SET version_num='905527cc8fd3' WHERE alembic_version.version_num = '7df29de0f6be'; + +-- Running upgrade 905527cc8fd3 -> 3334862ee907 + +CREATE INDEX message_created_at_id_idx ON messages (created_at, id); + +UPDATE alembic_version SET version_num='3334862ee907' WHERE alembic_version.version_num = '905527cc8fd3'; + +-- Running upgrade 3334862ee907 -> 288345cd01d1 + +DROP INDEX workflow_node_execution_workflow_run_idx; + +CREATE INDEX workflow_node_execution_workflow_run_id_idx ON workflow_node_executions (workflow_run_id); + +UPDATE alembic_version SET version_num='288345cd01d1' WHERE alembic_version.version_num = '3334862ee907'; + +-- Running upgrade 288345cd01d1 -> 9e6fa5cbcd80 + +UPDATE message_annotations SET question=(SELECT coalesce(messages.query, '') AS coalesce_1 +FROM messages +WHERE messages.id = message_annotations.message_id) WHERE message_annotations.question IS NULL AND message_annotations.message_id IS NOT NULL; + +UPDATE message_annotations SET question='' WHERE message_annotations.question IS NULL; + +ALTER TABLE message_annotations ALTER COLUMN question SET NOT NULL; + +UPDATE alembic_version SET version_num='9e6fa5cbcd80' WHERE alembic_version.version_num = '288345cd01d1'; + +-- Running upgrade 9e6fa5cbcd80 -> f9f6d18a37f9 + +CREATE TABLE account_trial_app_records ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + account_id UUID NOT NULL, + app_id UUID NOT NULL, + count INTEGER NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT user_trial_app_pkey PRIMARY KEY (id), + CONSTRAINT unique_account_trial_app_record UNIQUE (account_id, app_id) +); + +CREATE INDEX account_trial_app_record_account_id_idx ON account_trial_app_records (account_id); + +CREATE INDEX account_trial_app_record_app_id_idx ON account_trial_app_records (app_id); + +CREATE TABLE exporle_banners ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + content JSON NOT NULL, + link VARCHAR(255) NOT NULL, + sort INTEGER NOT NULL, + status VARCHAR(255) DEFAULT 'enabled'::character varying NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + language VARCHAR(255) DEFAULT 'en-US'::character varying NOT NULL, + CONSTRAINT exporler_banner_pkey PRIMARY KEY (id) +); + +CREATE TABLE trial_apps ( + id UUID DEFAULT uuid_generate_v4() NOT NULL, + app_id UUID NOT NULL, + tenant_id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + trial_limit INTEGER NOT NULL, + CONSTRAINT trial_app_pkey PRIMARY KEY (id), + CONSTRAINT unique_trail_app_id UNIQUE (app_id) +); + +CREATE INDEX trial_app_app_id_idx ON trial_apps (app_id); + +CREATE INDEX trial_app_tenant_id_idx ON trial_apps (tenant_id); + +UPDATE alembic_version SET version_num='f9f6d18a37f9' WHERE alembic_version.version_num = '9e6fa5cbcd80'; + +-- Running upgrade f9f6d18a37f9 -> 9d77545f524e + +CREATE TABLE workflow_archive_logs ( + id UUID DEFAULT uuidv7() NOT NULL, + log_id UUID, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + workflow_id UUID NOT NULL, + workflow_run_id UUID NOT NULL, + created_by_role VARCHAR(255) NOT NULL, + created_by UUID NOT NULL, + log_created_at TIMESTAMP WITHOUT TIME ZONE, + log_created_from VARCHAR(255), + run_version VARCHAR(255) NOT NULL, + run_status VARCHAR(255) NOT NULL, + run_triggered_from VARCHAR(255) NOT NULL, + run_error TEXT, + run_elapsed_time FLOAT DEFAULT 0 NOT NULL, + run_total_tokens BIGINT DEFAULT 0 NOT NULL, + run_total_steps INTEGER DEFAULT 0, + run_created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + run_finished_at TIMESTAMP WITHOUT TIME ZONE, + run_exceptions_count INTEGER DEFAULT 0, + trigger_metadata TEXT, + archived_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT workflow_archive_log_pkey PRIMARY KEY (id) +); + +CREATE INDEX workflow_archive_log_app_idx ON workflow_archive_logs (tenant_id, app_id); + +CREATE INDEX workflow_archive_log_run_created_at_idx ON workflow_archive_logs (run_created_at); + +CREATE INDEX workflow_archive_log_workflow_run_id_idx ON workflow_archive_logs (workflow_run_id); + +UPDATE alembic_version SET version_num='9d77545f524e' WHERE alembic_version.version_num = 'f9f6d18a37f9'; + +-- Running upgrade 9d77545f524e -> 788d3099ae3a + +CREATE TABLE document_segment_summaries ( + id UUID NOT NULL, + dataset_id UUID NOT NULL, + document_id UUID NOT NULL, + chunk_id UUID NOT NULL, + summary_content TEXT, + summary_index_node_id VARCHAR(255), + summary_index_node_hash VARCHAR(255), + tokens INTEGER, + status VARCHAR(32) DEFAULT 'generating' NOT NULL, + error TEXT, + enabled BOOLEAN DEFAULT true NOT NULL, + disabled_at TIMESTAMP WITHOUT TIME ZONE, + disabled_by UUID, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT document_segment_summaries_pkey PRIMARY KEY (id) +); + +CREATE INDEX document_segment_summaries_chunk_id_idx ON document_segment_summaries (chunk_id); + +CREATE INDEX document_segment_summaries_dataset_id_idx ON document_segment_summaries (dataset_id); + +CREATE INDEX document_segment_summaries_document_id_idx ON document_segment_summaries (document_id); + +CREATE INDEX document_segment_summaries_status_idx ON document_segment_summaries (status); + +ALTER TABLE datasets ADD COLUMN summary_index_setting JSONB; + +ALTER TABLE documents ADD COLUMN need_summary BOOLEAN DEFAULT false NOT NULL; + +UPDATE alembic_version SET version_num='788d3099ae3a' WHERE alembic_version.version_num = '9d77545f524e'; + +-- Running upgrade 788d3099ae3a -> e8c3b3c46151 + +CREATE TABLE execution_extra_contents ( + id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + type VARCHAR(30) NOT NULL, + workflow_run_id UUID NOT NULL, + message_id UUID, + form_id UUID, + CONSTRAINT execution_extra_contents_pkey PRIMARY KEY (id) +); + +CREATE INDEX execution_extra_contents_message_id_idx ON execution_extra_contents (message_id); + +CREATE INDEX execution_extra_contents_workflow_run_id_idx ON execution_extra_contents (workflow_run_id); + +CREATE TABLE human_input_form_deliveries ( + id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + form_id UUID NOT NULL, + delivery_method_type VARCHAR(20) NOT NULL, + delivery_config_id UUID, + channel_payload TEXT NOT NULL, + CONSTRAINT human_input_form_deliveries_pkey PRIMARY KEY (id) +); + +CREATE TABLE human_input_form_recipients ( + id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + form_id UUID NOT NULL, + delivery_id UUID NOT NULL, + recipient_type VARCHAR(20) NOT NULL, + recipient_payload TEXT NOT NULL, + access_token VARCHAR(32) NOT NULL, + CONSTRAINT human_input_form_recipients_pkey PRIMARY KEY (id) +); + +ALTER TABLE human_input_form_recipients ADD CONSTRAINT human_input_form_recipients_access_token_key UNIQUE (access_token); + +CREATE TABLE human_input_forms ( + id UUID NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, + tenant_id UUID NOT NULL, + app_id UUID NOT NULL, + workflow_run_id UUID, + form_kind VARCHAR(20) NOT NULL, + node_id VARCHAR(60) NOT NULL, + form_definition TEXT NOT NULL, + rendered_content TEXT NOT NULL, + status VARCHAR(20) NOT NULL, + expiration_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, + selected_action_id VARCHAR(200), + submitted_data TEXT, + submitted_at TIMESTAMP WITHOUT TIME ZONE, + submission_user_id UUID, + submission_end_user_id UUID, + completed_by_recipient_id UUID, + CONSTRAINT human_input_forms_pkey PRIMARY KEY (id) +); + +UPDATE alembic_version SET version_num='e8c3b3c46151' WHERE alembic_version.version_num = '788d3099ae3a'; + +COMMIT; + From d898bcff90b850578bf1438d835170af7eed289a Mon Sep 17 00:00:00 2001 From: QuantumGhost Date: Thu, 5 Feb 2026 15:22:09 +0800 Subject: [PATCH 2/5] feat(api): adjust timeout for get_message to 1s --- api/libs/broadcast_channel/redis/channel.py | 2 +- api/libs/broadcast_channel/redis/sharded_channel.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/libs/broadcast_channel/redis/channel.py b/api/libs/broadcast_channel/redis/channel.py index 51c86e0bd0..35a227769c 100644 --- a/api/libs/broadcast_channel/redis/channel.py +++ b/api/libs/broadcast_channel/redis/channel.py @@ -64,7 +64,7 @@ class _RedisSubscription(RedisSubscriptionBase): def _get_message(self) -> dict | None: assert self._pubsub is not None - return self._pubsub.get_message(ignore_subscribe_messages=True, timeout=0.1) + return self._pubsub.get_message(ignore_subscribe_messages=True, timeout=1) def _get_message_type(self) -> str: return "message" diff --git a/api/libs/broadcast_channel/redis/sharded_channel.py b/api/libs/broadcast_channel/redis/sharded_channel.py index 9a5fc9cdcf..6dfb494ad7 100644 --- a/api/libs/broadcast_channel/redis/sharded_channel.py +++ b/api/libs/broadcast_channel/redis/sharded_channel.py @@ -73,11 +73,11 @@ class _RedisShardedSubscription(RedisSubscriptionBase): node = self._client.get_node_from_key(self._topic) return self._pubsub.get_sharded_message( ignore_subscribe_messages=False, - timeout=0.1, + timeout=1, target_node=node, ) else: - return self._pubsub.get_sharded_message(ignore_subscribe_messages=False, timeout=0.1) # type: ignore[attr-defined] + return self._pubsub.get_sharded_message(ignore_subscribe_messages=False, timeout=1) # type: ignore[attr-defined] def _get_message_type(self) -> str: return "smessage" From aaf83c2b4c83dff1e7a998a8fb54f9efc8f3fff9 Mon Sep 17 00:00:00 2001 From: QuantumGhost Date: Thu, 5 Feb 2026 16:15:32 +0800 Subject: [PATCH 3/5] chore(api): fix linting issue --- api/libs/broadcast_channel/redis/_subscription.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/libs/broadcast_channel/redis/_subscription.py b/api/libs/broadcast_channel/redis/_subscription.py index 668de7b7e3..df81775660 100644 --- a/api/libs/broadcast_channel/redis/_subscription.py +++ b/api/libs/broadcast_channel/redis/_subscription.py @@ -7,8 +7,8 @@ from typing import Self from libs.broadcast_channel.channel import Subscription from libs.broadcast_channel.exc import SubscriptionClosedError -from redis.client import PubSub from redis import Redis, RedisCluster +from redis.client import PubSub _logger = logging.getLogger(__name__) From 79b6117d80f8235f72ecc940b59da79f91d46006 Mon Sep 17 00:00:00 2001 From: QuantumGhost Date: Fri, 6 Feb 2026 14:34:57 +0800 Subject: [PATCH 4/5] fixup! fix(api): fix performance issue in ShardedRedisBroadcastChannel --- api/upgrade.sql | 3289 ----------------------------------------------- 1 file changed, 3289 deletions(-) delete mode 100644 api/upgrade.sql diff --git a/api/upgrade.sql b/api/upgrade.sql deleted file mode 100644 index 3cd0cfdab0..0000000000 --- a/api/upgrade.sql +++ /dev/null @@ -1,3289 +0,0 @@ -BEGIN; - -CREATE TABLE alembic_version ( - version_num VARCHAR(32) NOT NULL, - CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num) -); - --- Running upgrade -> 64b051264f32 - -CREATE EXTENSION IF NOT EXISTS "uuid-ossp";; - -CREATE TABLE account_integrates ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - account_id UUID NOT NULL, - provider VARCHAR(16) NOT NULL, - open_id VARCHAR(255) NOT NULL, - encrypted_token VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT account_integrate_pkey PRIMARY KEY (id), - CONSTRAINT unique_account_provider UNIQUE (account_id, provider), - CONSTRAINT unique_provider_open_id UNIQUE (provider, open_id) -); - -CREATE TABLE accounts ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(255) NOT NULL, - email VARCHAR(255) NOT NULL, - password VARCHAR(255), - password_salt VARCHAR(255), - avatar VARCHAR(255), - interface_language VARCHAR(255), - interface_theme VARCHAR(255), - timezone VARCHAR(255), - last_login_at TIMESTAMP WITHOUT TIME ZONE, - last_login_ip VARCHAR(255), - status VARCHAR(16) DEFAULT 'active'::character varying NOT NULL, - initialized_at TIMESTAMP WITHOUT TIME ZONE, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT account_pkey PRIMARY KEY (id) -); - -CREATE INDEX account_email_idx ON accounts (email); - -CREATE TABLE api_requests ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - api_token_id UUID NOT NULL, - path VARCHAR(255) NOT NULL, - request TEXT, - response TEXT, - ip VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT api_request_pkey PRIMARY KEY (id) -); - -CREATE INDEX api_request_token_idx ON api_requests (tenant_id, api_token_id); - -CREATE TABLE api_tokens ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID, - dataset_id UUID, - type VARCHAR(16) NOT NULL, - token VARCHAR(255) NOT NULL, - last_used_at TIMESTAMP WITHOUT TIME ZONE, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT api_token_pkey PRIMARY KEY (id) -); - -CREATE INDEX api_token_app_id_type_idx ON api_tokens (app_id, type); - -CREATE INDEX api_token_token_idx ON api_tokens (token, type); - -CREATE TABLE app_dataset_joins ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - dataset_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT app_dataset_join_pkey PRIMARY KEY (id) -); - -CREATE INDEX app_dataset_join_app_dataset_idx ON app_dataset_joins (dataset_id, app_id); - -CREATE TABLE app_model_configs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - provider VARCHAR(255) NOT NULL, - model_id VARCHAR(255) NOT NULL, - configs JSON NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - opening_statement TEXT, - suggested_questions TEXT, - suggested_questions_after_answer TEXT, - more_like_this TEXT, - model TEXT, - user_input_form TEXT, - pre_prompt TEXT, - agent_mode TEXT, - CONSTRAINT app_model_config_pkey PRIMARY KEY (id) -); - -CREATE INDEX app_app_id_idx ON app_model_configs (app_id); - -CREATE TABLE apps ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - mode VARCHAR(255) NOT NULL, - icon VARCHAR(255), - icon_background VARCHAR(255), - app_model_config_id UUID, - status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, - enable_site BOOLEAN NOT NULL, - enable_api BOOLEAN NOT NULL, - api_rpm INTEGER NOT NULL, - api_rph INTEGER NOT NULL, - is_demo BOOLEAN DEFAULT false NOT NULL, - is_public BOOLEAN DEFAULT false NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT app_pkey PRIMARY KEY (id) -); - -CREATE INDEX app_tenant_id_idx ON apps (tenant_id); - -CREATE SEQUENCE task_id_sequence;; - -CREATE SEQUENCE taskset_id_sequence;; - -CREATE TABLE celery_taskmeta ( - id INTEGER DEFAULT nextval('task_id_sequence') NOT NULL, - task_id VARCHAR(155), - status VARCHAR(50), - result BYTEA, - date_done TIMESTAMP WITHOUT TIME ZONE, - traceback TEXT, - name VARCHAR(155), - args BYTEA, - kwargs BYTEA, - worker VARCHAR(155), - retries INTEGER, - queue VARCHAR(155), - CONSTRAINT celery_taskmeta_pkey PRIMARY KEY (id), - CONSTRAINT celery_taskmeta_task_id_key UNIQUE (task_id) -); - -CREATE TABLE celery_tasksetmeta ( - id INTEGER DEFAULT nextval('taskset_id_sequence') NOT NULL, - taskset_id VARCHAR(155), - result BYTEA, - date_done TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT celery_tasksetmeta_pkey PRIMARY KEY (id), - CONSTRAINT celery_tasksetmeta_taskset_id_key UNIQUE (taskset_id) -); - -CREATE TABLE conversations ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - app_model_config_id UUID NOT NULL, - model_provider VARCHAR(255) NOT NULL, - override_model_configs TEXT, - model_id VARCHAR(255) NOT NULL, - mode VARCHAR(255) NOT NULL, - name VARCHAR(255) NOT NULL, - summary TEXT, - inputs JSON, - introduction TEXT, - system_instruction TEXT, - system_instruction_tokens INTEGER DEFAULT 0 NOT NULL, - status VARCHAR(255) NOT NULL, - from_source VARCHAR(255) NOT NULL, - from_end_user_id UUID, - from_account_id UUID, - read_at TIMESTAMP WITHOUT TIME ZONE, - read_account_id UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT conversation_pkey PRIMARY KEY (id) -); - -CREATE INDEX conversation_app_from_user_idx ON conversations (app_id, from_source, from_end_user_id); - -CREATE TABLE dataset_keyword_tables ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - dataset_id UUID NOT NULL, - keyword_table TEXT NOT NULL, - CONSTRAINT dataset_keyword_table_pkey PRIMARY KEY (id), - CONSTRAINT dataset_keyword_tables_dataset_id_key UNIQUE (dataset_id) -); - -CREATE INDEX dataset_keyword_table_dataset_id_idx ON dataset_keyword_tables (dataset_id); - -CREATE TABLE dataset_process_rules ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - dataset_id UUID NOT NULL, - mode VARCHAR(255) DEFAULT 'automatic'::character varying NOT NULL, - rules TEXT, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT dataset_process_rule_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_process_rule_dataset_id_idx ON dataset_process_rules (dataset_id); - -CREATE TABLE dataset_queries ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - dataset_id UUID NOT NULL, - content TEXT NOT NULL, - source VARCHAR(255) NOT NULL, - source_app_id UUID, - created_by_role VARCHAR NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT dataset_query_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_query_dataset_id_idx ON dataset_queries (dataset_id); - -CREATE TABLE datasets ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - description TEXT, - provider VARCHAR(255) DEFAULT 'vendor'::character varying NOT NULL, - permission VARCHAR(255) DEFAULT 'only_me'::character varying NOT NULL, - data_source_type VARCHAR(255), - indexing_technique VARCHAR(255), - index_struct TEXT, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_by UUID, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT dataset_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_tenant_idx ON datasets (tenant_id); - -CREATE TABLE dify_setups ( - version VARCHAR(255) NOT NULL, - setup_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT dify_setup_pkey PRIMARY KEY (version) -); - -CREATE TABLE document_segments ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - document_id UUID NOT NULL, - position INTEGER NOT NULL, - content TEXT NOT NULL, - word_count INTEGER NOT NULL, - tokens INTEGER NOT NULL, - keywords JSON, - index_node_id VARCHAR(255), - index_node_hash VARCHAR(255), - hit_count INTEGER NOT NULL, - enabled BOOLEAN DEFAULT true NOT NULL, - disabled_at TIMESTAMP WITHOUT TIME ZONE, - disabled_by UUID, - status VARCHAR(255) DEFAULT 'waiting'::character varying NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - indexing_at TIMESTAMP WITHOUT TIME ZONE, - completed_at TIMESTAMP WITHOUT TIME ZONE, - error TEXT, - stopped_at TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT document_segment_pkey PRIMARY KEY (id) -); - -CREATE INDEX document_segment_dataset_id_idx ON document_segments (dataset_id); - -CREATE INDEX document_segment_dataset_node_idx ON document_segments (dataset_id, index_node_id); - -CREATE INDEX document_segment_document_id_idx ON document_segments (document_id); - -CREATE INDEX document_segment_tenant_dataset_idx ON document_segments (dataset_id, tenant_id); - -CREATE INDEX document_segment_tenant_document_idx ON document_segments (document_id, tenant_id); - -CREATE TABLE documents ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - position INTEGER NOT NULL, - data_source_type VARCHAR(255) NOT NULL, - data_source_info TEXT, - dataset_process_rule_id UUID, - batch VARCHAR(255) NOT NULL, - name VARCHAR(255) NOT NULL, - created_from VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - created_api_request_id UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - processing_started_at TIMESTAMP WITHOUT TIME ZONE, - file_id TEXT, - word_count INTEGER, - parsing_completed_at TIMESTAMP WITHOUT TIME ZONE, - cleaning_completed_at TIMESTAMP WITHOUT TIME ZONE, - splitting_completed_at TIMESTAMP WITHOUT TIME ZONE, - tokens INTEGER, - indexing_latency FLOAT, - completed_at TIMESTAMP WITHOUT TIME ZONE, - is_paused BOOLEAN DEFAULT false, - paused_by UUID, - paused_at TIMESTAMP WITHOUT TIME ZONE, - error TEXT, - stopped_at TIMESTAMP WITHOUT TIME ZONE, - indexing_status VARCHAR(255) DEFAULT 'waiting'::character varying NOT NULL, - enabled BOOLEAN DEFAULT true NOT NULL, - disabled_at TIMESTAMP WITHOUT TIME ZONE, - disabled_by UUID, - archived BOOLEAN DEFAULT false NOT NULL, - archived_reason VARCHAR(255), - archived_by UUID, - archived_at TIMESTAMP WITHOUT TIME ZONE, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - doc_type VARCHAR(40), - doc_metadata JSON, - CONSTRAINT document_pkey PRIMARY KEY (id) -); - -CREATE INDEX document_dataset_id_idx ON documents (dataset_id); - -CREATE INDEX document_is_paused_idx ON documents (is_paused); - -CREATE TABLE embeddings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - hash VARCHAR(64) NOT NULL, - embedding BYTEA NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT embedding_pkey PRIMARY KEY (id), - CONSTRAINT embedding_hash_idx UNIQUE (hash) -); - -CREATE TABLE end_users ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID, - type VARCHAR(255) NOT NULL, - external_user_id VARCHAR(255), - name VARCHAR(255), - is_anonymous BOOLEAN DEFAULT true NOT NULL, - session_id VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT end_user_pkey PRIMARY KEY (id) -); - -CREATE INDEX end_user_session_id_idx ON end_users (session_id, type); - -CREATE INDEX end_user_tenant_session_id_idx ON end_users (tenant_id, session_id, type); - -CREATE TABLE installed_apps ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - app_owner_tenant_id UUID NOT NULL, - position INTEGER NOT NULL, - is_pinned BOOLEAN DEFAULT false NOT NULL, - last_used_at TIMESTAMP WITHOUT TIME ZONE, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT installed_app_pkey PRIMARY KEY (id), - CONSTRAINT unique_tenant_app UNIQUE (tenant_id, app_id) -); - -CREATE INDEX installed_app_app_id_idx ON installed_apps (app_id); - -CREATE INDEX installed_app_tenant_id_idx ON installed_apps (tenant_id); - -CREATE TABLE invitation_codes ( - id SERIAL NOT NULL, - batch VARCHAR(255) NOT NULL, - code VARCHAR(32) NOT NULL, - status VARCHAR(16) DEFAULT 'unused'::character varying NOT NULL, - used_at TIMESTAMP WITHOUT TIME ZONE, - used_by_tenant_id UUID, - used_by_account_id UUID, - deprecated_at TIMESTAMP WITHOUT TIME ZONE, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT invitation_code_pkey PRIMARY KEY (id) -); - -CREATE INDEX invitation_codes_batch_idx ON invitation_codes (batch); - -CREATE INDEX invitation_codes_code_idx ON invitation_codes (code, status); - -CREATE TABLE message_agent_thoughts ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - message_id UUID NOT NULL, - message_chain_id UUID NOT NULL, - position INTEGER NOT NULL, - thought TEXT, - tool TEXT, - tool_input TEXT, - observation TEXT, - tool_process_data TEXT, - message TEXT, - message_token INTEGER, - message_unit_price NUMERIC, - answer TEXT, - answer_token INTEGER, - answer_unit_price NUMERIC, - tokens INTEGER, - total_price NUMERIC, - currency VARCHAR, - latency FLOAT, - created_by_role VARCHAR NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT message_agent_thought_pkey PRIMARY KEY (id) -); - -CREATE INDEX message_agent_thought_message_chain_id_idx ON message_agent_thoughts (message_chain_id); - -CREATE INDEX message_agent_thought_message_id_idx ON message_agent_thoughts (message_id); - -CREATE TABLE message_chains ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - message_id UUID NOT NULL, - type VARCHAR(255) NOT NULL, - input TEXT, - output TEXT, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT message_chain_pkey PRIMARY KEY (id) -); - -CREATE INDEX message_chain_message_id_idx ON message_chains (message_id); - -CREATE TABLE message_feedbacks ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - conversation_id UUID NOT NULL, - message_id UUID NOT NULL, - rating VARCHAR(255) NOT NULL, - content TEXT, - from_source VARCHAR(255) NOT NULL, - from_end_user_id UUID, - from_account_id UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT message_feedback_pkey PRIMARY KEY (id) -); - -CREATE INDEX message_feedback_app_idx ON message_feedbacks (app_id); - -CREATE INDEX message_feedback_conversation_idx ON message_feedbacks (conversation_id, from_source, rating); - -CREATE INDEX message_feedback_message_idx ON message_feedbacks (message_id, from_source); - -CREATE TABLE operation_logs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - account_id UUID NOT NULL, - action VARCHAR(255) NOT NULL, - content JSON, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - created_ip VARCHAR(255) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT operation_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX operation_log_account_action_idx ON operation_logs (tenant_id, account_id, action); - -CREATE TABLE pinned_conversations ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - conversation_id UUID NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT pinned_conversation_pkey PRIMARY KEY (id) -); - -CREATE INDEX pinned_conversation_conversation_idx ON pinned_conversations (app_id, conversation_id, created_by); - -CREATE TABLE providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(40) NOT NULL, - provider_type VARCHAR(40) DEFAULT 'custom'::character varying NOT NULL, - encrypted_config TEXT, - is_valid BOOLEAN DEFAULT false NOT NULL, - last_used TIMESTAMP WITHOUT TIME ZONE, - quota_type VARCHAR(40) DEFAULT ''::character varying, - quota_limit INTEGER, - quota_used INTEGER, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT provider_pkey PRIMARY KEY (id), - CONSTRAINT unique_provider_name_type_quota UNIQUE (tenant_id, provider_name, provider_type, quota_type) -); - -CREATE INDEX provider_tenant_id_provider_idx ON providers (tenant_id, provider_name); - -CREATE TABLE recommended_apps ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - description JSON NOT NULL, - copyright VARCHAR(255) NOT NULL, - privacy_policy VARCHAR(255) NOT NULL, - category VARCHAR(255) NOT NULL, - position INTEGER NOT NULL, - is_listed BOOLEAN NOT NULL, - install_count INTEGER NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT recommended_app_pkey PRIMARY KEY (id) -); - -CREATE INDEX recommended_app_app_id_idx ON recommended_apps (app_id); - -CREATE INDEX recommended_app_is_listed_idx ON recommended_apps (is_listed); - -CREATE TABLE saved_messages ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - message_id UUID NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT saved_message_pkey PRIMARY KEY (id) -); - -CREATE INDEX saved_message_message_idx ON saved_messages (app_id, message_id, created_by); - -CREATE TABLE sessions ( - id SERIAL NOT NULL, - session_id VARCHAR(255), - data BYTEA, - expiry TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT sessions_pkey PRIMARY KEY (id), - CONSTRAINT sessions_session_id_key UNIQUE (session_id) -); - -CREATE TABLE sites ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - title VARCHAR(255) NOT NULL, - icon VARCHAR(255), - icon_background VARCHAR(255), - description VARCHAR(255), - default_language VARCHAR(255) NOT NULL, - copyright VARCHAR(255), - privacy_policy VARCHAR(255), - customize_domain VARCHAR(255), - customize_token_strategy VARCHAR(255) NOT NULL, - prompt_public BOOLEAN DEFAULT false NOT NULL, - status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - code VARCHAR(255), - CONSTRAINT site_pkey PRIMARY KEY (id) -); - -CREATE INDEX site_app_id_idx ON sites (app_id); - -CREATE INDEX site_code_idx ON sites (code, status); - -CREATE TABLE tenant_account_joins ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - account_id UUID NOT NULL, - role VARCHAR(16) DEFAULT 'normal' NOT NULL, - invited_by UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tenant_account_join_pkey PRIMARY KEY (id), - CONSTRAINT unique_tenant_account_join UNIQUE (tenant_id, account_id) -); - -CREATE INDEX tenant_account_join_account_id_idx ON tenant_account_joins (account_id); - -CREATE INDEX tenant_account_join_tenant_id_idx ON tenant_account_joins (tenant_id); - -CREATE TABLE tenants ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(255) NOT NULL, - encrypt_public_key TEXT, - plan VARCHAR(255) DEFAULT 'basic'::character varying NOT NULL, - status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tenant_pkey PRIMARY KEY (id) -); - -CREATE TABLE upload_files ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - storage_type VARCHAR(255) NOT NULL, - key VARCHAR(255) NOT NULL, - name VARCHAR(255) NOT NULL, - size INTEGER NOT NULL, - extension VARCHAR(255) NOT NULL, - mime_type VARCHAR(255), - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - used BOOLEAN DEFAULT false NOT NULL, - used_by UUID, - used_at TIMESTAMP WITHOUT TIME ZONE, - hash VARCHAR(255), - CONSTRAINT upload_file_pkey PRIMARY KEY (id) -); - -CREATE INDEX upload_file_tenant_idx ON upload_files (tenant_id); - -CREATE TABLE message_annotations ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - conversation_id UUID NOT NULL, - message_id UUID NOT NULL, - content TEXT NOT NULL, - account_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT message_annotation_pkey PRIMARY KEY (id) -); - -CREATE INDEX message_annotation_app_idx ON message_annotations (app_id); - -CREATE INDEX message_annotation_conversation_idx ON message_annotations (conversation_id); - -CREATE INDEX message_annotation_message_idx ON message_annotations (message_id); - -CREATE TABLE messages ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - model_provider VARCHAR(255) NOT NULL, - model_id VARCHAR(255) NOT NULL, - override_model_configs TEXT, - conversation_id UUID NOT NULL, - inputs JSON, - query TEXT NOT NULL, - message JSON NOT NULL, - message_tokens INTEGER DEFAULT 0 NOT NULL, - message_unit_price NUMERIC(10, 4) NOT NULL, - answer TEXT NOT NULL, - answer_tokens INTEGER DEFAULT 0 NOT NULL, - answer_unit_price NUMERIC(10, 4) NOT NULL, - provider_response_latency FLOAT DEFAULT 0 NOT NULL, - total_price NUMERIC(10, 7), - currency VARCHAR(255) NOT NULL, - from_source VARCHAR(255) NOT NULL, - from_end_user_id UUID, - from_account_id UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - agent_based BOOLEAN DEFAULT false NOT NULL, - CONSTRAINT message_pkey PRIMARY KEY (id) -); - -CREATE INDEX message_account_idx ON messages (app_id, from_source, from_account_id); - -CREATE INDEX message_app_id_idx ON messages (app_id, created_at); - -CREATE INDEX message_conversation_id_idx ON messages (conversation_id); - -CREATE INDEX message_end_user_idx ON messages (app_id, from_source, from_end_user_id); - -INSERT INTO alembic_version (version_num) VALUES ('64b051264f32') RETURNING alembic_version.version_num; - --- Running upgrade 64b051264f32 -> 9f4e3427ea84 - -ALTER TABLE pinned_conversations ADD COLUMN created_by_role VARCHAR(255) DEFAULT 'end_user'::character varying NOT NULL; - -DROP INDEX pinned_conversation_conversation_idx; - -CREATE INDEX pinned_conversation_conversation_idx ON pinned_conversations (app_id, conversation_id, created_by_role, created_by); - -ALTER TABLE saved_messages ADD COLUMN created_by_role VARCHAR(255) DEFAULT 'end_user'::character varying NOT NULL; - -DROP INDEX saved_message_message_idx; - -CREATE INDEX saved_message_message_idx ON saved_messages (app_id, message_id, created_by_role, created_by); - -UPDATE alembic_version SET version_num='9f4e3427ea84' WHERE alembic_version.version_num = '64b051264f32'; - --- Running upgrade 9f4e3427ea84 -> a45f4dfde53b - -ALTER TABLE recommended_apps ADD COLUMN language VARCHAR(255) DEFAULT 'en-US'::character varying NOT NULL; - -DROP INDEX recommended_app_is_listed_idx; - -CREATE INDEX recommended_app_is_listed_idx ON recommended_apps (is_listed, language); - -UPDATE alembic_version SET version_num='a45f4dfde53b' WHERE alembic_version.version_num = '9f4e3427ea84'; - --- Running upgrade a45f4dfde53b -> 614f77cecc48 - -ALTER TABLE accounts ADD COLUMN last_active_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; - -UPDATE alembic_version SET version_num='614f77cecc48' WHERE alembic_version.version_num = 'a45f4dfde53b'; - --- Running upgrade 614f77cecc48 -> e32f6ccb87c6 - -CREATE TABLE data_source_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - access_token VARCHAR(255) NOT NULL, - provider VARCHAR(255) NOT NULL, - source_info JSONB NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - disabled BOOLEAN DEFAULT false, - CONSTRAINT source_binding_pkey PRIMARY KEY (id) -); - -CREATE INDEX source_binding_tenant_id_idx ON data_source_bindings (tenant_id); - -CREATE INDEX source_info_idx ON data_source_bindings USING gin (source_info); - -UPDATE alembic_version SET version_num='e32f6ccb87c6' WHERE alembic_version.version_num = '614f77cecc48'; - --- Running upgrade e32f6ccb87c6 -> d3d503a3471c - -ALTER TABLE conversations ADD COLUMN is_deleted BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='d3d503a3471c' WHERE alembic_version.version_num = 'e32f6ccb87c6'; - --- Running upgrade d3d503a3471c -> a5b56fb053ef - -ALTER TABLE app_model_configs ADD COLUMN speech_to_text TEXT; - -UPDATE alembic_version SET version_num='a5b56fb053ef' WHERE alembic_version.version_num = 'd3d503a3471c'; - --- Running upgrade a5b56fb053ef -> 2beac44e5f5f - -ALTER TABLE apps ADD COLUMN is_universal BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='2beac44e5f5f' WHERE alembic_version.version_num = 'a5b56fb053ef'; - --- Running upgrade 2beac44e5f5f -> 7ce5a52e4eee - -CREATE TABLE tool_providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - tool_name VARCHAR(40) NOT NULL, - encrypted_credentials TEXT, - is_enabled BOOLEAN DEFAULT false NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tool_provider_pkey PRIMARY KEY (id), - CONSTRAINT unique_tool_provider_tool_name UNIQUE (tenant_id, tool_name) -); - -ALTER TABLE app_model_configs ADD COLUMN sensitive_word_avoidance TEXT; - -UPDATE alembic_version SET version_num='7ce5a52e4eee' WHERE alembic_version.version_num = '2beac44e5f5f'; - --- Running upgrade 7ce5a52e4eee -> 8d2d099ceb74 - -ALTER TABLE document_segments ADD COLUMN answer TEXT; - -ALTER TABLE document_segments ADD COLUMN updated_by UUID; - -ALTER TABLE document_segments ADD COLUMN updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; - -ALTER TABLE documents ADD COLUMN doc_form VARCHAR(255) DEFAULT 'text_model'::character varying NOT NULL; - -UPDATE alembic_version SET version_num='8d2d099ceb74' WHERE alembic_version.version_num = '7ce5a52e4eee'; - --- Running upgrade 8d2d099ceb74 -> 16fa53d9faec - -CREATE TABLE provider_models ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(40) NOT NULL, - model_name VARCHAR(40) NOT NULL, - model_type VARCHAR(40) NOT NULL, - encrypted_config TEXT, - is_valid BOOLEAN DEFAULT false NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT provider_model_pkey PRIMARY KEY (id), - CONSTRAINT unique_provider_model_name UNIQUE (tenant_id, provider_name, model_name, model_type) -); - -CREATE INDEX provider_model_tenant_id_provider_idx ON provider_models (tenant_id, provider_name); - -CREATE TABLE tenant_default_models ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(40) NOT NULL, - model_name VARCHAR(40) NOT NULL, - model_type VARCHAR(40) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tenant_default_model_pkey PRIMARY KEY (id) -); - -CREATE INDEX tenant_default_model_tenant_id_provider_type_idx ON tenant_default_models (tenant_id, provider_name, model_type); - -CREATE TABLE tenant_preferred_model_providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(40) NOT NULL, - preferred_provider_type VARCHAR(40) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tenant_preferred_model_provider_pkey PRIMARY KEY (id) -); - -CREATE INDEX tenant_preferred_model_provider_tenant_provider_idx ON tenant_preferred_model_providers (tenant_id, provider_name); - -UPDATE alembic_version SET version_num='16fa53d9faec' WHERE alembic_version.version_num = '8d2d099ceb74'; - --- Running upgrade 16fa53d9faec -> e35ed59becda - -ALTER TABLE providers ALTER COLUMN quota_limit TYPE BIGINT; - -ALTER TABLE providers ALTER COLUMN quota_used TYPE BIGINT; - -UPDATE alembic_version SET version_num='e35ed59becda' WHERE alembic_version.version_num = '16fa53d9faec'; - --- Running upgrade e35ed59becda -> bf0aec5ba2cf - -CREATE TABLE provider_orders ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(40) NOT NULL, - account_id UUID NOT NULL, - payment_product_id VARCHAR(191) NOT NULL, - payment_id VARCHAR(191), - transaction_id VARCHAR(191), - quantity INTEGER DEFAULT 1 NOT NULL, - currency VARCHAR(40), - total_amount INTEGER, - payment_status VARCHAR(40) DEFAULT 'wait_pay'::character varying NOT NULL, - paid_at TIMESTAMP WITHOUT TIME ZONE, - pay_failed_at TIMESTAMP WITHOUT TIME ZONE, - refunded_at TIMESTAMP WITHOUT TIME ZONE, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT provider_order_pkey PRIMARY KEY (id) -); - -CREATE INDEX provider_order_tenant_provider_idx ON provider_orders (tenant_id, provider_name); - -UPDATE alembic_version SET version_num='bf0aec5ba2cf' WHERE alembic_version.version_num = 'e35ed59becda'; - --- Running upgrade bf0aec5ba2cf -> 5022897aaceb - -ALTER TABLE embeddings ADD COLUMN model_name VARCHAR(40) DEFAULT 'text-embedding-ada-002'::character varying NOT NULL; - -ALTER TABLE embeddings DROP CONSTRAINT embedding_hash_idx; - -ALTER TABLE embeddings ADD CONSTRAINT embedding_hash_idx UNIQUE (model_name, hash); - -UPDATE alembic_version SET version_num='5022897aaceb' WHERE alembic_version.version_num = 'bf0aec5ba2cf'; - --- Running upgrade 5022897aaceb -> 2c8af9671032 - -ALTER TABLE documents ADD COLUMN doc_language VARCHAR(255); - -UPDATE alembic_version SET version_num='2c8af9671032' WHERE alembic_version.version_num = '5022897aaceb'; - --- Running upgrade 2c8af9671032 -> e8883b0148c9 - -ALTER TABLE datasets ADD COLUMN embedding_model VARCHAR(255) DEFAULT 'text-embedding-ada-002'::character varying NOT NULL; - -ALTER TABLE datasets ADD COLUMN embedding_model_provider VARCHAR(255) DEFAULT 'openai'::character varying NOT NULL; - -UPDATE alembic_version SET version_num='e8883b0148c9' WHERE alembic_version.version_num = '2c8af9671032'; - --- Running upgrade e8883b0148c9 -> 853f9b9cd3b6 - -ALTER TABLE message_agent_thoughts ADD COLUMN message_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; - -ALTER TABLE message_agent_thoughts ADD COLUMN answer_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; - -ALTER TABLE messages ADD COLUMN message_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; - -ALTER TABLE messages ADD COLUMN answer_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL; - -UPDATE alembic_version SET version_num='853f9b9cd3b6' WHERE alembic_version.version_num = 'e8883b0148c9'; - --- Running upgrade 853f9b9cd3b6 -> 4bcffcd64aa4 - -ALTER TABLE datasets ALTER COLUMN embedding_model DROP NOT NULL; - -ALTER TABLE datasets ALTER COLUMN embedding_model_provider DROP NOT NULL; - -UPDATE alembic_version SET version_num='4bcffcd64aa4' WHERE alembic_version.version_num = '853f9b9cd3b6'; - --- Running upgrade 4bcffcd64aa4 -> 6dcb43972bdc - -CREATE TABLE dataset_retriever_resources ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - message_id UUID NOT NULL, - position INTEGER NOT NULL, - dataset_id UUID NOT NULL, - dataset_name TEXT NOT NULL, - document_id UUID NOT NULL, - document_name TEXT NOT NULL, - data_source_type TEXT NOT NULL, - segment_id UUID NOT NULL, - score FLOAT, - content TEXT NOT NULL, - hit_count INTEGER, - word_count INTEGER, - segment_position INTEGER, - index_node_hash TEXT, - retriever_from TEXT NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT dataset_retriever_resource_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_retriever_resource_message_id_idx ON dataset_retriever_resources (message_id); - -UPDATE alembic_version SET version_num='6dcb43972bdc' WHERE alembic_version.version_num = '4bcffcd64aa4'; - --- Running upgrade 6dcb43972bdc -> 77e83833755c - -ALTER TABLE app_model_configs ADD COLUMN retriever_resource TEXT; - -UPDATE alembic_version SET version_num='77e83833755c' WHERE alembic_version.version_num = '6dcb43972bdc'; - --- Running upgrade 77e83833755c -> 6e2cfb077b04 - -CREATE TABLE dataset_collection_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - provider_name VARCHAR(40) NOT NULL, - model_name VARCHAR(40) NOT NULL, - collection_name VARCHAR(64) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT dataset_collection_bindings_pkey PRIMARY KEY (id) -); - -CREATE INDEX provider_model_name_idx ON dataset_collection_bindings (provider_name, model_name); - -ALTER TABLE datasets ADD COLUMN collection_binding_id UUID; - -UPDATE alembic_version SET version_num='6e2cfb077b04' WHERE alembic_version.version_num = '77e83833755c'; - --- Running upgrade 6e2cfb077b04 -> ab23c11305d4 - -ALTER TABLE app_model_configs ADD COLUMN dataset_query_variable VARCHAR(255); - -UPDATE alembic_version SET version_num='ab23c11305d4' WHERE alembic_version.version_num = '6e2cfb077b04'; - --- Running upgrade ab23c11305d4 -> 2e9819ca5b28 - -ALTER TABLE api_tokens ADD COLUMN tenant_id UUID; - -CREATE INDEX api_token_tenant_idx ON api_tokens (tenant_id, type); - -ALTER TABLE api_tokens DROP COLUMN dataset_id; - -UPDATE alembic_version SET version_num='2e9819ca5b28' WHERE alembic_version.version_num = 'ab23c11305d4'; - --- Running upgrade 2e9819ca5b28 -> b3a09c049e8e - -ALTER TABLE app_model_configs ADD COLUMN prompt_type VARCHAR(255) DEFAULT 'simple' NOT NULL; - -ALTER TABLE app_model_configs ADD COLUMN chat_prompt_config TEXT; - -ALTER TABLE app_model_configs ADD COLUMN completion_prompt_config TEXT; - -ALTER TABLE app_model_configs ADD COLUMN dataset_configs TEXT; - -UPDATE alembic_version SET version_num='b3a09c049e8e' WHERE alembic_version.version_num = '2e9819ca5b28'; - --- Running upgrade b3a09c049e8e -> 968fff4c0ab9 - -CREATE TABLE api_based_extensions ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - api_endpoint VARCHAR(255) NOT NULL, - api_key TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT api_based_extension_pkey PRIMARY KEY (id) -); - -CREATE INDEX api_based_extension_tenant_idx ON api_based_extensions (tenant_id); - -UPDATE alembic_version SET version_num='968fff4c0ab9' WHERE alembic_version.version_num = 'b3a09c049e8e'; - --- Running upgrade 968fff4c0ab9 -> a9836e3baeee - -ALTER TABLE app_model_configs ADD COLUMN external_data_tools TEXT; - -UPDATE alembic_version SET version_num='a9836e3baeee' WHERE alembic_version.version_num = '968fff4c0ab9'; - --- Running upgrade a9836e3baeee -> 8fe468ba0ca5 - -CREATE TABLE message_files ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - message_id UUID NOT NULL, - type VARCHAR(255) NOT NULL, - transfer_method VARCHAR(255) NOT NULL, - url TEXT, - upload_file_id UUID, - created_by_role VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT message_file_pkey PRIMARY KEY (id) -); - -CREATE INDEX message_file_created_by_idx ON message_files (created_by); - -CREATE INDEX message_file_message_idx ON message_files (message_id); - -ALTER TABLE app_model_configs ADD COLUMN file_upload TEXT; - -ALTER TABLE upload_files ADD COLUMN created_by_role VARCHAR(255) DEFAULT 'account'::character varying NOT NULL; - -UPDATE alembic_version SET version_num='8fe468ba0ca5' WHERE alembic_version.version_num = 'a9836e3baeee'; - --- Running upgrade 8fe468ba0ca5 -> fca025d3b60f - -DROP TABLE sessions; - -ALTER TABLE datasets ADD COLUMN retrieval_model JSONB; - -CREATE INDEX retrieval_model_idx ON datasets USING gin (retrieval_model); - -UPDATE alembic_version SET version_num='fca025d3b60f' WHERE alembic_version.version_num = '8fe468ba0ca5'; - --- Running upgrade fca025d3b60f -> e1901f623fd0 - -CREATE TABLE app_annotation_hit_histories ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - annotation_id UUID NOT NULL, - source TEXT NOT NULL, - question TEXT NOT NULL, - account_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT app_annotation_hit_histories_pkey PRIMARY KEY (id) -); - -CREATE INDEX app_annotation_hit_histories_account_idx ON app_annotation_hit_histories (account_id); - -CREATE INDEX app_annotation_hit_histories_annotation_idx ON app_annotation_hit_histories (annotation_id); - -CREATE INDEX app_annotation_hit_histories_app_idx ON app_annotation_hit_histories (app_id); - -ALTER TABLE app_model_configs ADD COLUMN annotation_reply TEXT; - -ALTER TABLE dataset_collection_bindings ADD COLUMN type VARCHAR(40) DEFAULT 'dataset'::character varying NOT NULL; - -ALTER TABLE message_annotations ADD COLUMN question TEXT; - -ALTER TABLE message_annotations ADD COLUMN hit_count INTEGER DEFAULT 0 NOT NULL; - -ALTER TABLE message_annotations ALTER COLUMN conversation_id DROP NOT NULL; - -ALTER TABLE message_annotations ALTER COLUMN message_id DROP NOT NULL; - -UPDATE alembic_version SET version_num='e1901f623fd0' WHERE alembic_version.version_num = 'fca025d3b60f'; - --- Running upgrade e1901f623fd0 -> 46976cc39132 - -ALTER TABLE app_annotation_hit_histories ADD COLUMN score FLOAT DEFAULT 0 NOT NULL; - -UPDATE alembic_version SET version_num='46976cc39132' WHERE alembic_version.version_num = 'e1901f623fd0'; - --- Running upgrade 46976cc39132 -> f2a6fc85e260 - -ALTER TABLE app_annotation_hit_histories ADD COLUMN message_id UUID NOT NULL; - -CREATE INDEX app_annotation_hit_histories_message_idx ON app_annotation_hit_histories (message_id); - -UPDATE alembic_version SET version_num='f2a6fc85e260' WHERE alembic_version.version_num = '46976cc39132'; - --- Running upgrade f2a6fc85e260 -> 714aafe25d39 - -ALTER TABLE app_annotation_hit_histories ADD COLUMN annotation_question TEXT NOT NULL; - -ALTER TABLE app_annotation_hit_histories ADD COLUMN annotation_content TEXT NOT NULL; - -UPDATE alembic_version SET version_num='714aafe25d39' WHERE alembic_version.version_num = 'f2a6fc85e260'; - --- Running upgrade 714aafe25d39 -> 246ba09cbbdb - -CREATE TABLE app_annotation_settings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - score_threshold FLOAT DEFAULT 0 NOT NULL, - collection_binding_id UUID NOT NULL, - created_user_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_user_id UUID NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT app_annotation_settings_pkey PRIMARY KEY (id) -); - -CREATE INDEX app_annotation_settings_app_idx ON app_annotation_settings (app_id); - -ALTER TABLE app_model_configs DROP COLUMN annotation_reply; - -UPDATE alembic_version SET version_num='246ba09cbbdb' WHERE alembic_version.version_num = '714aafe25d39'; - --- Running upgrade 246ba09cbbdb -> 88072f0caa04 - -ALTER TABLE tenants ADD COLUMN custom_config TEXT; - -UPDATE alembic_version SET version_num='88072f0caa04' WHERE alembic_version.version_num = '246ba09cbbdb'; - --- Running upgrade 88072f0caa04 -> 187385f442fc - -ALTER TABLE provider_models ALTER COLUMN model_name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='187385f442fc' WHERE alembic_version.version_num = '88072f0caa04'; - --- Running upgrade 187385f442fc -> 89c7899ca936 - -ALTER TABLE sites ALTER COLUMN description TYPE TEXT; - -UPDATE alembic_version SET version_num='89c7899ca936' WHERE alembic_version.version_num = '187385f442fc'; - --- Running upgrade 89c7899ca936 -> 3ef9b2b6bee6 - -CREATE TABLE tool_api_providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(40) NOT NULL, - schema TEXT NOT NULL, - schema_type_str VARCHAR(40) NOT NULL, - user_id UUID NOT NULL, - tenant_id UUID NOT NULL, - description_str TEXT NOT NULL, - tools_str TEXT NOT NULL, - CONSTRAINT tool_api_provider_pkey PRIMARY KEY (id) -); - -CREATE TABLE tool_builtin_providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID, - user_id UUID NOT NULL, - provider VARCHAR(40) NOT NULL, - encrypted_credentials TEXT, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tool_builtin_provider_pkey PRIMARY KEY (id), - CONSTRAINT unique_builtin_tool_provider UNIQUE (tenant_id, provider) -); - -CREATE TABLE tool_published_apps ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - user_id UUID NOT NULL, - description TEXT NOT NULL, - llm_description TEXT NOT NULL, - query_description TEXT NOT NULL, - query_name VARCHAR(40) NOT NULL, - tool_name VARCHAR(40) NOT NULL, - author VARCHAR(40) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT published_app_tool_pkey PRIMARY KEY (id), - CONSTRAINT tool_published_apps_app_id_fkey FOREIGN KEY(app_id) REFERENCES apps (id), - CONSTRAINT unique_published_app_tool UNIQUE (app_id, user_id) -); - -UPDATE alembic_version SET version_num='3ef9b2b6bee6' WHERE alembic_version.version_num = '89c7899ca936'; - --- Running upgrade 3ef9b2b6bee6 -> ad472b61a054 - -ALTER TABLE tool_api_providers ADD COLUMN icon VARCHAR(256) NOT NULL; - -UPDATE alembic_version SET version_num='ad472b61a054' WHERE alembic_version.version_num = '3ef9b2b6bee6'; - --- Running upgrade ad472b61a054 -> 8ec536f3c800 - -ALTER TABLE tool_api_providers ADD COLUMN credentials_str TEXT NOT NULL; - -UPDATE alembic_version SET version_num='8ec536f3c800' WHERE alembic_version.version_num = 'ad472b61a054'; - --- Running upgrade 8ec536f3c800 -> 00bacef91f18 - -ALTER TABLE tool_api_providers ADD COLUMN description TEXT NOT NULL; - -ALTER TABLE tool_api_providers DROP COLUMN description_str; - -UPDATE alembic_version SET version_num='00bacef91f18' WHERE alembic_version.version_num = '8ec536f3c800'; - --- Running upgrade 00bacef91f18 -> f25003750af4 - -ALTER TABLE tool_api_providers ADD COLUMN created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; - -ALTER TABLE tool_api_providers ADD COLUMN updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL; - -UPDATE alembic_version SET version_num='f25003750af4' WHERE alembic_version.version_num = '00bacef91f18'; - --- Running upgrade f25003750af4 -> c71211c8f604 - -CREATE TABLE tool_model_invokes ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - user_id UUID NOT NULL, - tenant_id UUID NOT NULL, - provider VARCHAR(40) NOT NULL, - tool_type VARCHAR(40) NOT NULL, - tool_name VARCHAR(40) NOT NULL, - tool_id UUID NOT NULL, - model_parameters TEXT NOT NULL, - prompt_messages TEXT NOT NULL, - model_response TEXT NOT NULL, - prompt_tokens INTEGER DEFAULT 0 NOT NULL, - answer_tokens INTEGER DEFAULT 0 NOT NULL, - answer_unit_price NUMERIC(10, 4) NOT NULL, - answer_price_unit NUMERIC(10, 7) DEFAULT 0.001 NOT NULL, - provider_response_latency FLOAT DEFAULT 0 NOT NULL, - total_price NUMERIC(10, 7), - currency VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tool_model_invoke_pkey PRIMARY KEY (id) -); - -UPDATE alembic_version SET version_num='c71211c8f604' WHERE alembic_version.version_num = 'f25003750af4'; - --- Running upgrade c71211c8f604 -> 114eed84c228 - -ALTER TABLE tool_model_invokes DROP COLUMN tool_id; - -UPDATE alembic_version SET version_num='114eed84c228' WHERE alembic_version.version_num = 'c71211c8f604'; - --- Running upgrade 114eed84c228 -> 4829e54d2fee - -ALTER TABLE message_agent_thoughts ALTER COLUMN message_chain_id DROP NOT NULL; - -UPDATE alembic_version SET version_num='4829e54d2fee' WHERE alembic_version.version_num = '114eed84c228'; - --- Running upgrade 4829e54d2fee -> 053da0c1d756 - -CREATE TABLE tool_conversation_variables ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - user_id UUID NOT NULL, - tenant_id UUID NOT NULL, - conversation_id UUID NOT NULL, - variables_str TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tool_conversation_variables_pkey PRIMARY KEY (id) -); - -ALTER TABLE tool_api_providers ADD COLUMN privacy_policy VARCHAR(255); - -ALTER TABLE tool_api_providers ALTER COLUMN icon TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='053da0c1d756' WHERE alembic_version.version_num = '4829e54d2fee'; - --- Running upgrade 053da0c1d756 -> 4823da1d26cf - -CREATE TABLE tool_files ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - user_id UUID NOT NULL, - tenant_id UUID NOT NULL, - conversation_id UUID NOT NULL, - file_key VARCHAR(255) NOT NULL, - mimetype VARCHAR(255) NOT NULL, - original_url VARCHAR(255), - CONSTRAINT tool_file_pkey PRIMARY KEY (id) -); - -UPDATE alembic_version SET version_num='4823da1d26cf' WHERE alembic_version.version_num = '053da0c1d756'; - --- Running upgrade 4823da1d26cf -> 9fafbd60eca1 - -ALTER TABLE message_files ADD COLUMN belongs_to VARCHAR(255); - -UPDATE alembic_version SET version_num='9fafbd60eca1' WHERE alembic_version.version_num = '4823da1d26cf'; - --- Running upgrade 9fafbd60eca1 -> 8ae9bc661daa - -CREATE INDEX conversation_id_idx ON tool_conversation_variables (conversation_id); - -CREATE INDEX user_id_idx ON tool_conversation_variables (user_id); - -UPDATE alembic_version SET version_num='8ae9bc661daa' WHERE alembic_version.version_num = '9fafbd60eca1'; - --- Running upgrade 8ae9bc661daa -> 23db93619b9d - -ALTER TABLE message_agent_thoughts ADD COLUMN message_files TEXT; - -UPDATE alembic_version SET version_num='23db93619b9d' WHERE alembic_version.version_num = '8ae9bc661daa'; - --- Running upgrade 23db93619b9d -> de95f5c77138 - - /* - 1. select all tool_providers - 2. insert api_key to tool_provider_configs - - tool_providers - - id - - tenant_id - - tool_name - - encrypted_credentials - {"api_key": "$KEY"} - - created_at - - updated_at - - tool_builtin_providers - - id <- tool_providers.id - - tenant_id <- tool_providers.tenant_id - - user_id <- tenant_account_joins.account_id (tenant_account_joins.tenant_id = tool_providers.tenant_id and tenant_account_joins.role = 'owner') - - encrypted_credentials <- tool_providers.encrypted_credentials - {"serpapi_api_key": "$KEY"} - - created_at <- tool_providers.created_at - - updated_at <- tool_providers.updated_at - */ - -UPDATE alembic_version SET version_num='de95f5c77138' WHERE alembic_version.version_num = '23db93619b9d'; - --- Running upgrade de95f5c77138 -> b24be59fbb04 - -ALTER TABLE app_model_configs ADD COLUMN text_to_speech TEXT; - -UPDATE alembic_version SET version_num='b24be59fbb04' WHERE alembic_version.version_num = 'de95f5c77138'; - --- Running upgrade b24be59fbb04 -> dfb3b7f477da - -ALTER TABLE tool_api_providers ADD CONSTRAINT unique_api_tool_provider UNIQUE (name, tenant_id); - -CREATE INDEX tool_file_conversation_id_idx ON tool_files (conversation_id); - -UPDATE alembic_version SET version_num='dfb3b7f477da' WHERE alembic_version.version_num = 'b24be59fbb04'; - --- Running upgrade dfb3b7f477da -> 380c6aa5a70d - -ALTER TABLE message_agent_thoughts ADD COLUMN tool_labels_str TEXT DEFAULT '{}'::text NOT NULL; - -UPDATE alembic_version SET version_num='380c6aa5a70d' WHERE alembic_version.version_num = 'dfb3b7f477da'; - --- Running upgrade 380c6aa5a70d -> 16830a790f0f - -ALTER TABLE tenant_account_joins ADD COLUMN current BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='16830a790f0f' WHERE alembic_version.version_num = '380c6aa5a70d'; - --- Running upgrade 16830a790f0f -> a8f9b3c45e4a - -CREATE INDEX document_segment_tenant_idx ON document_segments (tenant_id); - -CREATE INDEX document_tenant_idx ON documents (tenant_id); - -UPDATE alembic_version SET version_num='a8f9b3c45e4a' WHERE alembic_version.version_num = '16830a790f0f'; - --- Running upgrade a8f9b3c45e4a -> 17b5ab037c40 - -ALTER TABLE dataset_keyword_tables ADD COLUMN data_source_type VARCHAR(255) DEFAULT 'database'::character varying NOT NULL; - -UPDATE alembic_version SET version_num='17b5ab037c40' WHERE alembic_version.version_num = 'a8f9b3c45e4a'; - --- Running upgrade 17b5ab037c40 -> a8d7385a7b66 - -ALTER TABLE embeddings ADD COLUMN provider_name VARCHAR(40) DEFAULT ''::character varying NOT NULL; - -ALTER TABLE embeddings DROP CONSTRAINT embedding_hash_idx; - -ALTER TABLE embeddings ADD CONSTRAINT embedding_hash_idx UNIQUE (model_name, hash, provider_name); - -UPDATE alembic_version SET version_num='a8d7385a7b66' WHERE alembic_version.version_num = '17b5ab037c40'; - --- Running upgrade a8d7385a7b66 -> b289e2408ee2 - -CREATE TABLE workflow_app_logs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - workflow_id UUID NOT NULL, - workflow_run_id UUID NOT NULL, - created_from VARCHAR(255) NOT NULL, - created_by_role VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT workflow_app_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_app_log_app_idx ON workflow_app_logs (tenant_id, app_id); - -CREATE TABLE workflow_node_executions ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - workflow_id UUID NOT NULL, - triggered_from VARCHAR(255) NOT NULL, - workflow_run_id UUID, - index INTEGER NOT NULL, - predecessor_node_id VARCHAR(255), - node_id VARCHAR(255) NOT NULL, - node_type VARCHAR(255) NOT NULL, - title VARCHAR(255) NOT NULL, - inputs TEXT, - process_data TEXT, - outputs TEXT, - status VARCHAR(255) NOT NULL, - error TEXT, - elapsed_time FLOAT DEFAULT 0 NOT NULL, - execution_metadata TEXT, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - created_by_role VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - finished_at TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT workflow_node_execution_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_node_execution_node_run_idx ON workflow_node_executions (tenant_id, app_id, workflow_id, triggered_from, node_id); - -CREATE INDEX workflow_node_execution_workflow_run_idx ON workflow_node_executions (tenant_id, app_id, workflow_id, triggered_from, workflow_run_id); - -CREATE TABLE workflow_runs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - sequence_number INTEGER NOT NULL, - workflow_id UUID NOT NULL, - type VARCHAR(255) NOT NULL, - triggered_from VARCHAR(255) NOT NULL, - version VARCHAR(255) NOT NULL, - graph TEXT, - inputs TEXT, - status VARCHAR(255) NOT NULL, - outputs TEXT, - error TEXT, - elapsed_time FLOAT DEFAULT 0 NOT NULL, - total_tokens INTEGER DEFAULT 0 NOT NULL, - total_steps INTEGER DEFAULT 0, - created_by_role VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - finished_at TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT workflow_run_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_run_triggerd_from_idx ON workflow_runs (tenant_id, app_id, triggered_from); - -CREATE TABLE workflows ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - type VARCHAR(255) NOT NULL, - version VARCHAR(255) NOT NULL, - graph TEXT, - features TEXT, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_by UUID, - updated_at TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT workflow_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_version_idx ON workflows (tenant_id, app_id, version); - -ALTER TABLE apps ADD COLUMN workflow_id UUID; - -ALTER TABLE messages ADD COLUMN workflow_run_id UUID; - -UPDATE alembic_version SET version_num='b289e2408ee2' WHERE alembic_version.version_num = 'a8d7385a7b66'; - --- Running upgrade b289e2408ee2 -> cc04d0998d4d - -ALTER TABLE app_model_configs ALTER COLUMN provider DROP NOT NULL; - -ALTER TABLE app_model_configs ALTER COLUMN model_id DROP NOT NULL; - -ALTER TABLE app_model_configs ALTER COLUMN configs DROP NOT NULL; - -ALTER TABLE apps ALTER COLUMN api_rpm SET NOT NULL; - -ALTER TABLE apps ALTER COLUMN api_rpm SET DEFAULT '0'; - -ALTER TABLE apps ALTER COLUMN api_rph SET NOT NULL; - -ALTER TABLE apps ALTER COLUMN api_rph SET DEFAULT '0'; - -UPDATE alembic_version SET version_num='cc04d0998d4d' WHERE alembic_version.version_num = 'b289e2408ee2'; - --- Running upgrade cc04d0998d4d -> f9107f83abab - -ALTER TABLE apps ADD COLUMN description TEXT DEFAULT ''::character varying NOT NULL; - -UPDATE alembic_version SET version_num='f9107f83abab' WHERE alembic_version.version_num = 'cc04d0998d4d'; - --- Running upgrade f9107f83abab -> 42e85ed5564d - -ALTER TABLE conversations ALTER COLUMN app_model_config_id DROP NOT NULL; - -ALTER TABLE conversations ALTER COLUMN model_provider DROP NOT NULL; - -ALTER TABLE conversations ALTER COLUMN model_id DROP NOT NULL; - -UPDATE alembic_version SET version_num='42e85ed5564d' WHERE alembic_version.version_num = 'f9107f83abab'; - --- Running upgrade 42e85ed5564d -> b5429b71023c - -ALTER TABLE messages ALTER COLUMN model_provider DROP NOT NULL; - -ALTER TABLE messages ALTER COLUMN model_id DROP NOT NULL; - -UPDATE alembic_version SET version_num='b5429b71023c' WHERE alembic_version.version_num = '42e85ed5564d'; - --- Running upgrade b5429b71023c -> 563cf8bf777b - -ALTER TABLE tool_files ALTER COLUMN conversation_id DROP NOT NULL; - -UPDATE alembic_version SET version_num='563cf8bf777b' WHERE alembic_version.version_num = 'b5429b71023c'; - --- Running upgrade 563cf8bf777b -> e2eacc9a1b63 - -ALTER TABLE conversations ADD COLUMN invoke_from VARCHAR(255); - -ALTER TABLE messages ADD COLUMN status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL; - -ALTER TABLE messages ADD COLUMN error TEXT; - -ALTER TABLE messages ADD COLUMN message_metadata TEXT; - -ALTER TABLE messages ADD COLUMN invoke_from VARCHAR(255); - -UPDATE alembic_version SET version_num='e2eacc9a1b63' WHERE alembic_version.version_num = '563cf8bf777b'; - --- Running upgrade e2eacc9a1b63 -> c3311b089690 - -ALTER TABLE message_agent_thoughts ADD COLUMN tool_meta_str TEXT DEFAULT '{}'::text NOT NULL; - -UPDATE alembic_version SET version_num='c3311b089690' WHERE alembic_version.version_num = 'e2eacc9a1b63'; - --- Running upgrade c3311b089690 -> 3c7cac9521c6 - -CREATE TABLE tag_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID, - tag_id UUID, - target_id UUID, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tag_binding_pkey PRIMARY KEY (id) -); - -CREATE INDEX tag_bind_tag_id_idx ON tag_bindings (tag_id); - -CREATE INDEX tag_bind_target_id_idx ON tag_bindings (target_id); - -CREATE TABLE tags ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID, - type VARCHAR(16) NOT NULL, - name VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tag_pkey PRIMARY KEY (id) -); - -CREATE INDEX tag_name_idx ON tags (name); - -CREATE INDEX tag_type_idx ON tags (type); - -UPDATE alembic_version SET version_num='3c7cac9521c6' WHERE alembic_version.version_num = 'c3311b089690'; - --- Running upgrade 3c7cac9521c6 -> 47cc7df8c4f3 - -ALTER TABLE tenant_default_models ALTER COLUMN model_name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='47cc7df8c4f3' WHERE alembic_version.version_num = '3c7cac9521c6'; - --- Running upgrade 47cc7df8c4f3 -> 5fda94355fce - -ALTER TABLE recommended_apps ADD COLUMN custom_disclaimer VARCHAR(255); - -ALTER TABLE sites ADD COLUMN custom_disclaimer VARCHAR(255); - -ALTER TABLE tool_api_providers ADD COLUMN custom_disclaimer VARCHAR(255); - -UPDATE alembic_version SET version_num='5fda94355fce' WHERE alembic_version.version_num = '47cc7df8c4f3'; - --- Running upgrade 5fda94355fce -> 7bdef072e63a - -CREATE TABLE tool_workflow_providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(40) NOT NULL, - icon VARCHAR(255) NOT NULL, - app_id UUID NOT NULL, - user_id UUID NOT NULL, - tenant_id UUID NOT NULL, - description TEXT NOT NULL, - parameter_configuration TEXT DEFAULT '[]' NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tool_workflow_provider_pkey PRIMARY KEY (id), - CONSTRAINT unique_workflow_tool_provider UNIQUE (name, tenant_id), - CONSTRAINT unique_workflow_tool_provider_app_id UNIQUE (tenant_id, app_id) -); - -UPDATE alembic_version SET version_num='7bdef072e63a' WHERE alembic_version.version_num = '5fda94355fce'; - --- Running upgrade 7bdef072e63a -> 3b18fea55204 - -CREATE TABLE tool_label_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tool_id VARCHAR(64) NOT NULL, - tool_type VARCHAR(40) NOT NULL, - label_name VARCHAR(40) NOT NULL, - CONSTRAINT tool_label_bind_pkey PRIMARY KEY (id) -); - -ALTER TABLE tool_workflow_providers ADD COLUMN privacy_policy VARCHAR(255) DEFAULT ''; - -UPDATE alembic_version SET version_num='3b18fea55204' WHERE alembic_version.version_num = '7bdef072e63a'; - --- Running upgrade 3b18fea55204 -> 9e98fbaffb88 - -ALTER TABLE tool_workflow_providers ADD COLUMN version VARCHAR(255) DEFAULT '' NOT NULL; - -UPDATE alembic_version SET version_num='9e98fbaffb88' WHERE alembic_version.version_num = '3b18fea55204'; - --- Running upgrade 9e98fbaffb88 -> 03f98355ba0e - -ALTER TABLE tool_label_bindings ADD CONSTRAINT unique_tool_label_bind UNIQUE (tool_id, label_name); - -ALTER TABLE tool_workflow_providers ADD COLUMN label VARCHAR(255) DEFAULT '' NOT NULL; - -UPDATE alembic_version SET version_num='03f98355ba0e' WHERE alembic_version.version_num = '9e98fbaffb88'; - --- Running upgrade 03f98355ba0e -> 64a70a7aab8b - -CREATE INDEX workflow_run_tenant_app_sequence_idx ON workflow_runs (tenant_id, app_id, sequence_number); - -UPDATE alembic_version SET version_num='64a70a7aab8b' WHERE alembic_version.version_num = '03f98355ba0e'; - --- Running upgrade 64a70a7aab8b -> 4e99a8df00ff - -CREATE TABLE load_balancing_model_configs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(255) NOT NULL, - model_name VARCHAR(255) NOT NULL, - model_type VARCHAR(40) NOT NULL, - name VARCHAR(255) NOT NULL, - encrypted_config TEXT, - enabled BOOLEAN DEFAULT true NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT load_balancing_model_config_pkey PRIMARY KEY (id) -); - -CREATE INDEX load_balancing_model_config_tenant_provider_model_idx ON load_balancing_model_configs (tenant_id, provider_name, model_type); - -CREATE TABLE provider_model_settings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(255) NOT NULL, - model_name VARCHAR(255) NOT NULL, - model_type VARCHAR(40) NOT NULL, - enabled BOOLEAN DEFAULT true NOT NULL, - load_balancing_enabled BOOLEAN DEFAULT false NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT provider_model_setting_pkey PRIMARY KEY (id) -); - -CREATE INDEX provider_model_setting_tenant_provider_model_idx ON provider_model_settings (tenant_id, provider_name, model_type); - -ALTER TABLE provider_models ALTER COLUMN provider_name TYPE VARCHAR(255); - -ALTER TABLE provider_orders ALTER COLUMN provider_name TYPE VARCHAR(255); - -ALTER TABLE providers ALTER COLUMN provider_name TYPE VARCHAR(255); - -ALTER TABLE tenant_default_models ALTER COLUMN provider_name TYPE VARCHAR(255); - -ALTER TABLE tenant_preferred_model_providers ALTER COLUMN provider_name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='4e99a8df00ff' WHERE alembic_version.version_num = '64a70a7aab8b'; - --- Running upgrade 4e99a8df00ff -> 7b45942e39bb - -CREATE TABLE data_source_api_key_auth_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - category VARCHAR(255) NOT NULL, - provider VARCHAR(255) NOT NULL, - credentials TEXT, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - disabled BOOLEAN DEFAULT false, - CONSTRAINT data_source_api_key_auth_binding_pkey PRIMARY KEY (id) -); - -CREATE INDEX data_source_api_key_auth_binding_provider_idx ON data_source_api_key_auth_bindings (provider); - -CREATE INDEX data_source_api_key_auth_binding_tenant_id_idx ON data_source_api_key_auth_bindings (tenant_id); - -DROP INDEX source_binding_tenant_id_idx; - -DROP INDEX source_info_idx; - -ALTER TABLE data_source_bindings RENAME TO data_source_oauth_bindings; - -CREATE INDEX source_binding_tenant_id_idx ON data_source_oauth_bindings (tenant_id); - -CREATE INDEX source_info_idx ON data_source_oauth_bindings USING gin (source_info); - -UPDATE alembic_version SET version_num='7b45942e39bb' WHERE alembic_version.version_num = '4e99a8df00ff'; - --- Running upgrade 7b45942e39bb -> 4ff534e1eb11 - -ALTER TABLE sites ADD COLUMN show_workflow_steps BOOLEAN DEFAULT true NOT NULL; - -UPDATE alembic_version SET version_num='4ff534e1eb11' WHERE alembic_version.version_num = '7b45942e39bb'; - --- Running upgrade 4ff534e1eb11 -> b69ca54b9208 - -ALTER TABLE sites ADD COLUMN chat_color_theme VARCHAR(255); - -ALTER TABLE sites ADD COLUMN chat_color_theme_inverted BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='b69ca54b9208' WHERE alembic_version.version_num = '4ff534e1eb11'; - --- Running upgrade 4ff534e1eb11 -> 04c602f5dc9b - -CREATE TABLE tracing_app_configs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - tracing_provider VARCHAR(255), - tracing_config JSON, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, - CONSTRAINT tracing_app_config_pkey PRIMARY KEY (id) -); - -INSERT INTO alembic_version (version_num) VALUES ('04c602f5dc9b') RETURNING alembic_version.version_num; - --- Running upgrade 04c602f5dc9b -> c031d46af369 - -CREATE TABLE trace_app_config ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - tracing_provider VARCHAR(255), - tracing_config JSON, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT now() NOT NULL, - is_active BOOLEAN DEFAULT true NOT NULL, - CONSTRAINT trace_app_config_pkey PRIMARY KEY (id) -); - -CREATE INDEX trace_app_config_app_id_idx ON trace_app_config (app_id); - -UPDATE alembic_version SET version_num='c031d46af369' WHERE alembic_version.version_num = '04c602f5dc9b'; - --- Running upgrade c031d46af369 -> 2a3aebbbf4bb - -ALTER TABLE apps ADD COLUMN tracing TEXT; - -UPDATE alembic_version SET version_num='2a3aebbbf4bb' WHERE alembic_version.version_num = 'c031d46af369'; - --- Running upgrade 2a3aebbbf4bb, b69ca54b9208 -> 63f9175e515b - -DELETE FROM alembic_version WHERE alembic_version.version_num = '2a3aebbbf4bb'; - -UPDATE alembic_version SET version_num='63f9175e515b' WHERE alembic_version.version_num = 'b69ca54b9208'; - --- Running upgrade 63f9175e515b -> b2602e131636 - -CREATE INDEX message_workflow_run_id_idx ON messages (conversation_id, workflow_run_id); - -UPDATE alembic_version SET version_num='b2602e131636' WHERE alembic_version.version_num = '63f9175e515b'; - --- Running upgrade b2602e131636 -> 7e6a8693e07a - -CREATE TABLE dataset_permissions ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - dataset_id UUID NOT NULL, - account_id UUID NOT NULL, - has_permission BOOLEAN DEFAULT true NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT dataset_permission_pkey PRIMARY KEY (id) -); - -CREATE INDEX idx_dataset_permissions_account_id ON dataset_permissions (account_id); - -CREATE INDEX idx_dataset_permissions_dataset_id ON dataset_permissions (dataset_id); - -UPDATE alembic_version SET version_num='7e6a8693e07a' WHERE alembic_version.version_num = 'b2602e131636'; - --- Running upgrade 7e6a8693e07a -> 161cadc1af8d - -ALTER TABLE dataset_permissions ADD COLUMN tenant_id UUID NOT NULL; - -UPDATE alembic_version SET version_num='161cadc1af8d' WHERE alembic_version.version_num = '7e6a8693e07a'; - --- Running upgrade 161cadc1af8d -> 408176b91ad3 - -ALTER TABLE apps ADD COLUMN max_active_requests INTEGER; - -UPDATE alembic_version SET version_num='408176b91ad3' WHERE alembic_version.version_num = '161cadc1af8d'; - --- Running upgrade 408176b91ad3 -> fecff1c3da27 - -DROP TABLE tracing_app_configs; - -CREATE INDEX idx_dataset_permissions_tenant_id ON dataset_permissions (tenant_id); - -UPDATE alembic_version SET version_num='fecff1c3da27' WHERE alembic_version.version_num = '408176b91ad3'; - --- Running upgrade fecff1c3da27 -> 6e957a32015b - -CREATE INDEX created_at_idx ON embeddings (created_at); - -UPDATE alembic_version SET version_num='6e957a32015b' WHERE alembic_version.version_num = 'fecff1c3da27'; - --- Running upgrade 6e957a32015b -> 8e5588e6412e - -ALTER TABLE workflows ADD COLUMN environment_variables TEXT DEFAULT '{}' NOT NULL; - -UPDATE alembic_version SET version_num='8e5588e6412e' WHERE alembic_version.version_num = '6e957a32015b'; - --- Running upgrade 8e5588e6412e -> 53bf8af60645 - -ALTER TABLE embeddings ALTER COLUMN provider_name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='53bf8af60645' WHERE alembic_version.version_num = '8e5588e6412e'; - --- Running upgrade 53bf8af60645 -> eeb2e349e6ac - -ALTER TABLE dataset_collection_bindings ALTER COLUMN model_name TYPE VARCHAR(255); - -ALTER TABLE embeddings ALTER COLUMN model_name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='eeb2e349e6ac' WHERE alembic_version.version_num = '53bf8af60645'; - --- Running upgrade eeb2e349e6ac -> 1787fbae959a - -ALTER TABLE tool_files ALTER COLUMN original_url TYPE VARCHAR(2048); - -UPDATE alembic_version SET version_num='1787fbae959a' WHERE alembic_version.version_num = 'eeb2e349e6ac'; - --- Running upgrade 1787fbae959a -> 63a83fcf12ba - -CREATE TABLE workflow__conversation_variables ( - id UUID NOT NULL, - conversation_id UUID NOT NULL, - app_id UUID NOT NULL, - data TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT workflow__conversation_variables_pkey PRIMARY KEY (id, conversation_id) -); - -CREATE INDEX workflow__conversation_variables_app_id_idx ON workflow__conversation_variables (app_id); - -CREATE INDEX workflow__conversation_variables_created_at_idx ON workflow__conversation_variables (created_at); - -ALTER TABLE workflows ADD COLUMN conversation_variables TEXT DEFAULT '{}' NOT NULL; - -UPDATE alembic_version SET version_num='63a83fcf12ba' WHERE alembic_version.version_num = '1787fbae959a'; - --- Running upgrade 63a83fcf12ba -> 8782057ff0dc - -ALTER TABLE conversations ADD COLUMN dialogue_count INTEGER DEFAULT '0' NOT NULL; - -UPDATE alembic_version SET version_num='8782057ff0dc' WHERE alembic_version.version_num = '63a83fcf12ba'; - --- Running upgrade 8782057ff0dc -> a6be81136580 - -ALTER TABLE apps ADD COLUMN icon_type VARCHAR(255); - -ALTER TABLE sites ADD COLUMN icon_type VARCHAR(255); - -UPDATE alembic_version SET version_num='a6be81136580' WHERE alembic_version.version_num = '8782057ff0dc'; - --- Running upgrade a6be81136580 -> 2dbe42621d96 - -ALTER TABLE workflow__conversation_variables RENAME TO workflow_conversation_variables; - -UPDATE alembic_version SET version_num='2dbe42621d96' WHERE alembic_version.version_num = 'a6be81136580'; - --- Running upgrade 2dbe42621d96 -> d0187d6a88dd - -ALTER TABLE app_model_configs ADD COLUMN created_by UUID; - -ALTER TABLE app_model_configs ADD COLUMN updated_by UUID; - -ALTER TABLE apps ADD COLUMN created_by UUID; - -ALTER TABLE apps ADD COLUMN updated_by UUID; - -ALTER TABLE sites ADD COLUMN created_by UUID; - -ALTER TABLE sites ADD COLUMN updated_by UUID; - -UPDATE alembic_version SET version_num='d0187d6a88dd' WHERE alembic_version.version_num = '2dbe42621d96'; - --- Running upgrade d0187d6a88dd -> 030f4915f36a - -ALTER TABLE apps ADD COLUMN use_icon_as_answer_icon BOOLEAN DEFAULT false NOT NULL; - -ALTER TABLE sites ADD COLUMN use_icon_as_answer_icon BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='030f4915f36a' WHERE alembic_version.version_num = 'd0187d6a88dd'; - --- Running upgrade 030f4915f36a -> 675b5321501b - -ALTER TABLE workflow_node_executions ADD COLUMN node_execution_id VARCHAR(255); - -CREATE INDEX workflow_node_execution_id_idx ON workflow_node_executions (tenant_id, app_id, workflow_id, triggered_from, node_execution_id); - -UPDATE alembic_version SET version_num='675b5321501b' WHERE alembic_version.version_num = '030f4915f36a'; - --- Running upgrade 675b5321501b -> d57ba9ebb251 - -ALTER TABLE messages ADD COLUMN parent_message_id UUID; - -UPDATE messages SET parent_message_id = uuid_nil() WHERE parent_message_id IS NULL; - -UPDATE alembic_version SET version_num='d57ba9ebb251' WHERE alembic_version.version_num = '675b5321501b'; - --- Running upgrade d57ba9ebb251 -> 6af6a521a53e - -ALTER TABLE dataset_retriever_resources ALTER COLUMN document_id DROP NOT NULL; - -ALTER TABLE dataset_retriever_resources ALTER COLUMN data_source_type DROP NOT NULL; - -ALTER TABLE dataset_retriever_resources ALTER COLUMN segment_id DROP NOT NULL; - -UPDATE alembic_version SET version_num='6af6a521a53e' WHERE alembic_version.version_num = 'd57ba9ebb251'; - --- Running upgrade 6af6a521a53e -> 33f5fac87f29 - -CREATE TABLE external_knowledge_apis ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(255) NOT NULL, - description VARCHAR(255) NOT NULL, - tenant_id UUID NOT NULL, - settings TEXT, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_by UUID, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT external_knowledge_apis_pkey PRIMARY KEY (id) -); - -CREATE INDEX external_knowledge_apis_name_idx ON external_knowledge_apis (name); - -CREATE INDEX external_knowledge_apis_tenant_idx ON external_knowledge_apis (tenant_id); - -CREATE TABLE external_knowledge_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - external_knowledge_api_id UUID NOT NULL, - dataset_id UUID NOT NULL, - external_knowledge_id TEXT NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_by UUID, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT external_knowledge_bindings_pkey PRIMARY KEY (id) -); - -CREATE INDEX external_knowledge_bindings_dataset_idx ON external_knowledge_bindings (dataset_id); - -CREATE INDEX external_knowledge_bindings_external_knowledge_api_idx ON external_knowledge_bindings (external_knowledge_api_id); - -CREATE INDEX external_knowledge_bindings_external_knowledge_idx ON external_knowledge_bindings (external_knowledge_id); - -CREATE INDEX external_knowledge_bindings_tenant_idx ON external_knowledge_bindings (tenant_id); - -UPDATE alembic_version SET version_num='33f5fac87f29' WHERE alembic_version.version_num = '6af6a521a53e'; - --- Running upgrade 33f5fac87f29 -> d8e744d88ed6 - -UPDATE - messages -SET - parent_message_id = '00000000-0000-0000-0000-000000000000' -WHERE - invoke_from = 'service-api' - AND parent_message_id IS NULL - AND created_at >= '2024-09-29 12:00:00';; - -UPDATE alembic_version SET version_num='d8e744d88ed6' WHERE alembic_version.version_num = '33f5fac87f29'; - --- Running upgrade d8e744d88ed6 -> bbadea11becb - --- Executing in offline mode, assuming the name and size columns do not exist. --- The generated SQL may differ from what will actually be executed. --- Please review the migration script carefully!; - -ALTER TABLE tool_files ADD COLUMN name VARCHAR; - -ALTER TABLE tool_files ADD COLUMN size INTEGER; - -UPDATE tool_files SET name = '' WHERE name IS NULL; - -UPDATE tool_files SET size = -1 WHERE size IS NULL; - -ALTER TABLE tool_files ALTER COLUMN name SET NOT NULL; - -ALTER TABLE tool_files ALTER COLUMN size SET NOT NULL; - -UPDATE alembic_version SET version_num='bbadea11becb' WHERE alembic_version.version_num = 'd8e744d88ed6'; - --- Running upgrade bbadea11becb -> 0251a1c768cc - -CREATE TABLE tidb_auth_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID, - cluster_id VARCHAR(255) NOT NULL, - cluster_name VARCHAR(255) NOT NULL, - active BOOLEAN DEFAULT false NOT NULL, - status VARCHAR(255) DEFAULT 'CREATING'::character varying NOT NULL, - account VARCHAR(255) NOT NULL, - password VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tidb_auth_bindings_pkey PRIMARY KEY (id) -); - -CREATE INDEX tidb_auth_bindings_active_idx ON tidb_auth_bindings (active); - -CREATE INDEX tidb_auth_bindings_status_idx ON tidb_auth_bindings (status); - -CREATE INDEX tidb_auth_bindings_created_at_idx ON tidb_auth_bindings (created_at); - -CREATE INDEX tidb_auth_bindings_tenant_idx ON tidb_auth_bindings (tenant_id); - -UPDATE alembic_version SET version_num='0251a1c768cc' WHERE alembic_version.version_num = 'bbadea11becb'; - --- Running upgrade 0251a1c768cc -> 43fa78bc3b7d - -CREATE TABLE whitelists ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID, - category VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT whitelists_pkey PRIMARY KEY (id) -); - -CREATE INDEX whitelists_tenant_idx ON whitelists (tenant_id); - -UPDATE alembic_version SET version_num='43fa78bc3b7d' WHERE alembic_version.version_num = '0251a1c768cc'; - --- Running upgrade 43fa78bc3b7d -> d3f6769a94a3 - -ALTER TABLE upload_files ADD COLUMN source_url VARCHAR(255) DEFAULT '' NOT NULL; - -UPDATE alembic_version SET version_num='d3f6769a94a3' WHERE alembic_version.version_num = '43fa78bc3b7d'; - --- Running upgrade d3f6769a94a3 -> 93ad8c19c40b - -ALTER INDEX workflow__conversation_variables_app_id_idx RENAME TO workflow_conversation_variables_app_id_idx; - -ALTER INDEX workflow__conversation_variables_created_at_idx RENAME TO workflow_conversation_variables_created_at_idx; - -UPDATE alembic_version SET version_num='93ad8c19c40b' WHERE alembic_version.version_num = 'd3f6769a94a3'; - --- Running upgrade 93ad8c19c40b -> f4d7ce70a7ca - -ALTER TABLE upload_files ALTER COLUMN source_url TYPE TEXT; - -UPDATE alembic_version SET version_num='f4d7ce70a7ca' WHERE alembic_version.version_num = '93ad8c19c40b'; - --- Running upgrade f4d7ce70a7ca -> d07474999927 - -UPDATE recommended_apps SET custom_disclaimer = '' WHERE custom_disclaimer IS NULL; - -UPDATE sites SET custom_disclaimer = '' WHERE custom_disclaimer IS NULL; - -UPDATE tool_api_providers SET custom_disclaimer = '' WHERE custom_disclaimer IS NULL; - -ALTER TABLE recommended_apps ALTER COLUMN custom_disclaimer TYPE TEXT; - -ALTER TABLE recommended_apps ALTER COLUMN custom_disclaimer SET NOT NULL; - -ALTER TABLE sites ALTER COLUMN custom_disclaimer TYPE TEXT; - -ALTER TABLE sites ALTER COLUMN custom_disclaimer SET NOT NULL; - -ALTER TABLE tool_api_providers ALTER COLUMN custom_disclaimer TYPE TEXT; - -ALTER TABLE tool_api_providers ALTER COLUMN custom_disclaimer SET NOT NULL; - -UPDATE alembic_version SET version_num='d07474999927' WHERE alembic_version.version_num = 'f4d7ce70a7ca'; - --- Running upgrade d07474999927 -> 09a8d1878d9b - -ALTER TABLE conversations ALTER COLUMN inputs SET NOT NULL; - -ALTER TABLE messages ALTER COLUMN inputs SET NOT NULL; - -UPDATE workflows SET updated_at = created_at WHERE updated_at IS NULL; - -UPDATE workflows SET graph = '' WHERE graph IS NULL; - -UPDATE workflows SET features = '' WHERE features IS NULL; - -ALTER TABLE workflows ALTER COLUMN graph SET NOT NULL; - -ALTER TABLE workflows ALTER COLUMN features SET NOT NULL; - -ALTER TABLE workflows ALTER COLUMN updated_at SET NOT NULL; - -UPDATE alembic_version SET version_num='09a8d1878d9b' WHERE alembic_version.version_num = 'd07474999927'; - --- Running upgrade 09a8d1878d9b -> 01d6889832f7 - -CREATE INDEX message_created_at_idx ON messages (created_at); - -UPDATE alembic_version SET version_num='01d6889832f7' WHERE alembic_version.version_num = '09a8d1878d9b'; - --- Running upgrade 01d6889832f7 -> cf8f4fc45278 - -ALTER TABLE workflow_runs ADD COLUMN exceptions_count INTEGER DEFAULT 0; - -UPDATE alembic_version SET version_num='cf8f4fc45278' WHERE alembic_version.version_num = '01d6889832f7'; - --- Running upgrade cf8f4fc45278 -> 11b07f66c737 - -DROP TABLE tool_providers; - -UPDATE alembic_version SET version_num='11b07f66c737' WHERE alembic_version.version_num = 'cf8f4fc45278'; - --- Running upgrade 11b07f66c737 -> e1944c35e15e - -UPDATE alembic_version SET version_num='e1944c35e15e' WHERE alembic_version.version_num = '11b07f66c737'; - --- Running upgrade e1944c35e15e -> d7999dfa4aae - --- Executing in offline mode: assuming the "retry_index" column does not exist. --- The generated SQL may differ from what will actually be executed. --- Please review the migration script carefully!; - -UPDATE alembic_version SET version_num='d7999dfa4aae' WHERE alembic_version.version_num = 'e1944c35e15e'; - --- Running upgrade d7999dfa4aae -> e19037032219 - -CREATE TABLE child_chunks ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - document_id UUID NOT NULL, - segment_id UUID NOT NULL, - position INTEGER NOT NULL, - content TEXT NOT NULL, - word_count INTEGER NOT NULL, - index_node_id VARCHAR(255), - index_node_hash VARCHAR(255), - type VARCHAR(255) DEFAULT 'automatic'::character varying NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_by UUID, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - indexing_at TIMESTAMP WITHOUT TIME ZONE, - completed_at TIMESTAMP WITHOUT TIME ZONE, - error TEXT, - CONSTRAINT child_chunk_pkey PRIMARY KEY (id) -); - -CREATE INDEX child_chunk_dataset_id_idx ON child_chunks (tenant_id, dataset_id, document_id, segment_id, index_node_id); - -UPDATE alembic_version SET version_num='e19037032219' WHERE alembic_version.version_num = 'd7999dfa4aae'; - --- Running upgrade e19037032219 -> 923752d42eb6 - -CREATE TABLE dataset_auto_disable_logs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - document_id UUID NOT NULL, - notified BOOLEAN DEFAULT false NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT dataset_auto_disable_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_auto_disable_log_created_atx ON dataset_auto_disable_logs (created_at); - -CREATE INDEX dataset_auto_disable_log_dataset_idx ON dataset_auto_disable_logs (dataset_id); - -CREATE INDEX dataset_auto_disable_log_tenant_idx ON dataset_auto_disable_logs (tenant_id); - -UPDATE alembic_version SET version_num='923752d42eb6' WHERE alembic_version.version_num = 'e19037032219'; - --- Running upgrade 923752d42eb6 -> a91b476a53de - -ALTER TABLE workflow_runs ALTER COLUMN total_tokens TYPE BIGINT; - -UPDATE alembic_version SET version_num='a91b476a53de' WHERE alembic_version.version_num = '923752d42eb6'; - --- Running upgrade a91b476a53de -> ddcc8bbef391 - -ALTER TABLE tool_builtin_providers ALTER COLUMN provider TYPE VARCHAR(256); - -UPDATE alembic_version SET version_num='ddcc8bbef391' WHERE alembic_version.version_num = 'a91b476a53de'; - --- Running upgrade ddcc8bbef391 -> 08ec4f75af5e - -CREATE TABLE account_plugin_permissions ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - install_permission VARCHAR(16) DEFAULT 'everyone' NOT NULL, - debug_permission VARCHAR(16) DEFAULT 'noone' NOT NULL, - CONSTRAINT account_plugin_permission_pkey PRIMARY KEY (id), - CONSTRAINT unique_tenant_plugin UNIQUE (tenant_id) -); - -UPDATE alembic_version SET version_num='08ec4f75af5e' WHERE alembic_version.version_num = 'ddcc8bbef391'; - --- Running upgrade 08ec4f75af5e -> 4413929e1ec2 - -ALTER TABLE dataset_collection_bindings ALTER COLUMN provider_name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='4413929e1ec2' WHERE alembic_version.version_num = '08ec4f75af5e'; - --- Running upgrade 4413929e1ec2 -> 5511c782ee4c - -ALTER TABLE tool_api_providers ALTER COLUMN name TYPE VARCHAR(255); - -ALTER TABLE tool_model_invokes ALTER COLUMN provider TYPE VARCHAR(255); - -ALTER TABLE tool_workflow_providers ALTER COLUMN name TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='5511c782ee4c' WHERE alembic_version.version_num = '4413929e1ec2'; - --- Running upgrade 5511c782ee4c -> ee79d9b1c156 - -ALTER TABLE workflows ADD COLUMN marked_name VARCHAR DEFAULT '' NOT NULL; - -ALTER TABLE workflows ADD COLUMN marked_comment VARCHAR DEFAULT '' NOT NULL; - -UPDATE alembic_version SET version_num='ee79d9b1c156' WHERE alembic_version.version_num = '5511c782ee4c'; - --- Running upgrade ee79d9b1c156 -> f051706725cc - -CREATE TABLE rate_limit_logs ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - subscription_plan VARCHAR(255) NOT NULL, - operation VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT rate_limit_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX rate_limit_log_operation_idx ON rate_limit_logs (operation); - -CREATE INDEX rate_limit_log_tenant_idx ON rate_limit_logs (tenant_id); - -UPDATE alembic_version SET version_num='f051706725cc' WHERE alembic_version.version_num = 'ee79d9b1c156'; - --- Running upgrade f051706725cc -> d20049ed0af6 - -CREATE TABLE dataset_metadata_bindings ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - metadata_id UUID NOT NULL, - document_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - created_by UUID NOT NULL, - CONSTRAINT dataset_metadata_binding_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_metadata_binding_dataset_idx ON dataset_metadata_bindings (dataset_id); - -CREATE INDEX dataset_metadata_binding_document_idx ON dataset_metadata_bindings (document_id); - -CREATE INDEX dataset_metadata_binding_metadata_idx ON dataset_metadata_bindings (metadata_id); - -CREATE INDEX dataset_metadata_binding_tenant_idx ON dataset_metadata_bindings (tenant_id); - -CREATE TABLE dataset_metadatas ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - type VARCHAR(255) NOT NULL, - name VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - created_by UUID NOT NULL, - updated_by UUID, - CONSTRAINT dataset_metadata_pkey PRIMARY KEY (id) -); - -CREATE INDEX dataset_metadata_dataset_idx ON dataset_metadatas (dataset_id); - -CREATE INDEX dataset_metadata_tenant_idx ON dataset_metadatas (tenant_id); - -ALTER TABLE datasets ADD COLUMN built_in_field_enabled BOOLEAN DEFAULT false NOT NULL; - -ALTER TABLE documents ALTER COLUMN doc_metadata TYPE JSONB; - -CREATE INDEX document_metadata_idx ON documents USING gin (doc_metadata); - -UPDATE alembic_version SET version_num='d20049ed0af6' WHERE alembic_version.version_num = 'f051706725cc'; - --- Running upgrade d20049ed0af6 -> 6a9f914f656c - -CREATE INDEX child_chunks_node_idx ON child_chunks (index_node_id, dataset_id); - -CREATE INDEX child_chunks_segment_idx ON child_chunks (segment_id); - -DROP INDEX document_segment_dataset_node_idx; - -CREATE INDEX document_segment_node_dataset_idx ON document_segments (index_node_id, dataset_id); - -UPDATE alembic_version SET version_num='6a9f914f656c' WHERE alembic_version.version_num = 'd20049ed0af6'; - --- Running upgrade 6a9f914f656c -> d28f2004b072 - -CREATE INDEX workflow_conversation_variables_conversation_id_idx ON workflow_conversation_variables (conversation_id); - -UPDATE alembic_version SET version_num='d28f2004b072' WHERE alembic_version.version_num = '6a9f914f656c'; - --- Running upgrade d28f2004b072 -> 2adcbe1f5dfb - -CREATE TABLE workflow_draft_variables ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - app_id UUID NOT NULL, - last_edited_at TIMESTAMP WITHOUT TIME ZONE, - node_id VARCHAR(255) NOT NULL, - name VARCHAR(255) NOT NULL, - description VARCHAR(255) NOT NULL, - selector VARCHAR(255) NOT NULL, - value_type VARCHAR(20) NOT NULL, - value TEXT NOT NULL, - visible BOOLEAN NOT NULL, - editable BOOLEAN NOT NULL, - CONSTRAINT workflow_draft_variables_pkey PRIMARY KEY (id), - CONSTRAINT workflow_draft_variables_app_id_key UNIQUE (app_id, node_id, name) -); - -UPDATE alembic_version SET version_num='2adcbe1f5dfb' WHERE alembic_version.version_num = 'd28f2004b072'; - --- Running upgrade 2adcbe1f5dfb -> 4474872b0ee6 - -COMMIT; - -CREATE INDEX CONCURRENTLY workflow_node_executions_tenant_id_idx ON workflow_node_executions (tenant_id, workflow_id, node_id, created_at DESC); - -BEGIN; - -ALTER TABLE workflow_draft_variables ADD COLUMN node_execution_id UUID; - -UPDATE alembic_version SET version_num='4474872b0ee6' WHERE alembic_version.version_num = '2adcbe1f5dfb'; - --- Running upgrade 4474872b0ee6 -> 0ab65e1cc7fa - -DROP INDEX workflow_run_tenant_app_sequence_idx; - -ALTER TABLE workflow_runs DROP COLUMN sequence_number; - -UPDATE alembic_version SET version_num='0ab65e1cc7fa' WHERE alembic_version.version_num = '4474872b0ee6'; - --- Running upgrade 0ab65e1cc7fa -> 58eb7bdb93fe - -CREATE TABLE app_mcp_servers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - description VARCHAR(255) NOT NULL, - server_code VARCHAR(255) NOT NULL, - status VARCHAR(255) DEFAULT 'normal'::character varying NOT NULL, - parameters TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT app_mcp_server_pkey PRIMARY KEY (id), - CONSTRAINT unique_app_mcp_server_tenant_app_id UNIQUE (tenant_id, app_id), - CONSTRAINT unique_app_mcp_server_server_code UNIQUE (server_code) -); - -CREATE TABLE tool_mcp_providers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(40) NOT NULL, - server_identifier VARCHAR(24) NOT NULL, - server_url TEXT NOT NULL, - server_url_hash VARCHAR(64) NOT NULL, - icon VARCHAR(255), - tenant_id UUID NOT NULL, - user_id UUID NOT NULL, - encrypted_credentials TEXT, - authed BOOLEAN NOT NULL, - tools TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT tool_mcp_provider_pkey PRIMARY KEY (id), - CONSTRAINT unique_mcp_provider_name UNIQUE (tenant_id, name), - CONSTRAINT unique_mcp_provider_server_identifier UNIQUE (tenant_id, server_identifier), - CONSTRAINT unique_mcp_provider_server_url UNIQUE (tenant_id, server_url_hash) -); - -UPDATE alembic_version SET version_num='58eb7bdb93fe' WHERE alembic_version.version_num = '0ab65e1cc7fa'; - --- Running upgrade 58eb7bdb93fe -> 1c9ba48be8e4 - -/* Main function to generate a uuidv7 value with millisecond precision */ -CREATE FUNCTION uuidv7() RETURNS uuid -AS -$$ - -- Replace the first 48 bits of a uuidv4 with the current - -- number of milliseconds since 1970-01-01 UTC - -- and set the "ver" field to 7 by setting additional bits -SELECT encode( - set_bit( - set_bit( - overlay(uuid_send(gen_random_uuid()) placing - substring(int8send((extract(epoch from clock_timestamp()) * 1000)::bigint) from - 3) - from 1 for 6), - 52, 1), - 53, 1), 'hex')::uuid; -$$ LANGUAGE SQL VOLATILE PARALLEL SAFE; - -COMMENT ON FUNCTION uuidv7 IS - 'Generate a uuid-v7 value with a 48-bit timestamp (millisecond precision) and 74 bits of randomness';; - -CREATE FUNCTION uuidv7_boundary(timestamptz) RETURNS uuid -AS -$$ - /* uuid fields: version=0b0111, variant=0b10 */ -SELECT encode( - overlay('\x00000000000070008000000000000000'::bytea - placing substring(int8send(floor(extract(epoch from $1) * 1000)::bigint) from 3) - from 1 for 6), - 'hex')::uuid; -$$ LANGUAGE SQL STABLE STRICT PARALLEL SAFE; - -COMMENT ON FUNCTION uuidv7_boundary(timestamptz) IS - 'Generate a non-random uuidv7 with the given timestamp (first 48 bits) and all random bits to 0. As the smallest possible uuidv7 for that timestamp, it may be used as a boundary for partitions.';; - -UPDATE alembic_version SET version_num='1c9ba48be8e4' WHERE alembic_version.version_num = '58eb7bdb93fe'; - --- Running upgrade 1c9ba48be8e4 -> 71f5020c6470 - -CREATE TABLE tool_oauth_system_clients ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - plugin_id VARCHAR(512) NOT NULL, - provider VARCHAR(255) NOT NULL, - encrypted_oauth_params TEXT NOT NULL, - CONSTRAINT tool_oauth_system_client_pkey PRIMARY KEY (id), - CONSTRAINT tool_oauth_system_client_plugin_id_provider_idx UNIQUE (plugin_id, provider) -); - -CREATE TABLE tool_oauth_tenant_clients ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - plugin_id VARCHAR(512) NOT NULL, - provider VARCHAR(255) NOT NULL, - enabled BOOLEAN DEFAULT true NOT NULL, - encrypted_oauth_params TEXT NOT NULL, - CONSTRAINT tool_oauth_tenant_client_pkey PRIMARY KEY (id), - CONSTRAINT unique_tool_oauth_tenant_client UNIQUE (tenant_id, plugin_id, provider) -); - -ALTER TABLE tool_builtin_providers ADD COLUMN name VARCHAR(256) DEFAULT 'API KEY 1'::character varying NOT NULL; - -ALTER TABLE tool_builtin_providers ADD COLUMN is_default BOOLEAN DEFAULT false NOT NULL; - -ALTER TABLE tool_builtin_providers ADD COLUMN credential_type VARCHAR(32) DEFAULT 'api-key'::character varying NOT NULL; - -ALTER TABLE tool_builtin_providers DROP CONSTRAINT unique_builtin_tool_provider; - -ALTER TABLE tool_builtin_providers ADD CONSTRAINT unique_builtin_tool_provider UNIQUE (tenant_id, provider, name); - -UPDATE alembic_version SET version_num='71f5020c6470' WHERE alembic_version.version_num = '1c9ba48be8e4'; - --- Running upgrade 71f5020c6470 -> 1a83934ad6d1 - -ALTER TABLE tool_mcp_providers ALTER COLUMN server_identifier TYPE VARCHAR(64); - -ALTER TABLE tool_model_invokes ALTER COLUMN tool_name TYPE VARCHAR(128); - -UPDATE alembic_version SET version_num='1a83934ad6d1' WHERE alembic_version.version_num = '71f5020c6470'; - --- Running upgrade 1a83934ad6d1 -> 375fe79ead14 - -ALTER TABLE tool_builtin_providers ADD COLUMN expires_at BIGINT DEFAULT -1 NOT NULL; - -UPDATE alembic_version SET version_num='375fe79ead14' WHERE alembic_version.version_num = '1a83934ad6d1'; - --- Running upgrade 375fe79ead14 -> 8bcc02c9bd07 - -CREATE TABLE tenant_plugin_auto_upgrade_strategies ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - strategy_setting VARCHAR(16) DEFAULT 'fix_only' NOT NULL, - upgrade_time_of_day INTEGER NOT NULL, - upgrade_mode VARCHAR(16) DEFAULT 'exclude' NOT NULL, - exclude_plugins VARCHAR(255)[] NOT NULL, - include_plugins VARCHAR(255)[] NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT tenant_plugin_auto_upgrade_strategy_pkey PRIMARY KEY (id), - CONSTRAINT unique_tenant_plugin_auto_upgrade_strategy UNIQUE (tenant_id) -); - -UPDATE alembic_version SET version_num='8bcc02c9bd07' WHERE alembic_version.version_num = '375fe79ead14'; - --- Running upgrade 8bcc02c9bd07 -> 532b3f888abf - -ALTER TABLE tidb_auth_bindings ALTER COLUMN status SET DEFAULT 'CREATING'::character varying; - -UPDATE alembic_version SET version_num='532b3f888abf' WHERE alembic_version.version_num = '8bcc02c9bd07'; - --- Running upgrade 532b3f888abf -> fa8b0fa6f407 - -ALTER TABLE tool_mcp_providers ADD COLUMN timeout FLOAT DEFAULT 30 NOT NULL; - -ALTER TABLE tool_mcp_providers ADD COLUMN sse_read_timeout FLOAT DEFAULT 300 NOT NULL; - -UPDATE alembic_version SET version_num='fa8b0fa6f407' WHERE alembic_version.version_num = '532b3f888abf'; - --- Running upgrade fa8b0fa6f407 -> e8446f481c1e - -CREATE TABLE provider_credentials ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(255) NOT NULL, - credential_name VARCHAR(255) NOT NULL, - encrypted_config TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT provider_credential_pkey PRIMARY KEY (id) -); - -CREATE INDEX provider_credential_tenant_provider_idx ON provider_credentials (tenant_id, provider_name); - -ALTER TABLE providers ADD COLUMN credential_id UUID; - -ALTER TABLE load_balancing_model_configs ADD COLUMN credential_id UUID; - --- [IMPORTANT] Data migration skipped!!! --- You should manually run data migration function `migrate_existing_providers_data` --- inside file /Users/qg/workspace/langgenius/dify/api/migrations/versions/2025_08_09_1553-e8446f481c1e_add_provider_credential_pool_support.py --- Please review the migration script carefully!; - -ALTER TABLE providers DROP COLUMN encrypted_config; - -UPDATE alembic_version SET version_num='e8446f481c1e' WHERE alembic_version.version_num = 'fa8b0fa6f407'; - --- Running upgrade e8446f481c1e -> 0e154742a5fa - -CREATE TABLE provider_model_credentials ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - provider_name VARCHAR(255) NOT NULL, - model_name VARCHAR(255) NOT NULL, - model_type VARCHAR(40) NOT NULL, - credential_name VARCHAR(255) NOT NULL, - encrypted_config TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT provider_model_credential_pkey PRIMARY KEY (id) -); - -CREATE INDEX provider_model_credential_tenant_provider_model_idx ON provider_model_credentials (tenant_id, provider_name, model_name, model_type); - -ALTER TABLE provider_models ADD COLUMN credential_id UUID; - -ALTER TABLE load_balancing_model_configs ADD COLUMN credential_source_type VARCHAR(40); - --- [IMPORTANT] Data migration skipped!!! --- You should manually run data migration function `migrate_existing_provider_models_data` --- inside file /Users/qg/workspace/langgenius/dify/api/migrations/versions/2025_08_13_1605-0e154742a5fa_add_provider_model_multi_credential.py --- Please review the migration script carefully!; - -ALTER TABLE provider_models DROP COLUMN encrypted_config; - -UPDATE alembic_version SET version_num='0e154742a5fa' WHERE alembic_version.version_num = 'e8446f481c1e'; - --- Running upgrade 0e154742a5fa -> 8d289573e1da - -CREATE TABLE oauth_provider_apps ( - id UUID DEFAULT uuidv7() NOT NULL, - app_icon VARCHAR(255) NOT NULL, - app_label JSON DEFAULT '{}' NOT NULL, - client_id VARCHAR(255) NOT NULL, - client_secret VARCHAR(255) NOT NULL, - redirect_uris JSON DEFAULT '[]' NOT NULL, - scope VARCHAR(255) DEFAULT 'read:name read:email read:avatar read:interface_language read:timezone' NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP(0) NOT NULL, - CONSTRAINT oauth_provider_app_pkey PRIMARY KEY (id) -); - -CREATE INDEX oauth_provider_app_client_id_idx ON oauth_provider_apps (client_id); - -UPDATE alembic_version SET version_num='8d289573e1da' WHERE alembic_version.version_num = '0e154742a5fa'; - --- Running upgrade 8d289573e1da -> b95962a3885c - -CREATE INDEX workflow_app_log_workflow_run_id_idx ON workflow_app_logs (workflow_run_id); - -UPDATE alembic_version SET version_num='b95962a3885c' WHERE alembic_version.version_num = '8d289573e1da'; - --- Running upgrade b95962a3885c -> c20211f18133 - -ALTER TABLE tool_mcp_providers ADD COLUMN encrypted_headers TEXT; - -UPDATE alembic_version SET version_num='c20211f18133' WHERE alembic_version.version_num = 'b95962a3885c'; - --- Running upgrade c20211f18133 -> cf7c38a32b2d - -ALTER TABLE providers ADD COLUMN credential_status VARCHAR(20) DEFAULT 'active'::character varying; - -UPDATE alembic_version SET version_num='cf7c38a32b2d' WHERE alembic_version.version_num = 'c20211f18133'; - --- Running upgrade cf7c38a32b2d -> 68519ad5cd18 - -CREATE TABLE datasource_oauth_params ( - id UUID DEFAULT uuidv7() NOT NULL, - plugin_id VARCHAR(255) NOT NULL, - provider VARCHAR(255) NOT NULL, - system_credentials JSONB NOT NULL, - CONSTRAINT datasource_oauth_config_pkey PRIMARY KEY (id), - CONSTRAINT datasource_oauth_config_datasource_id_provider_idx UNIQUE (plugin_id, provider) -); - -CREATE TABLE datasource_oauth_tenant_params ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - provider VARCHAR(255) NOT NULL, - plugin_id VARCHAR(255) NOT NULL, - client_params JSONB NOT NULL, - enabled BOOLEAN NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT datasource_oauth_tenant_config_pkey PRIMARY KEY (id), - CONSTRAINT datasource_oauth_tenant_config_unique UNIQUE (tenant_id, plugin_id, provider) -); - -CREATE TABLE datasource_providers ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - provider VARCHAR(255) NOT NULL, - plugin_id VARCHAR(255) NOT NULL, - auth_type VARCHAR(255) NOT NULL, - encrypted_credentials JSONB NOT NULL, - avatar_url TEXT, - is_default BOOLEAN DEFAULT false NOT NULL, - expires_at INTEGER DEFAULT '-1' NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT datasource_provider_pkey PRIMARY KEY (id), - CONSTRAINT datasource_provider_unique_name UNIQUE (tenant_id, plugin_id, provider, name) -); - -CREATE INDEX datasource_provider_auth_type_provider_idx ON datasource_providers (tenant_id, plugin_id, provider); - -CREATE TABLE document_pipeline_execution_logs ( - id UUID DEFAULT uuidv7() NOT NULL, - pipeline_id UUID NOT NULL, - document_id UUID NOT NULL, - datasource_type VARCHAR(255) NOT NULL, - datasource_info TEXT NOT NULL, - datasource_node_id VARCHAR(255) NOT NULL, - input_data JSON NOT NULL, - created_by UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT document_pipeline_execution_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX document_pipeline_execution_logs_document_id_idx ON document_pipeline_execution_logs (document_id); - -CREATE TABLE pipeline_built_in_templates ( - id UUID DEFAULT uuidv7() NOT NULL, - name VARCHAR(255) NOT NULL, - description TEXT NOT NULL, - chunk_structure VARCHAR(255) NOT NULL, - icon JSON NOT NULL, - yaml_content TEXT NOT NULL, - copyright VARCHAR(255) NOT NULL, - privacy_policy VARCHAR(255) NOT NULL, - position INTEGER NOT NULL, - install_count INTEGER NOT NULL, - language VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - created_by UUID NOT NULL, - updated_by UUID, - CONSTRAINT pipeline_built_in_template_pkey PRIMARY KEY (id) -); - -CREATE TABLE pipeline_customized_templates ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - description TEXT NOT NULL, - chunk_structure VARCHAR(255) NOT NULL, - icon JSON NOT NULL, - position INTEGER NOT NULL, - yaml_content TEXT NOT NULL, - install_count INTEGER NOT NULL, - language VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - updated_by UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT pipeline_customized_template_pkey PRIMARY KEY (id) -); - -CREATE INDEX pipeline_customized_template_tenant_idx ON pipeline_customized_templates (tenant_id); - -CREATE TABLE pipeline_recommended_plugins ( - id UUID DEFAULT uuidv7() NOT NULL, - plugin_id TEXT NOT NULL, - provider_name TEXT NOT NULL, - position INTEGER NOT NULL, - active BOOLEAN NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT pipeline_recommended_plugin_pkey PRIMARY KEY (id) -); - -CREATE TABLE pipelines ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - name VARCHAR(255) NOT NULL, - description TEXT DEFAULT ''::character varying NOT NULL, - workflow_id UUID, - is_public BOOLEAN DEFAULT false NOT NULL, - is_published BOOLEAN DEFAULT false NOT NULL, - created_by UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_by UUID, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT pipeline_pkey PRIMARY KEY (id) -); - -CREATE TABLE workflow_draft_variable_files ( - id UUID DEFAULT uuidv7() NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - user_id UUID NOT NULL, - upload_file_id UUID NOT NULL, - size BIGINT NOT NULL, - length INTEGER, - value_type VARCHAR(20) NOT NULL, - CONSTRAINT workflow_draft_variable_files_pkey PRIMARY KEY (id) -); - -COMMENT ON COLUMN workflow_draft_variable_files.tenant_id IS 'The tenant to which the WorkflowDraftVariableFile belongs, referencing Tenant.id'; - -COMMENT ON COLUMN workflow_draft_variable_files.app_id IS 'The application to which the WorkflowDraftVariableFile belongs, referencing App.id'; - -COMMENT ON COLUMN workflow_draft_variable_files.user_id IS 'The owner to of the WorkflowDraftVariableFile, referencing Account.id'; - -COMMENT ON COLUMN workflow_draft_variable_files.upload_file_id IS 'Reference to UploadFile containing the large variable data'; - -COMMENT ON COLUMN workflow_draft_variable_files.size IS 'Size of the original variable content in bytes'; - -COMMENT ON COLUMN workflow_draft_variable_files.length IS 'Length of the original variable content. For array and array-like types, this represents the number of elements. For object types, it indicates the number of keys. For other types, the value is NULL.'; - -CREATE TABLE workflow_node_execution_offload ( - id UUID DEFAULT uuidv7() NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - node_execution_id UUID, - type VARCHAR(20) NOT NULL, - file_id UUID NOT NULL, - CONSTRAINT workflow_node_execution_offload_pkey PRIMARY KEY (id), - CONSTRAINT workflow_node_execution_offload_node_execution_id_key UNIQUE (node_execution_id, type) -); - -ALTER TABLE datasets ADD COLUMN keyword_number INTEGER DEFAULT 10; - -ALTER TABLE datasets ADD COLUMN icon_info JSONB; - -ALTER TABLE datasets ADD COLUMN runtime_mode VARCHAR(255) DEFAULT 'general'::character varying; - -ALTER TABLE datasets ADD COLUMN pipeline_id UUID; - -ALTER TABLE datasets ADD COLUMN chunk_structure VARCHAR(255); - -ALTER TABLE datasets ADD COLUMN enable_api BOOLEAN DEFAULT true NOT NULL; - -ALTER TABLE workflow_draft_variables ADD COLUMN file_id UUID; - -COMMENT ON COLUMN workflow_draft_variables.file_id IS 'Reference to WorkflowDraftVariableFile if variable is offloaded to external storage'; - -ALTER TABLE workflow_draft_variables ADD COLUMN is_default_value BOOLEAN DEFAULT FALSE NOT NULL; - -COMMENT ON COLUMN workflow_draft_variables.is_default_value IS 'Indicates whether the current value is the default for a conversation variable. Always `FALSE` for other types of variables.'; - -CREATE INDEX workflow_draft_variable_file_id_idx ON workflow_draft_variables (file_id); - -ALTER TABLE workflows ADD COLUMN rag_pipeline_variables TEXT DEFAULT '{}' NOT NULL; - -UPDATE alembic_version SET version_num='68519ad5cd18' WHERE alembic_version.version_num = 'cf7c38a32b2d'; - --- Running upgrade 68519ad5cd18 -> d98acf217d43 - -ALTER TABLE messages ADD COLUMN app_mode VARCHAR(255); - -CREATE INDEX message_app_mode_idx ON messages (app_mode); - -UPDATE alembic_version SET version_num='d98acf217d43' WHERE alembic_version.version_num = '68519ad5cd18'; - --- Running upgrade d98acf217d43 -> ae662b25d9bc - -ALTER TABLE pipeline_built_in_templates DROP COLUMN updated_by; - -ALTER TABLE pipeline_built_in_templates DROP COLUMN created_by; - -UPDATE alembic_version SET version_num='ae662b25d9bc' WHERE alembic_version.version_num = 'd98acf217d43'; - --- Running upgrade ae662b25d9bc -> 03f8dcbc611e - -CREATE TABLE workflow_pauses ( - workflow_id UUID NOT NULL, - workflow_run_id UUID NOT NULL, - resumed_at TIMESTAMP WITHOUT TIME ZONE, - state_object_key VARCHAR(255) NOT NULL, - id UUID DEFAULT uuidv7() NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT workflow_pauses_pkey PRIMARY KEY (id), - CONSTRAINT workflow_pauses_workflow_run_id_key UNIQUE (workflow_run_id) -); - -UPDATE alembic_version SET version_num='03f8dcbc611e' WHERE alembic_version.version_num = 'ae662b25d9bc'; - --- Running upgrade 03f8dcbc611e -> 669ffd70119c - -CREATE TABLE app_triggers ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - node_id VARCHAR(64) NOT NULL, - trigger_type VARCHAR(50) NOT NULL, - title VARCHAR(255) NOT NULL, - provider_name VARCHAR(255) DEFAULT '', - status VARCHAR(50) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, - CONSTRAINT app_trigger_pkey PRIMARY KEY (id) -); - -CREATE INDEX app_trigger_tenant_app_idx ON app_triggers (tenant_id, app_id); - -CREATE TABLE trigger_oauth_system_clients ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - plugin_id VARCHAR(512) NOT NULL, - provider VARCHAR(255) NOT NULL, - encrypted_oauth_params TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT trigger_oauth_system_client_pkey PRIMARY KEY (id), - CONSTRAINT trigger_oauth_system_client_plugin_id_provider_idx UNIQUE (plugin_id, provider) -); - -CREATE TABLE trigger_oauth_tenant_clients ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - plugin_id VARCHAR(255) NOT NULL, - provider VARCHAR(255) NOT NULL, - enabled BOOLEAN DEFAULT true NOT NULL, - encrypted_oauth_params TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT trigger_oauth_tenant_client_pkey PRIMARY KEY (id), - CONSTRAINT unique_trigger_oauth_tenant_client UNIQUE (tenant_id, plugin_id, provider) -); - -CREATE TABLE trigger_subscriptions ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - name VARCHAR(255) NOT NULL, - tenant_id UUID NOT NULL, - user_id UUID NOT NULL, - provider_id VARCHAR(255) NOT NULL, - endpoint_id VARCHAR(255) NOT NULL, - parameters JSON NOT NULL, - properties JSON NOT NULL, - credentials JSON NOT NULL, - credential_type VARCHAR(50) NOT NULL, - credential_expires_at INTEGER NOT NULL, - expires_at INTEGER NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT trigger_provider_pkey PRIMARY KEY (id), - CONSTRAINT unique_trigger_provider UNIQUE (tenant_id, provider_id, name) -); - -COMMENT ON COLUMN trigger_subscriptions.name IS 'Subscription instance name'; - -COMMENT ON COLUMN trigger_subscriptions.provider_id IS 'Provider identifier (e.g., plugin_id/provider_name)'; - -COMMENT ON COLUMN trigger_subscriptions.endpoint_id IS 'Subscription endpoint'; - -COMMENT ON COLUMN trigger_subscriptions.parameters IS 'Subscription parameters JSON'; - -COMMENT ON COLUMN trigger_subscriptions.properties IS 'Subscription properties JSON'; - -COMMENT ON COLUMN trigger_subscriptions.credentials IS 'Subscription credentials JSON'; - -COMMENT ON COLUMN trigger_subscriptions.credential_type IS 'oauth or api_key'; - -COMMENT ON COLUMN trigger_subscriptions.credential_expires_at IS 'OAuth token expiration timestamp, -1 for never'; - -COMMENT ON COLUMN trigger_subscriptions.expires_at IS 'Subscription instance expiration timestamp, -1 for never'; - -CREATE UNIQUE INDEX idx_trigger_providers_endpoint ON trigger_subscriptions (endpoint_id); - -CREATE INDEX idx_trigger_providers_tenant_endpoint ON trigger_subscriptions (tenant_id, endpoint_id); - -CREATE INDEX idx_trigger_providers_tenant_provider ON trigger_subscriptions (tenant_id, provider_id); - -CREATE TABLE workflow_plugin_triggers ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - node_id VARCHAR(64) NOT NULL, - tenant_id UUID NOT NULL, - provider_id VARCHAR(512) NOT NULL, - event_name VARCHAR(255) NOT NULL, - subscription_id VARCHAR(255) NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT workflow_plugin_trigger_pkey PRIMARY KEY (id), - CONSTRAINT uniq_app_node_subscription UNIQUE (app_id, node_id) -); - -CREATE INDEX workflow_plugin_trigger_tenant_subscription_idx ON workflow_plugin_triggers (tenant_id, subscription_id, event_name); - -CREATE TABLE workflow_schedule_plans ( - id UUID DEFAULT uuidv7() NOT NULL, - app_id UUID NOT NULL, - node_id VARCHAR(64) NOT NULL, - tenant_id UUID NOT NULL, - cron_expression VARCHAR(255) NOT NULL, - timezone VARCHAR(64) NOT NULL, - next_run_at TIMESTAMP WITHOUT TIME ZONE, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT workflow_schedule_plan_pkey PRIMARY KEY (id), - CONSTRAINT uniq_app_node UNIQUE (app_id, node_id) -); - -CREATE INDEX workflow_schedule_plan_next_idx ON workflow_schedule_plans (next_run_at); - -CREATE TABLE workflow_trigger_logs ( - id UUID DEFAULT uuidv7() NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - workflow_id UUID NOT NULL, - workflow_run_id UUID, - root_node_id VARCHAR(255), - trigger_metadata TEXT NOT NULL, - trigger_type VARCHAR(50) NOT NULL, - trigger_data TEXT NOT NULL, - inputs TEXT NOT NULL, - outputs TEXT, - status VARCHAR(50) NOT NULL, - error TEXT, - queue_name VARCHAR(100) NOT NULL, - celery_task_id VARCHAR(255), - retry_count INTEGER NOT NULL, - elapsed_time FLOAT, - total_tokens INTEGER, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - created_by_role VARCHAR(255) NOT NULL, - created_by VARCHAR(255) NOT NULL, - triggered_at TIMESTAMP WITHOUT TIME ZONE, - finished_at TIMESTAMP WITHOUT TIME ZONE, - CONSTRAINT workflow_trigger_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_trigger_log_created_at_idx ON workflow_trigger_logs (created_at); - -CREATE INDEX workflow_trigger_log_status_idx ON workflow_trigger_logs (status); - -CREATE INDEX workflow_trigger_log_tenant_app_idx ON workflow_trigger_logs (tenant_id, app_id); - -CREATE INDEX workflow_trigger_log_workflow_id_idx ON workflow_trigger_logs (workflow_id); - -CREATE INDEX workflow_trigger_log_workflow_run_idx ON workflow_trigger_logs (workflow_run_id); - -CREATE TABLE workflow_webhook_triggers ( - id UUID DEFAULT uuidv7() NOT NULL, - app_id UUID NOT NULL, - node_id VARCHAR(64) NOT NULL, - tenant_id UUID NOT NULL, - webhook_id VARCHAR(24) NOT NULL, - created_by UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT workflow_webhook_trigger_pkey PRIMARY KEY (id), - CONSTRAINT uniq_node UNIQUE (app_id, node_id), - CONSTRAINT uniq_webhook_id UNIQUE (webhook_id) -); - -CREATE INDEX workflow_webhook_trigger_tenant_idx ON workflow_webhook_triggers (tenant_id); - -ALTER TABLE celery_taskmeta ALTER COLUMN task_id SET NOT NULL; - -ALTER TABLE celery_taskmeta ALTER COLUMN status SET NOT NULL; - -ALTER TABLE celery_tasksetmeta ALTER COLUMN taskset_id SET NOT NULL; - -ALTER TABLE providers DROP COLUMN credential_status; - -UPDATE alembic_version SET version_num='669ffd70119c' WHERE alembic_version.version_num = '03f8dcbc611e'; - --- Running upgrade 669ffd70119c -> 09cfdda155d1 - -ALTER TABLE datasource_providers ALTER COLUMN provider TYPE VARCHAR(128); - -ALTER TABLE external_knowledge_bindings ALTER COLUMN external_knowledge_id TYPE VARCHAR(512); - -ALTER TABLE tenant_plugin_auto_upgrade_strategies ALTER COLUMN exclude_plugins TYPE JSON USING to_jsonb(exclude_plugins)::json; - -ALTER TABLE tenant_plugin_auto_upgrade_strategies ALTER COLUMN include_plugins TYPE JSON USING to_jsonb(include_plugins)::json; - -ALTER TABLE tool_oauth_tenant_clients ALTER COLUMN plugin_id TYPE VARCHAR(255); - -ALTER TABLE trigger_oauth_system_clients ALTER COLUMN plugin_id TYPE VARCHAR(255); - -UPDATE alembic_version SET version_num='09cfdda155d1' WHERE alembic_version.version_num = '669ffd70119c'; - --- Running upgrade 09cfdda155d1 -> 7bb281b7a422 - -CREATE TABLE workflow_pause_reasons ( - id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - pause_id UUID NOT NULL, - type_ VARCHAR(20) NOT NULL, - form_id VARCHAR(36) NOT NULL, - node_id VARCHAR(255) NOT NULL, - message VARCHAR(255) NOT NULL, - CONSTRAINT workflow_pause_reasons_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_pause_reasons_pause_id_idx ON workflow_pause_reasons (pause_id); - -UPDATE alembic_version SET version_num='7bb281b7a422' WHERE alembic_version.version_num = '09cfdda155d1'; - --- Running upgrade 7bb281b7a422 -> d57accd375ae - -CREATE TABLE segment_attachment_bindings ( - id UUID NOT NULL, - tenant_id UUID NOT NULL, - dataset_id UUID NOT NULL, - document_id UUID NOT NULL, - segment_id UUID NOT NULL, - attachment_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT segment_attachment_binding_pkey PRIMARY KEY (id) -); - -CREATE INDEX segment_attachment_binding_tenant_dataset_document_segment_idx ON segment_attachment_bindings (tenant_id, dataset_id, document_id, segment_id); - -CREATE INDEX segment_attachment_binding_attachment_idx ON segment_attachment_bindings (attachment_id); - -ALTER TABLE datasets ADD COLUMN is_multimodal BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='d57accd375ae' WHERE alembic_version.version_num = '7bb281b7a422'; - --- Running upgrade d57accd375ae -> 03ea244985ce - -ALTER TABLE pipeline_recommended_plugins ADD COLUMN type VARCHAR(50) DEFAULT 'tool' NOT NULL; - -UPDATE alembic_version SET version_num='03ea244985ce' WHERE alembic_version.version_num = 'd57accd375ae'; - --- Running upgrade 03ea244985ce -> 7df29de0f6be - -CREATE TABLE tenant_credit_pools ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - tenant_id UUID NOT NULL, - pool_type VARCHAR(40) DEFAULT 'trial' NOT NULL, - quota_limit BIGINT NOT NULL, - quota_used BIGINT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT tenant_credit_pool_pkey PRIMARY KEY (id) -); - -CREATE INDEX tenant_credit_pool_pool_type_idx ON tenant_credit_pools (pool_type); - -CREATE INDEX tenant_credit_pool_tenant_id_idx ON tenant_credit_pools (tenant_id); - -UPDATE alembic_version SET version_num='7df29de0f6be' WHERE alembic_version.version_num = '03ea244985ce'; - --- Running upgrade 7df29de0f6be -> 905527cc8fd3 - -CREATE INDEX workflow_run_created_at_id_idx ON workflow_runs (created_at, id); - -UPDATE alembic_version SET version_num='905527cc8fd3' WHERE alembic_version.version_num = '7df29de0f6be'; - --- Running upgrade 905527cc8fd3 -> 3334862ee907 - -CREATE INDEX message_created_at_id_idx ON messages (created_at, id); - -UPDATE alembic_version SET version_num='3334862ee907' WHERE alembic_version.version_num = '905527cc8fd3'; - --- Running upgrade 3334862ee907 -> 288345cd01d1 - -DROP INDEX workflow_node_execution_workflow_run_idx; - -CREATE INDEX workflow_node_execution_workflow_run_id_idx ON workflow_node_executions (workflow_run_id); - -UPDATE alembic_version SET version_num='288345cd01d1' WHERE alembic_version.version_num = '3334862ee907'; - --- Running upgrade 288345cd01d1 -> 9e6fa5cbcd80 - -UPDATE message_annotations SET question=(SELECT coalesce(messages.query, '') AS coalesce_1 -FROM messages -WHERE messages.id = message_annotations.message_id) WHERE message_annotations.question IS NULL AND message_annotations.message_id IS NOT NULL; - -UPDATE message_annotations SET question='' WHERE message_annotations.question IS NULL; - -ALTER TABLE message_annotations ALTER COLUMN question SET NOT NULL; - -UPDATE alembic_version SET version_num='9e6fa5cbcd80' WHERE alembic_version.version_num = '288345cd01d1'; - --- Running upgrade 9e6fa5cbcd80 -> f9f6d18a37f9 - -CREATE TABLE account_trial_app_records ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - account_id UUID NOT NULL, - app_id UUID NOT NULL, - count INTEGER NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT user_trial_app_pkey PRIMARY KEY (id), - CONSTRAINT unique_account_trial_app_record UNIQUE (account_id, app_id) -); - -CREATE INDEX account_trial_app_record_account_id_idx ON account_trial_app_records (account_id); - -CREATE INDEX account_trial_app_record_app_id_idx ON account_trial_app_records (app_id); - -CREATE TABLE exporle_banners ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - content JSON NOT NULL, - link VARCHAR(255) NOT NULL, - sort INTEGER NOT NULL, - status VARCHAR(255) DEFAULT 'enabled'::character varying NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - language VARCHAR(255) DEFAULT 'en-US'::character varying NOT NULL, - CONSTRAINT exporler_banner_pkey PRIMARY KEY (id) -); - -CREATE TABLE trial_apps ( - id UUID DEFAULT uuid_generate_v4() NOT NULL, - app_id UUID NOT NULL, - tenant_id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - trial_limit INTEGER NOT NULL, - CONSTRAINT trial_app_pkey PRIMARY KEY (id), - CONSTRAINT unique_trail_app_id UNIQUE (app_id) -); - -CREATE INDEX trial_app_app_id_idx ON trial_apps (app_id); - -CREATE INDEX trial_app_tenant_id_idx ON trial_apps (tenant_id); - -UPDATE alembic_version SET version_num='f9f6d18a37f9' WHERE alembic_version.version_num = '9e6fa5cbcd80'; - --- Running upgrade f9f6d18a37f9 -> 9d77545f524e - -CREATE TABLE workflow_archive_logs ( - id UUID DEFAULT uuidv7() NOT NULL, - log_id UUID, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - workflow_id UUID NOT NULL, - workflow_run_id UUID NOT NULL, - created_by_role VARCHAR(255) NOT NULL, - created_by UUID NOT NULL, - log_created_at TIMESTAMP WITHOUT TIME ZONE, - log_created_from VARCHAR(255), - run_version VARCHAR(255) NOT NULL, - run_status VARCHAR(255) NOT NULL, - run_triggered_from VARCHAR(255) NOT NULL, - run_error TEXT, - run_elapsed_time FLOAT DEFAULT 0 NOT NULL, - run_total_tokens BIGINT DEFAULT 0 NOT NULL, - run_total_steps INTEGER DEFAULT 0, - run_created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, - run_finished_at TIMESTAMP WITHOUT TIME ZONE, - run_exceptions_count INTEGER DEFAULT 0, - trigger_metadata TEXT, - archived_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT workflow_archive_log_pkey PRIMARY KEY (id) -); - -CREATE INDEX workflow_archive_log_app_idx ON workflow_archive_logs (tenant_id, app_id); - -CREATE INDEX workflow_archive_log_run_created_at_idx ON workflow_archive_logs (run_created_at); - -CREATE INDEX workflow_archive_log_workflow_run_id_idx ON workflow_archive_logs (workflow_run_id); - -UPDATE alembic_version SET version_num='9d77545f524e' WHERE alembic_version.version_num = 'f9f6d18a37f9'; - --- Running upgrade 9d77545f524e -> 788d3099ae3a - -CREATE TABLE document_segment_summaries ( - id UUID NOT NULL, - dataset_id UUID NOT NULL, - document_id UUID NOT NULL, - chunk_id UUID NOT NULL, - summary_content TEXT, - summary_index_node_id VARCHAR(255), - summary_index_node_hash VARCHAR(255), - tokens INTEGER, - status VARCHAR(32) DEFAULT 'generating' NOT NULL, - error TEXT, - enabled BOOLEAN DEFAULT true NOT NULL, - disabled_at TIMESTAMP WITHOUT TIME ZONE, - disabled_by UUID, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - CONSTRAINT document_segment_summaries_pkey PRIMARY KEY (id) -); - -CREATE INDEX document_segment_summaries_chunk_id_idx ON document_segment_summaries (chunk_id); - -CREATE INDEX document_segment_summaries_dataset_id_idx ON document_segment_summaries (dataset_id); - -CREATE INDEX document_segment_summaries_document_id_idx ON document_segment_summaries (document_id); - -CREATE INDEX document_segment_summaries_status_idx ON document_segment_summaries (status); - -ALTER TABLE datasets ADD COLUMN summary_index_setting JSONB; - -ALTER TABLE documents ADD COLUMN need_summary BOOLEAN DEFAULT false NOT NULL; - -UPDATE alembic_version SET version_num='788d3099ae3a' WHERE alembic_version.version_num = '9d77545f524e'; - --- Running upgrade 788d3099ae3a -> e8c3b3c46151 - -CREATE TABLE execution_extra_contents ( - id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - type VARCHAR(30) NOT NULL, - workflow_run_id UUID NOT NULL, - message_id UUID, - form_id UUID, - CONSTRAINT execution_extra_contents_pkey PRIMARY KEY (id) -); - -CREATE INDEX execution_extra_contents_message_id_idx ON execution_extra_contents (message_id); - -CREATE INDEX execution_extra_contents_workflow_run_id_idx ON execution_extra_contents (workflow_run_id); - -CREATE TABLE human_input_form_deliveries ( - id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - form_id UUID NOT NULL, - delivery_method_type VARCHAR(20) NOT NULL, - delivery_config_id UUID, - channel_payload TEXT NOT NULL, - CONSTRAINT human_input_form_deliveries_pkey PRIMARY KEY (id) -); - -CREATE TABLE human_input_form_recipients ( - id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - form_id UUID NOT NULL, - delivery_id UUID NOT NULL, - recipient_type VARCHAR(20) NOT NULL, - recipient_payload TEXT NOT NULL, - access_token VARCHAR(32) NOT NULL, - CONSTRAINT human_input_form_recipients_pkey PRIMARY KEY (id) -); - -ALTER TABLE human_input_form_recipients ADD CONSTRAINT human_input_form_recipients_access_token_key UNIQUE (access_token); - -CREATE TABLE human_input_forms ( - id UUID NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL, - tenant_id UUID NOT NULL, - app_id UUID NOT NULL, - workflow_run_id UUID, - form_kind VARCHAR(20) NOT NULL, - node_id VARCHAR(60) NOT NULL, - form_definition TEXT NOT NULL, - rendered_content TEXT NOT NULL, - status VARCHAR(20) NOT NULL, - expiration_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, - selected_action_id VARCHAR(200), - submitted_data TEXT, - submitted_at TIMESTAMP WITHOUT TIME ZONE, - submission_user_id UUID, - submission_end_user_id UUID, - completed_by_recipient_id UUID, - CONSTRAINT human_input_forms_pkey PRIMARY KEY (id) -); - -UPDATE alembic_version SET version_num='e8c3b3c46151' WHERE alembic_version.version_num = '788d3099ae3a'; - -COMMIT; - From b893d2df822bec2473b87fd8e77ce99f5c5f76e9 Mon Sep 17 00:00:00 2001 From: QuantumGhost Date: Fri, 6 Feb 2026 14:42:04 +0800 Subject: [PATCH 5/5] docs(api): add a short note about the `target_node` argument --- api/libs/broadcast_channel/redis/sharded_channel.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api/libs/broadcast_channel/redis/sharded_channel.py b/api/libs/broadcast_channel/redis/sharded_channel.py index 6dfb494ad7..8d4d7873ca 100644 --- a/api/libs/broadcast_channel/redis/sharded_channel.py +++ b/api/libs/broadcast_channel/redis/sharded_channel.py @@ -70,6 +70,10 @@ class _RedisShardedSubscription(RedisSubscriptionBase): # Since we have already filtered at the caller's site, we can safely set # `ignore_subscribe_messages=False`. if isinstance(self._client, RedisCluster): + # NOTE(QuantumGhost): due to an issue in upstream code, calling `get_sharded_message` + # would use busy-looping to wait for incoming message, consuming excessive CPU quota. + # + # Here we specify the `target_node` to mitigate this problem. node = self._client.get_node_from_key(self._topic) return self._pubsub.get_sharded_message( ignore_subscribe_messages=False,