From e566a1a58ca6e63ca9c9c14073e531326e447bdf Mon Sep 17 00:00:00 2001 From: matano Date: Mon, 19 Jan 2026 11:49:40 +0200 Subject: [PATCH 1/5] add the option of deleting an existing index during onboarding --- src/api/settings.py | 21 +++++++++++++++++++-- src/main.py | 12 ++++++++++-- src/utils/telemetry/message_id.py | 2 ++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/api/settings.py b/src/api/settings.py index 982d9272b..e8db90965 100644 --- a/src/api/settings.py +++ b/src/api/settings.py @@ -686,6 +686,7 @@ async def onboarding(request, flows_service, session_manager=None): "llm_model", "embedding_provider", "embedding_model", + "delete_existing_index", "sample_data", # Provider-specific fields "openai_api_key", @@ -975,10 +976,26 @@ async def onboarding(request, flows_service, session_manager=None): # Import here to avoid circular imports from main import init_index + # Handle delete_existing_index + delete_existing_index = False + if "delete_existing_index" in body: + delete_existing_index = body["delete_existing_index"] + if not isinstance(delete_existing_index, bool): + return JSONResponse( + {"error": "delete_existing_index must be a boolean value"}, status_code=400 + ) + if delete_existing_index: + await TelemetryClient.send_event( + Category.ONBOARDING, + MessageId.ORB_ONBOARD_DELETE_EXISTING_INDEX + ) + logger.info("Delete existing index requested during onboarding") + logger.info( - "Initializing OpenSearch index after onboarding configuration" + f"Initializing OpenSearch index after onboarding configuration" ) - await init_index() + await init_index(delete_existing=delete_existing_index) + logger.info("OpenSearch index initialization completed successfully") except Exception as e: if isinstance(e, ValueError): diff --git a/src/main.py b/src/main.py index fd2bf2a7f..303973905 100644 --- a/src/main.py +++ b/src/main.py @@ -179,7 +179,7 @@ async def _ensure_opensearch_index(): # The service can still function, document operations might fail later -async def init_index(): +async def init_index(delete_existing: bool = False): """Initialize OpenSearch index and security roles""" await wait_for_opensearch() @@ -197,8 +197,16 @@ async def init_index(): endpoint=getattr(embedding_provider_config, "endpoint", None) ) + index_exists = await clients.opensearch.indices.exists(index=INDEX_NAME) + if index_exists and delete_existing: + # Asked to delete the existing index .. + logger.info(f"Deleting index '{INDEX_NAME}'...") + resp = await clients.opensearch.indices.delete(index=INDEX_NAME) + logger.info(f"Deleted index '{INDEX_NAME}', response: {resp}") + index_exists = False + # Create documents index - if not await clients.opensearch.indices.exists(index=INDEX_NAME): + if not index_exists: await clients.opensearch.indices.create( index=INDEX_NAME, body=dynamic_index_body ) diff --git a/src/utils/telemetry/message_id.py b/src/utils/telemetry/message_id.py index c00e5eb35..a429982c8 100644 --- a/src/utils/telemetry/message_id.py +++ b/src/utils/telemetry/message_id.py @@ -197,6 +197,8 @@ class MessageId: ORB_ONBOARD_EMBED_MODEL = "ORB_ONBOARD_EMBED_MODEL" # Message: Sample data ingestion requested ORB_ONBOARD_SAMPLE_DATA = "ORB_ONBOARD_SAMPLE_DATA" + # Message: Delete existing index requested + ORB_ONBOARD_DELETE_EXISTING_INDEX = "ORB_ONBOARD_DELETE_EXISTING_INDEX" # Message: Configuration marked as edited ORB_ONBOARD_CONFIG_EDITED = "ORB_ONBOARD_CONFIG_EDITED" # Message: Onboarding rolled back due to all files failing From a4693d06ec2891e62d5f1a40786f05e3eecbb282 Mon Sep 17 00:00:00 2001 From: matano Date: Mon, 19 Jan 2026 11:52:12 +0200 Subject: [PATCH 2/5] remove redundant f-string --- src/api/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/settings.py b/src/api/settings.py index e8db90965..cee83beb8 100644 --- a/src/api/settings.py +++ b/src/api/settings.py @@ -992,7 +992,7 @@ async def onboarding(request, flows_service, session_manager=None): logger.info("Delete existing index requested during onboarding") logger.info( - f"Initializing OpenSearch index after onboarding configuration" + "Initializing OpenSearch index after onboarding configuration" ) await init_index(delete_existing=delete_existing_index) From ff59505f7962c8827961add07ac7548cc1f22dac Mon Sep 17 00:00:00 2001 From: matano Date: Sun, 15 Feb 2026 10:47:34 +0200 Subject: [PATCH 3/5] update to use get_index_name() instead of INDEX_NAME --- src/main.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main.py b/src/main.py index 40a5f4fdb..8ef755b4d 100644 --- a/src/main.py +++ b/src/main.py @@ -201,12 +201,13 @@ async def init_index(delete_existing: bool = False): endpoint=getattr(embedding_provider_config, "endpoint", None) ) - index_exists = await clients.opensearch.indices.exists(index=INDEX_NAME) + index_name = get_index_name() + index_exists = await clients.opensearch.indices.exists(index=index_name) if index_exists and delete_existing: # Asked to delete the existing index .. - logger.info(f"Deleting index '{INDEX_NAME}'...") - resp = await clients.opensearch.indices.delete(index=INDEX_NAME) - logger.info(f"Deleted index '{INDEX_NAME}', response: {resp}") + logger.info(f"Deleting index '{index_name}'...") + resp = await clients.opensearch.indices.delete(index=index_name) + logger.info(f"Deleted index '{index_name}', response: {resp}") index_exists = False # Create documents index From 30452c7afc3e645320a3ea4d07f6738f91ecc952 Mon Sep 17 00:00:00 2001 From: matano Date: Tue, 24 Feb 2026 10:47:34 +0200 Subject: [PATCH 4/5] fix indentation add delete_existing parameter to init_index_when_ready --- src/main.py | 58 ++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/main.py b/src/main.py index c893e1069..35243ffca 100644 --- a/src/main.py +++ b/src/main.py @@ -202,33 +202,33 @@ async def init_index(delete_existing: bool = False): endpoint=getattr(embedding_provider_config, "endpoint", None) ) - index_name = get_index_name() - index_exists = await clients.opensearch.indices.exists(index=index_name) - if index_exists and delete_existing: - # Asked to delete the existing index .. - logger.info(f"Deleting index '{index_name}'...") - resp = await clients.opensearch.indices.delete(index=index_name) - logger.info(f"Deleted index '{index_name}', response: {resp}") - index_exists = False - - # Create documents index - if not index_exists: - await clients.opensearch.indices.create( - index=index_name, body=dynamic_index_body - ) - logger.info( - "Created OpenSearch index", - index_name=index_name, - embedding_model=embedding_model, - ) - await TelemetryClient.send_event(Category.OPENSEARCH_INDEX, MessageId.ORB_OS_INDEX_CREATED) - else: - logger.info( - "Index already exists, skipping creation", - index_name=index_name, - embedding_model=embedding_model, - ) - await TelemetryClient.send_event(Category.OPENSEARCH_INDEX, MessageId.ORB_OS_INDEX_EXISTS) + index_name = get_index_name() + index_exists = await clients.opensearch.indices.exists(index=index_name) + if index_exists and delete_existing: + # Asked to delete the existing index .. + logger.info(f"Deleting index '{index_name}'...") + resp = await clients.opensearch.indices.delete(index=index_name) + logger.info(f"Deleted index '{index_name}', response: {resp}") + index_exists = False + + # Create documents index + if not index_exists: + await clients.opensearch.indices.create( + index=index_name, body=dynamic_index_body + ) + logger.info( + "Created OpenSearch index", + index_name=index_name, + embedding_model=embedding_model, + ) + await TelemetryClient.send_event(Category.OPENSEARCH_INDEX, MessageId.ORB_OS_INDEX_CREATED) + else: + logger.info( + "Index already exists, skipping creation", + index_name=index_name, + embedding_model=embedding_model, + ) + await TelemetryClient.send_event(Category.OPENSEARCH_INDEX, MessageId.ORB_OS_INDEX_EXISTS) # Create knowledge filters index knowledge_filter_index_name = "knowledge_filters" @@ -291,10 +291,10 @@ async def init_index(delete_existing: bool = False): raise e -async def init_index_when_ready(): +async def init_index_when_ready(delete_existing: bool = False): """Wait for the OpenSearch service to be ready and then initialize the OpenSearch index.""" await wait_for_opensearch() - await init_index() + await init_index(delete_existing) def generate_jwt_keys(): From 51ae8d4f581481c60a13ff6d6b1a0333a559467c Mon Sep 17 00:00:00 2001 From: matano Date: Wed, 18 Mar 2026 17:33:53 +0200 Subject: [PATCH 5/5] add delete_existing_index field to OnboardingBody --- src/api/settings.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/api/settings.py b/src/api/settings.py index de7642f47..6507ffb86 100644 --- a/src/api/settings.py +++ b/src/api/settings.py @@ -67,6 +67,7 @@ class OnboardingBody(BaseModel): llm_model: Optional[str] = Field(None, min_length=1) embedding_provider: Optional[str] = Field(None, pattern="^(openai|watsonx|ollama)$") embedding_model: Optional[str] = Field(None, min_length=1) + delete_existing_index: Optional[bool] = None openai_api_key: Optional[str] = Field(None, min_length=1) anthropic_api_key: Optional[str] = Field(None, min_length=1) watsonx_api_key: Optional[str] = Field(None, min_length=1) @@ -1112,18 +1113,13 @@ async def onboarding( # Handle delete_existing_index delete_existing_index = False - if "delete_existing_index" in body: - delete_existing_index = body["delete_existing_index"] - if not isinstance(delete_existing_index, bool): - return JSONResponse( - {"error": "delete_existing_index must be a boolean value"}, status_code=400 - ) - if delete_existing_index: - await TelemetryClient.send_event( - Category.ONBOARDING, - MessageId.ORB_ONBOARD_DELETE_EXISTING_INDEX - ) - logger.info("Delete existing index requested during onboarding") + if body.delete_existing_index: + delete_existing_index = True + await TelemetryClient.send_event( + Category.ONBOARDING, + MessageId.ORB_ONBOARD_DELETE_EXISTING_INDEX + ) + logger.info("Delete existing index requested during onboarding") logger.info( "Initializing OpenSearch index after onboarding configuration"