openrag 0.6.0.dev20__tar.gz → 0.6.0.dev22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openrag-0.6.0.dev20/src/openrag.egg-info → openrag-0.6.0.dev22}/PKG-INFO +1 -1
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/pyproject.toml +1 -1
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22/src/openrag.egg-info}/PKG-INFO +1 -1
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/flows_service.py +105 -105
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/cli.py +40 -18
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/managers/container_manager.py +13 -3
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/LICENSE +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/MANIFEST.in +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/README.md +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/setup.cfg +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/agent.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/acl.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/auth.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/chat.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/config.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/connectors.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/docling.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/documents.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/files.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/flows.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/health.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/ingest_preview.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/keys.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/knowledge_filter.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/langflow_files.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/langflow_ingest.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/models.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/nudges.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/oidc.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/provider_health.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/provider_validation.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/router.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/schemas/tasks.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/search.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/settings/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/settings/endpoints.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/settings/helpers.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/settings/langflow_sync.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/settings/models.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/tasks.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/upload.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/users.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/_filter_resolution.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/chat.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/documents.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/knowledge_filters.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/models.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/search.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/api/v1/settings.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/container.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/factory.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/lifespan.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/middleware.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/router_app.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/routes/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/routes/internal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/routes/mcp.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/app/routes/public_v1.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth/ibm_auth.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth/jwt_roles.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth/permission_dependencies.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth/request_identity.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth/user_identity_cache.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/auth_context.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/bootstrap.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/config_manager.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/embedding_constants.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/model_constants.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/paths.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/settings.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/storage_mode.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/config/utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/aws_s3/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/aws_s3/api.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/aws_s3/auth.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/aws_s3/connector.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/aws_s3/models.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/aws_s3/support.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/base.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/connection_manager.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/google_drive/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/google_drive/connector.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/google_drive/oauth.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/google_drive_acl.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/microsoft_graph_acl.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/microsoft_oauth_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/onedrive/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/onedrive/connector.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/onedrive/oauth.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/registry.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/sharepoint/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/sharepoint/connector.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/sharepoint/oauth.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/connectors/sharepoint/utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/base.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/engine.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/migrations_runtime.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/api_key.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/audit_log.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/conversation.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/migration_status.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/permission.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/role.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/role_permission.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/session_ownership.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/user.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/user_preferences.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/user_role.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/models/workspace_config.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/_helpers.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/api_key_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/audit_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/conversation_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/permission_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/preferences_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/role_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/session_ownership_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/user_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/repositories/workspace_config_repo.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/seed.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/db/types.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/dependencies.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/main.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/mcp_http/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/mcp_http/server.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/models/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/models/processors.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/models/tasks.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/models/url.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/openrag.egg-info/SOURCES.txt +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/openrag.egg-info/dependency_links.txt +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/openrag.egg-info/entry_points.txt +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/openrag.egg-info/requires.txt +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/openrag.egg-info/top_level.txt +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/api_key_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/auth_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/chat_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/connector_access_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/connector_oauth_config_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/conversation_persistence_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/default_docs_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/default_role_sync.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/dev_role_toggle.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/dls_principal_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/docling_polling_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/docling_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/document_index_writer.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/document_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/file_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/group_acl_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/ingest_preview_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/knowledge_filter_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/langflow_file_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/langflow_history_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/langflow_ingest_token_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/langflow_mcp_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/models_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/monitor_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/onboarding_reset.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/rbac_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/search_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/session_ownership_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/startup_orchestrator.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/task_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/user_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/services/workspace_config_service.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/session_manager.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/docker-compose.gpu.yml +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/docker-compose.yml +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/components/ollama_embedding.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/components/ollama_llm.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/components/ollama_llm_text.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/components/watsonx_embedding.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/components/watsonx_llm.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/components/watsonx_llm_text.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/ingestion_flow.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/openrag_agent.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/openrag_nudges.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/flows/openrag_url_mcp.json +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/openrag-documents/docling.pdf +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/openrag-documents/ibm_anthropic.pdf +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/_assets/openrag-documents/warmup_ocr.pdf +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/config_fields.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/main.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/managers/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/managers/docling_manager.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/managers/env_manager.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/screens/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/screens/config.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/screens/diagnostics.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/screens/logs.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/screens/monitor.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/screens/welcome.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/utils/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/utils/clipboard.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/utils/platform.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/utils/startup_checks.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/utils/validation.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/utils/version_check.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/command_modal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/diagnostics_notification.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/error_notification.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/factory_reset_warning_modal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/flow_backup_warning_modal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/prune_options_modal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/upgrade_instructions_modal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/version_mismatch_warning_modal.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/tui/widgets/waves.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/acl_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/container_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/docling_client.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/document_processing.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/embedding_fields.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/embeddings.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/encryption.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/env_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/file_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/gpu_detection.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/group_acl.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/hash_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/ingest_preview_flag.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/jwt_keygen.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/jwt_verification.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/langflow_headers.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/langflow_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/logging_config.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/opensearch_delete.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/opensearch_init.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/opensearch_queries.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/opensearch_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/paths.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/provider_health_cache.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/run_mode_utils.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/telemetry/__init__.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/telemetry/category.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/telemetry/client.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/telemetry/message_id.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/url_content_fetcher.py +0 -0
- {openrag-0.6.0.dev20 → openrag-0.6.0.dev22}/src/utils/version_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrag
|
|
3
|
-
Version: 0.6.0.
|
|
3
|
+
Version: 0.6.0.dev22
|
|
4
4
|
Summary: OpenRAG is a comprehensive Retrieval-Augmented Generation platform that enables intelligent document search and AI-powered conversations.
|
|
5
5
|
Classifier: Development Status :: 4 - Beta
|
|
6
6
|
Classifier: Environment :: Console
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "openrag"
|
|
7
|
-
version = "0.6.0.
|
|
7
|
+
version = "0.6.0.dev22"
|
|
8
8
|
description = "OpenRAG is a comprehensive Retrieval-Augmented Generation platform that enables intelligent document search and AI-powered conversations."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrag
|
|
3
|
-
Version: 0.6.0.
|
|
3
|
+
Version: 0.6.0.dev22
|
|
4
4
|
Summary: OpenRAG is a comprehensive Retrieval-Augmented Generation platform that enables intelligent document search and AI-powered conversations.
|
|
5
5
|
Classifier: Development Status :: 4 - Beta
|
|
6
6
|
Classifier: Environment :: Console
|
|
@@ -1099,128 +1099,128 @@ class FlowsService:
|
|
|
1099
1099
|
return label
|
|
1100
1100
|
return None
|
|
1101
1101
|
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1102
|
+
# Update embedding component
|
|
1103
|
+
if not get_openrag_config().knowledge.disable_ingest_with_langflow and (
|
|
1104
|
+
embedding_model or force_embedding_update
|
|
1105
|
+
):
|
|
1106
|
+
# Get all embedding nodes in the flow
|
|
1107
|
+
embedding_nodes = self._find_nodes_in_flow(
|
|
1108
|
+
flow_data, display_name=OPENAI_EMBEDDING_COMPONENT_DISPLAY_NAME
|
|
1109
|
+
)
|
|
1110
|
+
logger.info(
|
|
1111
|
+
f"Found {len(embedding_nodes)} embedding nodes in flow {flow_name} with display name '{OPENAI_EMBEDDING_COMPONENT_DISPLAY_NAME}'"
|
|
1112
|
+
)
|
|
1113
|
+
|
|
1114
|
+
# Count configured embedding-enabled providers
|
|
1115
|
+
config_obj = get_openrag_config()
|
|
1116
|
+
configured_providers = []
|
|
1117
|
+
if config_obj.providers.openai.configured:
|
|
1118
|
+
configured_providers.append("openai")
|
|
1119
|
+
if config_obj.providers.watsonx.configured:
|
|
1120
|
+
configured_providers.append("watsonx")
|
|
1121
|
+
if config_obj.providers.ollama.configured:
|
|
1122
|
+
configured_providers.append("ollama")
|
|
1123
|
+
|
|
1124
|
+
# Ensure current provider is in the list for counting purposes if it's being configured
|
|
1125
|
+
if (
|
|
1126
|
+
provider in ["openai", "watsonx", "ollama"]
|
|
1127
|
+
and provider not in configured_providers
|
|
1105
1128
|
):
|
|
1106
|
-
|
|
1107
|
-
embedding_nodes = self._find_nodes_in_flow(
|
|
1108
|
-
flow_data, display_name=OPENAI_EMBEDDING_COMPONENT_DISPLAY_NAME
|
|
1109
|
-
)
|
|
1110
|
-
logger.info(
|
|
1111
|
-
f"Found {len(embedding_nodes)} embedding nodes in flow {flow_name} with display name '{OPENAI_EMBEDDING_COMPONENT_DISPLAY_NAME}'"
|
|
1112
|
-
)
|
|
1129
|
+
configured_providers.append(provider)
|
|
1113
1130
|
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
if (
|
|
1126
|
-
|
|
1127
|
-
and provider not in configured_providers
|
|
1128
|
-
):
|
|
1129
|
-
configured_providers.append(provider)
|
|
1131
|
+
all_possible = ["openai", "watsonx", "ollama"]
|
|
1132
|
+
configured_providers = [p for p in all_possible if p in configured_providers]
|
|
1133
|
+
provider_count = len(configured_providers)
|
|
1134
|
+
logger.info(
|
|
1135
|
+
f"Configured embedding providers: {configured_providers} (count: {provider_count})"
|
|
1136
|
+
)
|
|
1137
|
+
|
|
1138
|
+
# 1. Check if any node is already this provider - always update those first
|
|
1139
|
+
matched_nodes = []
|
|
1140
|
+
provider_display = self._get_provider_name_display(provider)
|
|
1141
|
+
for node, idx in embedding_nodes:
|
|
1142
|
+
if self._get_node_provider(node) == provider_display:
|
|
1143
|
+
matched_nodes.append((node, idx))
|
|
1130
1144
|
|
|
1131
|
-
|
|
1132
|
-
configured_providers = [p for p in all_possible if p in configured_providers]
|
|
1133
|
-
provider_count = len(configured_providers)
|
|
1145
|
+
if matched_nodes:
|
|
1134
1146
|
logger.info(
|
|
1135
|
-
f"
|
|
1147
|
+
f"Found {len(matched_nodes)} nodes already configured for provider '{provider}'"
|
|
1136
1148
|
)
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1149
|
+
for node, _idx in matched_nodes:
|
|
1150
|
+
node_tasks.append(
|
|
1151
|
+
wrap_node_update(
|
|
1152
|
+
node,
|
|
1153
|
+
provider,
|
|
1154
|
+
embedding_model,
|
|
1155
|
+
f"embedding model: {embedding_model} (updated existing {provider} node)",
|
|
1156
|
+
)
|
|
1157
|
+
)
|
|
1158
|
+
else:
|
|
1159
|
+
# 2. No existing node matched, use slot-based logic
|
|
1160
|
+
try:
|
|
1161
|
+
p_index = configured_providers.index(provider)
|
|
1146
1162
|
logger.info(
|
|
1147
|
-
f"
|
|
1163
|
+
f"Using slot-based logic for provider '{provider}' (p_index: {p_index}, total configured: {provider_count})"
|
|
1148
1164
|
)
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
node,
|
|
1153
|
-
provider,
|
|
1154
|
-
embedding_model,
|
|
1155
|
-
f"embedding model: {embedding_model} (updated existing {provider} node)",
|
|
1156
|
-
)
|
|
1157
|
-
)
|
|
1158
|
-
else:
|
|
1159
|
-
# 2. No existing node matched, use slot-based logic
|
|
1160
|
-
try:
|
|
1161
|
-
p_index = configured_providers.index(provider)
|
|
1165
|
+
|
|
1166
|
+
if provider_count == 1:
|
|
1167
|
+
# Single provider mode: update all available nodes (up to 3)
|
|
1162
1168
|
logger.info(
|
|
1163
|
-
f"
|
|
1169
|
+
f"Single provider mode: updating all available embedding nodes (available: {len(embedding_nodes)})"
|
|
1164
1170
|
)
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1171
|
+
for i in range(min(3, len(embedding_nodes))):
|
|
1172
|
+
node, idx = embedding_nodes[i]
|
|
1173
|
+
node_tasks.append(
|
|
1174
|
+
wrap_node_update(
|
|
1175
|
+
node,
|
|
1176
|
+
provider,
|
|
1177
|
+
embedding_model,
|
|
1178
|
+
f"embedding model: {embedding_model} (set node {i + 1})",
|
|
1179
|
+
)
|
|
1180
|
+
)
|
|
1181
|
+
else:
|
|
1182
|
+
# Multiple providers: each gets one slot based on its list index
|
|
1183
|
+
if p_index < len(embedding_nodes):
|
|
1184
|
+
node, idx = embedding_nodes[p_index]
|
|
1168
1185
|
logger.info(
|
|
1169
|
-
f"
|
|
1186
|
+
f"Multiple provider mode: assigning provider '{provider}' to node slot {p_index} (node {p_index + 1})"
|
|
1170
1187
|
)
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
embedding_model,
|
|
1178
|
-
f"embedding model: {embedding_model} (set node {i + 1})",
|
|
1179
|
-
)
|
|
1188
|
+
node_tasks.append(
|
|
1189
|
+
wrap_node_update(
|
|
1190
|
+
node,
|
|
1191
|
+
provider,
|
|
1192
|
+
embedding_model,
|
|
1193
|
+
f"embedding model: {embedding_model} (set node {p_index + 1})",
|
|
1180
1194
|
)
|
|
1195
|
+
)
|
|
1181
1196
|
else:
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
node_tasks.append(
|
|
1189
|
-
wrap_node_update(
|
|
1190
|
-
node,
|
|
1191
|
-
provider,
|
|
1192
|
-
embedding_model,
|
|
1193
|
-
f"embedding model: {embedding_model} (set node {p_index + 1})",
|
|
1194
|
-
)
|
|
1195
|
-
)
|
|
1196
|
-
else:
|
|
1197
|
-
logger.info(
|
|
1198
|
-
f"Provider index {p_index} exceeds available embedding nodes ({len(embedding_nodes)}) - skipping automatic assignment"
|
|
1199
|
-
)
|
|
1200
|
-
except ValueError:
|
|
1201
|
-
logger.warning(
|
|
1202
|
-
f"Current provider '{provider}' not found in configured providers list: {configured_providers}"
|
|
1203
|
-
)
|
|
1204
|
-
|
|
1205
|
-
# Update LLM component (if exists in this flow)
|
|
1206
|
-
if llm_model or force_llm_update:
|
|
1207
|
-
llm_node, _ = self._find_node_in_flow(
|
|
1208
|
-
flow_data, display_name=OPENAI_LLM_COMPONENT_DISPLAY_NAME
|
|
1209
|
-
)
|
|
1210
|
-
if llm_node:
|
|
1211
|
-
node_tasks.append(
|
|
1212
|
-
wrap_node_update(llm_node, provider, llm_model, f"llm model: {llm_model}")
|
|
1197
|
+
logger.info(
|
|
1198
|
+
f"Provider index {p_index} exceeds available embedding nodes ({len(embedding_nodes)}) - skipping automatic assignment"
|
|
1199
|
+
)
|
|
1200
|
+
except ValueError:
|
|
1201
|
+
logger.warning(
|
|
1202
|
+
f"Current provider '{provider}' not found in configured providers list: {configured_providers}"
|
|
1213
1203
|
)
|
|
1214
1204
|
|
|
1215
|
-
|
|
1216
|
-
|
|
1205
|
+
# Update LLM component (if exists in this flow)
|
|
1206
|
+
if llm_model or force_llm_update:
|
|
1207
|
+
llm_node, _ = self._find_node_in_flow(
|
|
1208
|
+
flow_data, display_name=OPENAI_LLM_COMPONENT_DISPLAY_NAME
|
|
1209
|
+
)
|
|
1210
|
+
if llm_node:
|
|
1211
|
+
node_tasks.append(
|
|
1212
|
+
wrap_node_update(llm_node, provider, llm_model, f"llm model: {llm_model}")
|
|
1217
1213
|
)
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1214
|
+
|
|
1215
|
+
agent_node, _ = self._find_node_in_flow(
|
|
1216
|
+
flow_data, display_name=AGENT_COMPONENT_DISPLAY_NAME
|
|
1217
|
+
)
|
|
1218
|
+
if agent_node:
|
|
1219
|
+
node_tasks.append(
|
|
1220
|
+
wrap_node_update(
|
|
1221
|
+
agent_node, provider, llm_model, f"agent model: {llm_model}"
|
|
1223
1222
|
)
|
|
1223
|
+
)
|
|
1224
1224
|
|
|
1225
1225
|
# Execute all node updates simultaneously
|
|
1226
1226
|
if node_tasks:
|
|
@@ -227,15 +227,18 @@ def _setup_walkthrough(
|
|
|
227
227
|
_, _, already_running = _get_service_states(container_manager, docling_manager)
|
|
228
228
|
if already_running:
|
|
229
229
|
_stop_services_cli(container_manager, docling_manager)
|
|
230
|
-
_start_services_cli(container_manager, docling_manager)
|
|
230
|
+
fully_started = _start_services_cli(container_manager, docling_manager)
|
|
231
231
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
232
|
+
# Only announce the app URL / open the browser once everything is up;
|
|
233
|
+
# _start_services_cli already surfaced a warning for a partial startup.
|
|
234
|
+
if fully_started:
|
|
235
|
+
console.print()
|
|
236
|
+
frontend_url = f"http://localhost:{os.getenv('FRONTEND_PORT', '3000')}"
|
|
237
|
+
console.print(f"[bold green]OpenRAG is running at {frontend_url}[/bold green]")
|
|
238
|
+
try:
|
|
239
|
+
webbrowser.open(frontend_url)
|
|
240
|
+
except Exception:
|
|
241
|
+
pass
|
|
239
242
|
|
|
240
243
|
|
|
241
244
|
def _collect_config(
|
|
@@ -345,11 +348,14 @@ def _start_services_cli(
|
|
|
345
348
|
console.print("Starting OpenRAG services...", style="bold")
|
|
346
349
|
|
|
347
350
|
async def _inner():
|
|
351
|
+
containers_ok = True
|
|
352
|
+
docling_ok = docling_manager.is_running()
|
|
353
|
+
|
|
348
354
|
# Start container services
|
|
349
355
|
if container_manager.is_available():
|
|
350
356
|
async for item in container_manager.start_services():
|
|
351
357
|
# start_services yields (success, message) or (success, message, replace_last)
|
|
352
|
-
|
|
358
|
+
containers_ok = item[0]
|
|
353
359
|
message = item[1]
|
|
354
360
|
replace_last = item[2] if len(item) > 2 else False
|
|
355
361
|
if replace_last:
|
|
@@ -358,24 +364,40 @@ def _start_services_cli(
|
|
|
358
364
|
else:
|
|
359
365
|
console.print(f" {message}")
|
|
360
366
|
|
|
361
|
-
|
|
362
|
-
|
|
367
|
+
if not containers_ok:
|
|
368
|
+
statuses = await container_manager.get_service_status(force_refresh=True)
|
|
369
|
+
containers_ok = bool(statuses) and all(
|
|
370
|
+
s.status == ServiceStatus.RUNNING for s in statuses.values()
|
|
371
|
+
)
|
|
363
372
|
else:
|
|
364
373
|
console.print(" [yellow]No container runtime available[/yellow]")
|
|
374
|
+
containers_ok = False
|
|
365
375
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
if success:
|
|
376
|
+
if not docling_ok:
|
|
377
|
+
docling_ok, message = await docling_manager.start()
|
|
378
|
+
if docling_ok:
|
|
370
379
|
console.print(f" {message}")
|
|
371
380
|
else:
|
|
372
381
|
console.print(f" [yellow]{message}[/yellow]")
|
|
373
382
|
|
|
383
|
+
return containers_ok, docling_ok
|
|
384
|
+
|
|
374
385
|
try:
|
|
375
|
-
asyncio.run(_inner())
|
|
376
|
-
|
|
386
|
+
containers_ok, docling_ok = asyncio.run(_inner())
|
|
387
|
+
|
|
388
|
+
# On full success the menu header already reports "Services are running",
|
|
389
|
+
# so only surface partial/failed startup here to avoid a duplicate message.
|
|
390
|
+
results = {"containers": containers_ok, "docling-serve": docling_ok}
|
|
391
|
+
failed = [name for name, ok in results.items() if not ok]
|
|
392
|
+
if failed:
|
|
393
|
+
console.print(
|
|
394
|
+
f"[yellow]⚠ Startup incomplete: {', '.join(failed)} did not start "
|
|
395
|
+
"(run Show status for details)[/yellow]"
|
|
396
|
+
)
|
|
397
|
+
return not failed
|
|
377
398
|
except Exception as e:
|
|
378
399
|
console.print(f"[red]✗ Error starting services: {e}[/red]")
|
|
400
|
+
return False
|
|
379
401
|
|
|
380
402
|
|
|
381
403
|
def _stop_services_cli(
|
|
@@ -393,7 +415,7 @@ def _stop_services_cli(
|
|
|
393
415
|
console.print(f" {message}")
|
|
394
416
|
# Stop docling
|
|
395
417
|
if docling_manager.is_running():
|
|
396
|
-
|
|
418
|
+
_success, message = await docling_manager.stop()
|
|
397
419
|
console.print(f" {message}")
|
|
398
420
|
|
|
399
421
|
try:
|
|
@@ -644,6 +644,13 @@ class ContainerManager:
|
|
|
644
644
|
|
|
645
645
|
return True, images, ""
|
|
646
646
|
|
|
647
|
+
def _resolve_service_name(self, compose_service: str | None, container_name: str) -> str | None:
|
|
648
|
+
"""Resolve a container to its canonical OpenRAG service name"""
|
|
649
|
+
if compose_service and compose_service in self.expected_services:
|
|
650
|
+
return compose_service
|
|
651
|
+
|
|
652
|
+
return self.container_name_map.get(container_name)
|
|
653
|
+
|
|
647
654
|
def _process_service_json(self, service: dict, services: dict[str, ServiceInfo]) -> None:
|
|
648
655
|
"""Process a service JSON object and add it to the services dict."""
|
|
649
656
|
# Debug print to see the actual service data
|
|
@@ -651,8 +658,8 @@ class ContainerManager:
|
|
|
651
658
|
|
|
652
659
|
container_name = service.get("Name", "")
|
|
653
660
|
|
|
654
|
-
#
|
|
655
|
-
service_name = self.
|
|
661
|
+
# Resolve to canonical service name (compose 'Service' field first, then name map)
|
|
662
|
+
service_name = self._resolve_service_name(service.get("Service"), container_name)
|
|
656
663
|
if not service_name:
|
|
657
664
|
return
|
|
658
665
|
|
|
@@ -802,7 +809,10 @@ class ContainerManager:
|
|
|
802
809
|
continue
|
|
803
810
|
|
|
804
811
|
container_name = names[0]
|
|
805
|
-
|
|
812
|
+
labels = container.get("Labels") or {}
|
|
813
|
+
service_name = self._resolve_service_name(
|
|
814
|
+
labels.get("com.docker.compose.service"), container_name
|
|
815
|
+
)
|
|
806
816
|
if not service_name:
|
|
807
817
|
continue
|
|
808
818
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|