openrag 0.5.0.dev30__tar.gz → 0.5.0.dev31__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.5.0.dev30/src/openrag.egg-info → openrag-0.5.0.dev31}/PKG-INFO +1 -1
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/pyproject.toml +1 -1
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/settings.py +4 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31/src/openrag.egg-info}/PKG-INFO +1 -1
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/screens/monitor.py +85 -93
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/LICENSE +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/MANIFEST.in +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/README.md +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/setup.cfg +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/agent.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/auth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/chat.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/connector_router.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/connectors.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/docling.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/documents.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/flows.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/keys.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/knowledge_filter.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/langflow_files.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/models.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/nudges.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/oidc.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/provider_health.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/provider_validation.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/router.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/search.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/tasks.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/upload.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/chat.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/documents.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/knowledge_filters.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/models.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/search.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/api/v1/settings.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/auth/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/auth/ibm_auth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/auth_context.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/bootstrap.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/config/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/config/config_manager.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/config/embedding_constants.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/config/model_constants.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/config/paths.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/config/settings.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/aws_s3/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/aws_s3/api.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/aws_s3/auth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/aws_s3/connector.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/aws_s3/models.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/aws_s3/support.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/base.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/connection_manager.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/google_drive/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/google_drive/connector.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/google_drive/oauth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/ibm_cos/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/ibm_cos/api.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/ibm_cos/auth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/ibm_cos/connector.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/ibm_cos/models.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/ibm_cos/support.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/langflow_connector_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/onedrive/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/onedrive/connector.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/onedrive/oauth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/sharepoint/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/sharepoint/connector.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/sharepoint/oauth.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/connectors/sharepoint/utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/dependencies.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/main.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/mcp_http/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/mcp_http/server.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/models/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/models/processors.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/models/tasks.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/models/url.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/openrag.egg-info/SOURCES.txt +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/openrag.egg-info/dependency_links.txt +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/openrag.egg-info/entry_points.txt +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/openrag.egg-info/requires.txt +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/openrag.egg-info/top_level.txt +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/api_key_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/auth_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/chat_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/conversation_persistence_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/document_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/flows_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/knowledge_filter_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/langflow_file_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/langflow_history_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/langflow_mcp_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/models_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/monitor_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/search_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/session_ownership_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/task_service.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/session_manager.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/docker-compose.gpu.yml +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/docker-compose.yml +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/ollama_embedding.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/ollama_llm.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/ollama_llm_text.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/watsonx_embedding.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/watsonx_llm.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/watsonx_llm_text.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/ingestion_flow.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/openrag_agent.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/openrag_nudges.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/openrag_url_mcp.json +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/openrag-documents/docling.pdf +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/openrag-documents/ibm_anthropic.pdf +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/openrag-documents/warmup_ocr.pdf +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/cli.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/config_fields.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/main.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/managers/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/managers/container_manager.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/managers/docling_manager.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/managers/env_manager.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/screens/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/screens/config.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/screens/diagnostics.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/screens/logs.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/screens/welcome.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/utils/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/utils/clipboard.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/utils/platform.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/utils/startup_checks.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/utils/validation.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/utils/version_check.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/command_modal.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/diagnostics_notification.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/error_notification.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/factory_reset_warning_modal.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/flow_backup_warning_modal.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/prune_options_modal.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/upgrade_instructions_modal.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/version_mismatch_warning_modal.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/waves.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/acl_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/container_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/docling_client.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/document_processing.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/embedding_fields.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/embeddings.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/encryption.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/env_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/file_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/gpu_detection.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/hash_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/langflow_headers.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/langflow_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/logging_config.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/opensearch_queries.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/opensearch_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/paths.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/run_mode_utils.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/telemetry/__init__.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/telemetry/category.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/telemetry/client.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/telemetry/message_id.py +0 -0
- {openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/utils/version_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrag
|
|
3
|
-
Version: 0.5.0.
|
|
3
|
+
Version: 0.5.0.dev31
|
|
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.5.0.
|
|
7
|
+
version = "0.5.0.dev31"
|
|
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"
|
|
@@ -1940,6 +1940,10 @@ async def rollback_onboarding(
|
|
|
1940
1940
|
current_config.knowledge.embedding_model = ""
|
|
1941
1941
|
current_config.onboarding.openrag_docs_ingested_version = None
|
|
1942
1942
|
current_config.onboarding.openrag_docs_remote_signature = None
|
|
1943
|
+
current_config.onboarding.assistant_message = None
|
|
1944
|
+
current_config.onboarding.selected_nudge = None
|
|
1945
|
+
current_config.onboarding.card_steps = None
|
|
1946
|
+
current_config.onboarding.upload_steps = None
|
|
1943
1947
|
|
|
1944
1948
|
embedding_only = body.embedding_only if body else False
|
|
1945
1949
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrag
|
|
3
|
-
Version: 0.5.0.
|
|
3
|
+
Version: 0.5.0.dev31
|
|
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
|
|
@@ -3,29 +3,34 @@
|
|
|
3
3
|
import asyncio
|
|
4
4
|
import re
|
|
5
5
|
import shutil
|
|
6
|
+
from collections.abc import AsyncIterator
|
|
6
7
|
from pathlib import Path
|
|
7
|
-
from typing import
|
|
8
|
-
|
|
9
|
-
# Define button variant type
|
|
10
|
-
ButtonVariant = Literal["default", "primary", "success", "warning", "error"]
|
|
8
|
+
from typing import Any, Literal, cast
|
|
11
9
|
|
|
10
|
+
from rich.text import Text
|
|
12
11
|
from textual.app import ComposeResult
|
|
13
|
-
from textual.containers import
|
|
12
|
+
from textual.containers import Horizontal, ScrollableContainer
|
|
13
|
+
from textual.coordinate import Coordinate
|
|
14
14
|
from textual.screen import Screen
|
|
15
|
-
from textual.widgets import
|
|
16
|
-
|
|
17
|
-
from
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
from textual.widgets import Button, DataTable, Footer, Static
|
|
16
|
+
|
|
17
|
+
from ..managers.container_manager import (
|
|
18
|
+
ContainerManager,
|
|
19
|
+
ServiceInfo,
|
|
20
|
+
ServiceStatus,
|
|
21
|
+
format_port_conflict_message,
|
|
22
|
+
)
|
|
21
23
|
from ..managers.docling_manager import DoclingManager
|
|
22
24
|
from ..utils.platform import RuntimeType
|
|
23
25
|
from ..widgets.command_modal import CommandOutputModal
|
|
24
|
-
from ..widgets.
|
|
26
|
+
from ..widgets.diagnostics_notification import notify_with_diagnostics
|
|
25
27
|
from ..widgets.factory_reset_warning_modal import FactoryResetWarningModal
|
|
26
|
-
from ..widgets.
|
|
28
|
+
from ..widgets.flow_backup_warning_modal import FlowBackupWarningModal
|
|
27
29
|
from ..widgets.upgrade_instructions_modal import UpgradeInstructionsModal
|
|
28
|
-
from ..widgets.
|
|
30
|
+
from ..widgets.version_mismatch_warning_modal import VersionMismatchWarningModal
|
|
31
|
+
|
|
32
|
+
# Define button variant type
|
|
33
|
+
ButtonVariant = Literal["default", "primary", "success", "warning", "error"]
|
|
29
34
|
|
|
30
35
|
|
|
31
36
|
class MonitorScreen(Screen):
|
|
@@ -55,6 +60,8 @@ class MonitorScreen(Screen):
|
|
|
55
60
|
self.refresh_timer = None
|
|
56
61
|
self.operation_in_progress = False
|
|
57
62
|
self._follow_task = None
|
|
63
|
+
self._follow_service: str | None = None
|
|
64
|
+
self._logs_buffer: list[str] = []
|
|
58
65
|
|
|
59
66
|
# Track which table was last selected for mutual exclusion
|
|
60
67
|
self._last_selected_table = None
|
|
@@ -63,10 +70,9 @@ class MonitorScreen(Screen):
|
|
|
63
70
|
def container_manager(self) -> ContainerManager:
|
|
64
71
|
"""Get the shared container manager from the app."""
|
|
65
72
|
if self._container_manager is None:
|
|
66
|
-
self._container_manager = self.app.container_manager
|
|
73
|
+
self._container_manager = cast(Any, self.app).container_manager
|
|
67
74
|
return self._container_manager
|
|
68
75
|
|
|
69
|
-
|
|
70
76
|
def compose(self) -> ComposeResult:
|
|
71
77
|
"""Create the monitoring screen layout."""
|
|
72
78
|
# Just show the services content directly (no header, no tabs)
|
|
@@ -98,9 +104,7 @@ class MonitorScreen(Screen):
|
|
|
98
104
|
yield Horizontal(id="services-controls", classes="button-row")
|
|
99
105
|
# Create services table with image + digest info
|
|
100
106
|
self.services_table = DataTable(id="services-table")
|
|
101
|
-
self.services_table.add_columns(
|
|
102
|
-
"Service", "Status", "Health", "Ports", "Image", "Digest"
|
|
103
|
-
)
|
|
107
|
+
self.services_table.add_columns("Service", "Status", "Health", "Ports", "Image", "Digest")
|
|
104
108
|
yield self.services_table
|
|
105
109
|
yield Static(" ")
|
|
106
110
|
|
|
@@ -118,12 +122,8 @@ class MonitorScreen(Screen):
|
|
|
118
122
|
status_text = Text()
|
|
119
123
|
|
|
120
124
|
if not self.container_manager.is_available():
|
|
121
|
-
status_text.append(
|
|
122
|
-
|
|
123
|
-
)
|
|
124
|
-
status_text.append(
|
|
125
|
-
"Please install Docker or Podman to continue.\n", style="dim"
|
|
126
|
-
)
|
|
125
|
+
status_text.append("WARNING: No container runtime available\n", style="bold red")
|
|
126
|
+
status_text.append("Please install Docker or Podman to continue.\n", style="dim")
|
|
127
127
|
return status_text
|
|
128
128
|
|
|
129
129
|
runtime_info = self.container_manager.get_runtime_info()
|
|
@@ -150,7 +150,7 @@ class MonitorScreen(Screen):
|
|
|
150
150
|
"""Initialize the screen when mounted."""
|
|
151
151
|
await self._refresh_services()
|
|
152
152
|
# Set up auto-refresh every 5 seconds
|
|
153
|
-
self.refresh_timer = self.set_interval(5.0, self.
|
|
153
|
+
self.refresh_timer = self.set_interval(5.0, self._auto_refresh_services)
|
|
154
154
|
|
|
155
155
|
self._focus_services_table()
|
|
156
156
|
|
|
@@ -186,9 +186,9 @@ class MonitorScreen(Screen):
|
|
|
186
186
|
images_set.add(img)
|
|
187
187
|
# Ensure compose-declared images are also shown (e.g., langflow when stopped)
|
|
188
188
|
try:
|
|
189
|
-
for
|
|
190
|
-
|
|
191
|
-
): # best-effort, no YAML dep
|
|
189
|
+
for (
|
|
190
|
+
img
|
|
191
|
+
) in await self.container_manager._parse_compose_images(): # best-effort, no YAML dep
|
|
192
192
|
if img:
|
|
193
193
|
images_set.add(img)
|
|
194
194
|
except Exception:
|
|
@@ -205,7 +205,7 @@ class MonitorScreen(Screen):
|
|
|
205
205
|
self.images_table.clear()
|
|
206
206
|
|
|
207
207
|
# Add container service rows
|
|
208
|
-
for
|
|
208
|
+
for _service_name, service_info in services.items():
|
|
209
209
|
status_style = self._get_status_style(service_info.status)
|
|
210
210
|
|
|
211
211
|
self.services_table.add_row(
|
|
@@ -238,9 +238,7 @@ class MonitorScreen(Screen):
|
|
|
238
238
|
if (docling_running or docling_starting)
|
|
239
239
|
else "N/A"
|
|
240
240
|
)
|
|
241
|
-
docling_pid = (
|
|
242
|
-
str(docling_status.get("pid")) if docling_status.get("pid") else "N/A"
|
|
243
|
-
)
|
|
241
|
+
docling_pid = str(docling_status.get("pid")) if docling_status.get("pid") else "N/A"
|
|
244
242
|
|
|
245
243
|
if self.docling_table:
|
|
246
244
|
self.docling_table.add_row(
|
|
@@ -275,7 +273,7 @@ class MonitorScreen(Screen):
|
|
|
275
273
|
}
|
|
276
274
|
return status_styles.get(status, "white")
|
|
277
275
|
|
|
278
|
-
async def
|
|
276
|
+
async def _auto_refresh_services(self) -> None:
|
|
279
277
|
"""Auto-refresh services if not in operation."""
|
|
280
278
|
if not self.operation_in_progress:
|
|
281
279
|
await self._refresh_services()
|
|
@@ -283,7 +281,6 @@ class MonitorScreen(Screen):
|
|
|
283
281
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
|
284
282
|
"""Handle button presses."""
|
|
285
283
|
button_id = event.button.id or ""
|
|
286
|
-
button_label = event.button.label or ""
|
|
287
284
|
|
|
288
285
|
# Use button ID prefixes to determine action, ignoring any random suffix
|
|
289
286
|
if button_id.startswith("start-btn"):
|
|
@@ -328,7 +325,7 @@ class MonitorScreen(Screen):
|
|
|
328
325
|
self.run_worker(self._show_logs(service_name))
|
|
329
326
|
self._start_follow(service_name)
|
|
330
327
|
|
|
331
|
-
async def _start_services(self, cpu_mode:
|
|
328
|
+
async def _start_services(self, cpu_mode: bool | None = None) -> None:
|
|
332
329
|
"""Start services with progress updates."""
|
|
333
330
|
self.operation_in_progress = True
|
|
334
331
|
try:
|
|
@@ -365,6 +362,7 @@ class MonitorScreen(Screen):
|
|
|
365
362
|
# This ensures docker compose reads the correct version
|
|
366
363
|
try:
|
|
367
364
|
from ..managers.env_manager import EnvManager
|
|
365
|
+
|
|
368
366
|
env_manager = EnvManager()
|
|
369
367
|
env_manager.ensure_openrag_version()
|
|
370
368
|
# Small delay to ensure .env file is written and flushed
|
|
@@ -433,7 +431,7 @@ class MonitorScreen(Screen):
|
|
|
433
431
|
# Show "this is the latest version" toast
|
|
434
432
|
self.notify(
|
|
435
433
|
f"You are running the latest version ({current_version}).",
|
|
436
|
-
severity="
|
|
434
|
+
severity="information",
|
|
437
435
|
timeout=5,
|
|
438
436
|
)
|
|
439
437
|
else:
|
|
@@ -442,9 +440,7 @@ class MonitorScreen(Screen):
|
|
|
442
440
|
UpgradeInstructionsModal(current_version, latest_version)
|
|
443
441
|
)
|
|
444
442
|
except Exception as e:
|
|
445
|
-
self.notify(
|
|
446
|
-
f"Error checking version: {str(e)}", severity="error", timeout=10
|
|
447
|
-
)
|
|
443
|
+
self.notify(f"Error checking version: {str(e)}", severity="error", timeout=10)
|
|
448
444
|
finally:
|
|
449
445
|
self.operation_in_progress = False
|
|
450
446
|
|
|
@@ -453,9 +449,7 @@ class MonitorScreen(Screen):
|
|
|
453
449
|
self.operation_in_progress = True
|
|
454
450
|
try:
|
|
455
451
|
# Show factory reset warning modal first
|
|
456
|
-
should_continue = await self.app.push_screen_wait(
|
|
457
|
-
FactoryResetWarningModal()
|
|
458
|
-
)
|
|
452
|
+
should_continue = await self.app.push_screen_wait(FactoryResetWarningModal())
|
|
459
453
|
if not should_continue:
|
|
460
454
|
self.notify("Factory reset cancelled", severity="information")
|
|
461
455
|
return
|
|
@@ -475,6 +469,7 @@ class MonitorScreen(Screen):
|
|
|
475
469
|
try:
|
|
476
470
|
# Get paths from env config
|
|
477
471
|
from ..managers.env_manager import EnvManager
|
|
472
|
+
|
|
478
473
|
env_manager = EnvManager()
|
|
479
474
|
env_manager.load_existing_env()
|
|
480
475
|
|
|
@@ -487,7 +482,9 @@ class MonitorScreen(Screen):
|
|
|
487
482
|
|
|
488
483
|
if config_path.exists():
|
|
489
484
|
# Use container to handle files owned by container user
|
|
490
|
-
success, msg = await self.container_manager.clear_directory_with_container(
|
|
485
|
+
success, msg = await self.container_manager.clear_directory_with_container(
|
|
486
|
+
config_path
|
|
487
|
+
)
|
|
491
488
|
if not success:
|
|
492
489
|
# Fallback to regular rmtree if container method fails
|
|
493
490
|
shutil.rmtree(config_path)
|
|
@@ -497,18 +494,32 @@ class MonitorScreen(Screen):
|
|
|
497
494
|
# Also delete legacy TUI config folder if it exists (~/.openrag/tui/config/)
|
|
498
495
|
tui_config_path = expand_path(env_manager.config.openrag_tui_config_path_legacy)
|
|
499
496
|
if tui_config_path.exists():
|
|
500
|
-
success, msg = await self.container_manager.clear_directory_with_container(
|
|
497
|
+
success, msg = await self.container_manager.clear_directory_with_container(
|
|
498
|
+
tui_config_path
|
|
499
|
+
)
|
|
501
500
|
if not success:
|
|
502
501
|
# Fallback to regular rmtree if container method fails
|
|
503
502
|
shutil.rmtree(tui_config_path)
|
|
504
503
|
# Recreate empty config directory
|
|
505
504
|
tui_config_path.mkdir(parents=True, exist_ok=True)
|
|
506
505
|
|
|
506
|
+
# Clear backend data directory (database, session ownership, conversations, oauth tokens)
|
|
507
|
+
data_path = expand_path(env_manager.config.openrag_data_path)
|
|
508
|
+
if data_path.exists():
|
|
509
|
+
success, msg = await self.container_manager.clear_directory_with_container(
|
|
510
|
+
data_path
|
|
511
|
+
)
|
|
512
|
+
if not success:
|
|
513
|
+
shutil.rmtree(data_path)
|
|
514
|
+
data_path.mkdir(parents=True, exist_ok=True)
|
|
515
|
+
|
|
507
516
|
# Delete flow backups only if user chose to (and they actually exist)
|
|
508
517
|
if self._check_flow_backups():
|
|
509
518
|
if delete_backups:
|
|
510
519
|
# Use container to handle files owned by container user
|
|
511
|
-
success, msg = await self.container_manager.clear_directory_with_container(
|
|
520
|
+
success, msg = await self.container_manager.clear_directory_with_container(
|
|
521
|
+
flows_backup_path
|
|
522
|
+
)
|
|
512
523
|
if not success:
|
|
513
524
|
# Fallback to regular rmtree if container method fails
|
|
514
525
|
shutil.rmtree(flows_backup_path)
|
|
@@ -516,8 +527,10 @@ class MonitorScreen(Screen):
|
|
|
516
527
|
flows_backup_path.mkdir(parents=True, exist_ok=True)
|
|
517
528
|
self.notify("Flow backups deleted", severity="information")
|
|
518
529
|
else:
|
|
519
|
-
self.notify(
|
|
520
|
-
|
|
530
|
+
self.notify(
|
|
531
|
+
f"Flow backups preserved in {flows_backup_path}", severity="information"
|
|
532
|
+
)
|
|
533
|
+
|
|
521
534
|
except Exception as e:
|
|
522
535
|
self.notify(
|
|
523
536
|
f"Error clearing config: {str(e)}",
|
|
@@ -548,12 +561,14 @@ class MonitorScreen(Screen):
|
|
|
548
561
|
|
|
549
562
|
# Get data paths from env config
|
|
550
563
|
from ..managers.env_manager import EnvManager
|
|
564
|
+
|
|
551
565
|
env_manager = EnvManager()
|
|
552
566
|
env_manager.load_existing_env()
|
|
553
567
|
|
|
554
568
|
# Delete langflow-data directory (mirrors Makefile factory-reset behaviour)
|
|
555
569
|
yield False, "Clearing Langflow data..."
|
|
556
570
|
from tui.main import _resolve_langflow_data_path
|
|
571
|
+
|
|
557
572
|
langflow_data_path = _resolve_langflow_data_path(Path.home() / ".openrag").resolve()
|
|
558
573
|
home = Path.home().resolve()
|
|
559
574
|
if not str(langflow_data_path).startswith(str(home) + "/"):
|
|
@@ -575,13 +590,13 @@ class MonitorScreen(Screen):
|
|
|
575
590
|
try:
|
|
576
591
|
# Show prune options modal
|
|
577
592
|
from tui.widgets.prune_options_modal import PruneOptionsModal
|
|
578
|
-
|
|
593
|
+
|
|
579
594
|
prune_choice = await self.app.push_screen_wait(PruneOptionsModal())
|
|
580
|
-
|
|
595
|
+
|
|
581
596
|
if prune_choice == "cancel":
|
|
582
597
|
self.notify("Prune cancelled", severity="information")
|
|
583
598
|
return
|
|
584
|
-
|
|
599
|
+
|
|
585
600
|
# Choose the appropriate pruning method based on user choice
|
|
586
601
|
if prune_choice == "all":
|
|
587
602
|
# Stop services and prune all images
|
|
@@ -591,7 +606,7 @@ class MonitorScreen(Screen):
|
|
|
591
606
|
# Prune only unused images (default)
|
|
592
607
|
command_generator = self.container_manager.prune_old_images()
|
|
593
608
|
modal_title = "Pruning Unused Images"
|
|
594
|
-
|
|
609
|
+
|
|
595
610
|
# Show command output in modal dialog
|
|
596
611
|
modal = CommandOutputModal(
|
|
597
612
|
modal_title,
|
|
@@ -605,12 +620,15 @@ class MonitorScreen(Screen):
|
|
|
605
620
|
def _check_flow_backups(self) -> bool:
|
|
606
621
|
"""Check if there are any flow backups in flows/backup directory."""
|
|
607
622
|
from pathlib import Path
|
|
623
|
+
|
|
608
624
|
from ..managers.env_manager import EnvManager
|
|
609
625
|
|
|
610
626
|
# Get flows path from env config
|
|
611
627
|
env_manager = EnvManager()
|
|
612
628
|
env_manager.load_existing_env()
|
|
613
|
-
flows_path = Path(
|
|
629
|
+
flows_path = Path(
|
|
630
|
+
env_manager.config.openrag_flows_path.replace("$HOME", str(Path.home()))
|
|
631
|
+
).expanduser()
|
|
614
632
|
backup_dir = flows_path / "backup"
|
|
615
633
|
if not backup_dir.exists():
|
|
616
634
|
return False
|
|
@@ -651,9 +669,7 @@ class MonitorScreen(Screen):
|
|
|
651
669
|
if success:
|
|
652
670
|
self.notify(message, severity="information")
|
|
653
671
|
else:
|
|
654
|
-
self.notify(
|
|
655
|
-
f"Failed to start docling serve: {message}", severity="error"
|
|
656
|
-
)
|
|
672
|
+
self.notify(f"Failed to start docling serve: {message}", severity="error")
|
|
657
673
|
# Refresh again to show final status (running or stopped)
|
|
658
674
|
await self._refresh_services()
|
|
659
675
|
except Exception as e:
|
|
@@ -671,9 +687,7 @@ class MonitorScreen(Screen):
|
|
|
671
687
|
if success:
|
|
672
688
|
self.notify(message, severity="information")
|
|
673
689
|
else:
|
|
674
|
-
self.notify(
|
|
675
|
-
f"Failed to stop docling serve: {message}", severity="error"
|
|
676
|
-
)
|
|
690
|
+
self.notify(f"Failed to stop docling serve: {message}", severity="error")
|
|
677
691
|
# Refresh the services table to show updated status
|
|
678
692
|
await self._refresh_services()
|
|
679
693
|
except Exception as e:
|
|
@@ -689,9 +703,7 @@ class MonitorScreen(Screen):
|
|
|
689
703
|
if success:
|
|
690
704
|
self.notify(message, severity="information")
|
|
691
705
|
else:
|
|
692
|
-
self.notify(
|
|
693
|
-
f"Failed to restart docling serve: {message}", severity="error"
|
|
694
|
-
)
|
|
706
|
+
self.notify(f"Failed to restart docling serve: {message}", severity="error")
|
|
695
707
|
# Refresh the services table to show updated status
|
|
696
708
|
await self._refresh_services()
|
|
697
709
|
except Exception as e:
|
|
@@ -780,9 +792,7 @@ class MonitorScreen(Screen):
|
|
|
780
792
|
except Exception:
|
|
781
793
|
pass
|
|
782
794
|
except Exception as e:
|
|
783
|
-
notify_with_diagnostics(
|
|
784
|
-
self.app, f"Error following logs: {e}", severity="error"
|
|
785
|
-
)
|
|
795
|
+
notify_with_diagnostics(self.app, f"Error following logs: {e}", severity="error")
|
|
786
796
|
|
|
787
797
|
def action_refresh(self) -> None:
|
|
788
798
|
"""Refresh services manually."""
|
|
@@ -861,9 +871,7 @@ class MonitorScreen(Screen):
|
|
|
861
871
|
self._update_mode_row()
|
|
862
872
|
self.action_refresh()
|
|
863
873
|
except Exception as e:
|
|
864
|
-
notify_with_diagnostics(
|
|
865
|
-
self.app, f"Failed to toggle mode: {e}", severity="error"
|
|
866
|
-
)
|
|
874
|
+
notify_with_diagnostics(self.app, f"Failed to toggle mode: {e}", severity="error")
|
|
867
875
|
|
|
868
876
|
def _update_controls(self, services: list[ServiceInfo]) -> None:
|
|
869
877
|
"""Update control buttons based on running state."""
|
|
@@ -886,31 +894,19 @@ class MonitorScreen(Screen):
|
|
|
886
894
|
# Add appropriate buttons based on service state
|
|
887
895
|
if any_running:
|
|
888
896
|
# When services are running, show stop and restart
|
|
889
|
-
controls.mount(
|
|
890
|
-
|
|
891
|
-
)
|
|
892
|
-
controls.mount(
|
|
893
|
-
Button("Restart", variant="primary", id=f"restart-btn{suffix}")
|
|
894
|
-
)
|
|
897
|
+
controls.mount(Button("Stop Services", variant="error", id=f"stop-btn{suffix}"))
|
|
898
|
+
controls.mount(Button("Restart", variant="primary", id=f"restart-btn{suffix}"))
|
|
895
899
|
else:
|
|
896
900
|
# When services are not running, show start
|
|
897
|
-
controls.mount(
|
|
898
|
-
Button("Start Services", variant="success", id=f"start-btn{suffix}")
|
|
899
|
-
)
|
|
901
|
+
controls.mount(Button("Start Services", variant="success", id=f"start-btn{suffix}"))
|
|
900
902
|
|
|
901
903
|
# Always show upgrade, prune, and reset buttons
|
|
902
|
-
controls.mount(
|
|
903
|
-
|
|
904
|
-
)
|
|
905
|
-
controls.mount(
|
|
906
|
-
Button("Prune Images", variant="default", id=f"prune-btn{suffix}")
|
|
907
|
-
)
|
|
904
|
+
controls.mount(Button("Upgrade", variant="warning", id=f"upgrade-btn{suffix}"))
|
|
905
|
+
controls.mount(Button("Prune Images", variant="default", id=f"prune-btn{suffix}"))
|
|
908
906
|
controls.mount(Button("Factory Reset", variant="error", id=f"reset-btn{suffix}"))
|
|
909
907
|
|
|
910
908
|
except Exception as e:
|
|
911
|
-
notify_with_diagnostics(
|
|
912
|
-
self.app, f"Error updating controls: {e}", severity="error"
|
|
913
|
-
)
|
|
909
|
+
notify_with_diagnostics(self.app, f"Error updating controls: {e}", severity="error")
|
|
914
910
|
|
|
915
911
|
# Update docling controls separately
|
|
916
912
|
self._update_docling_controls()
|
|
@@ -940,9 +936,7 @@ class MonitorScreen(Screen):
|
|
|
940
936
|
Button("Stop", variant="error", id=f"docling-stop-btn{suffix}")
|
|
941
937
|
)
|
|
942
938
|
docling_controls.mount(
|
|
943
|
-
Button(
|
|
944
|
-
"Restart", variant="primary", id=f"docling-restart-btn{suffix}"
|
|
945
|
-
)
|
|
939
|
+
Button("Restart", variant="primary", id=f"docling-restart-btn{suffix}")
|
|
946
940
|
)
|
|
947
941
|
elif docling_starting:
|
|
948
942
|
# Show disabled button or no button when starting
|
|
@@ -1102,7 +1096,7 @@ class MonitorScreen(Screen):
|
|
|
1102
1096
|
return
|
|
1103
1097
|
|
|
1104
1098
|
try:
|
|
1105
|
-
table.cursor_coordinate = (row, 0)
|
|
1099
|
+
table.cursor_coordinate = Coordinate(row, 0)
|
|
1106
1100
|
except Exception:
|
|
1107
1101
|
move_cursor = getattr(table, "move_cursor", None)
|
|
1108
1102
|
if callable(move_cursor):
|
|
@@ -1111,9 +1105,7 @@ class MonitorScreen(Screen):
|
|
|
1111
1105
|
except Exception:
|
|
1112
1106
|
pass
|
|
1113
1107
|
|
|
1114
|
-
def _focus_services_table(
|
|
1115
|
-
self, row: str | None = None, set_last: bool = True
|
|
1116
|
-
) -> None:
|
|
1108
|
+
def _focus_services_table(self, row: str | None = None, set_last: bool = True) -> None:
|
|
1117
1109
|
"""Focus the services table and update selection."""
|
|
1118
1110
|
if not self.services_table:
|
|
1119
1111
|
return
|
|
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
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/services/conversation_persistence_service.py
RENAMED
|
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
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/ollama_embedding.json
RENAMED
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/ollama_llm.json
RENAMED
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/ollama_llm_text.json
RENAMED
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/watsonx_embedding.json
RENAMED
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/watsonx_llm.json
RENAMED
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/flows/components/watsonx_llm_text.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/openrag-documents/ibm_anthropic.pdf
RENAMED
|
File without changes
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/_assets/openrag-documents/warmup_ocr.pdf
RENAMED
|
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
|
{openrag-0.5.0.dev30 → openrag-0.5.0.dev31}/src/tui/widgets/version_mismatch_warning_modal.py
RENAMED
|
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
|