openrag 0.5.1.dev1__tar.gz → 0.5.1.dev2__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.1.dev1/src/openrag.egg-info → openrag-0.5.1.dev2}/PKG-INFO +1 -1
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/pyproject.toml +1 -1
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/agent.py +10 -2
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/connectors.py +2 -2
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/settings.py +54 -30
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2/src/openrag.egg-info}/PKG-INFO +1 -1
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/api_key_service.py +7 -2
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/search_service.py +25 -2
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/docker-compose.yml +5 -5
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/LICENSE +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/MANIFEST.in +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/README.md +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/setup.cfg +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/auth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/chat.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/docling.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/documents.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/flows.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/keys.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/knowledge_filter.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/langflow_files.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/models.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/nudges.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/oidc.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/provider_health.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/provider_validation.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/router.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/search.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/tasks.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/upload.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/chat.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/documents.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/knowledge_filters.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/models.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/search.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/api/v1/settings.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/auth/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/auth/ibm_auth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/auth_context.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/bootstrap.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/config/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/config/config_manager.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/config/embedding_constants.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/config/model_constants.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/config/paths.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/config/settings.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/aws_s3/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/aws_s3/api.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/aws_s3/auth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/aws_s3/connector.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/aws_s3/models.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/aws_s3/support.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/base.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/connection_manager.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/google_drive/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/google_drive/connector.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/google_drive/oauth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/ibm_cos/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/ibm_cos/api.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/ibm_cos/auth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/ibm_cos/connector.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/ibm_cos/models.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/ibm_cos/support.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/onedrive/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/onedrive/connector.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/onedrive/oauth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/sharepoint/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/sharepoint/connector.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/sharepoint/oauth.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/connectors/sharepoint/utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/dependencies.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/main.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/mcp_http/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/mcp_http/server.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/models/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/models/processors.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/models/tasks.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/models/url.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/openrag.egg-info/SOURCES.txt +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/openrag.egg-info/dependency_links.txt +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/openrag.egg-info/entry_points.txt +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/openrag.egg-info/requires.txt +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/openrag.egg-info/top_level.txt +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/auth_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/chat_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/conversation_persistence_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/document_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/flows_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/knowledge_filter_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/langflow_file_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/langflow_history_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/langflow_mcp_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/models_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/monitor_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/session_ownership_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/services/task_service.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/session_manager.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/docker-compose.gpu.yml +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/ollama_embedding.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/ollama_llm.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/ollama_llm_text.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/watsonx_embedding.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/watsonx_llm.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/watsonx_llm_text.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/ingestion_flow.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/openrag_agent.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/openrag_nudges.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/openrag_url_mcp.json +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/openrag-documents/docling.pdf +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/openrag-documents/ibm_anthropic.pdf +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/openrag-documents/warmup_ocr.pdf +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/cli.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/config_fields.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/main.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/managers/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/managers/container_manager.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/managers/docling_manager.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/managers/env_manager.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/screens/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/screens/config.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/screens/diagnostics.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/screens/logs.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/screens/monitor.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/screens/welcome.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/utils/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/utils/clipboard.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/utils/platform.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/utils/startup_checks.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/utils/validation.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/utils/version_check.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/command_modal.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/diagnostics_notification.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/error_notification.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/factory_reset_warning_modal.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/flow_backup_warning_modal.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/prune_options_modal.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/upgrade_instructions_modal.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/version_mismatch_warning_modal.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/widgets/waves.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/acl_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/container_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/docling_client.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/document_processing.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/embedding_fields.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/embeddings.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/encryption.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/env_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/file_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/gpu_detection.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/hash_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/langflow_headers.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/langflow_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/logging_config.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/opensearch_delete.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/opensearch_queries.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/opensearch_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/paths.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/run_mode_utils.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/telemetry/__init__.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/telemetry/category.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/telemetry/client.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/utils/telemetry/message_id.py +0 -0
- {openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/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.1.
|
|
3
|
+
Version: 0.5.1.dev2
|
|
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.1.
|
|
7
|
+
version = "0.5.1.dev2"
|
|
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"
|
|
@@ -171,8 +171,16 @@ async def async_response_stream(
|
|
|
171
171
|
try:
|
|
172
172
|
# Try to serialize the chunk object
|
|
173
173
|
if hasattr(chunk, "model_dump"):
|
|
174
|
-
# Pydantic model
|
|
175
|
-
|
|
174
|
+
# Pydantic model. Exclude "delta" from serialization since Langflow's
|
|
175
|
+
# /response SSE wraps text deltas as {"content": "..."} for every provider but
|
|
176
|
+
# openai SDK's event models declare/expect delta to be str so model_dump() will
|
|
177
|
+
# emit noisy logs (PydanticSerializationUnexpectedValue) for every chunk. Basically
|
|
178
|
+
# just reattach the raw (unvalidated) value afterwards to preserve same shape.
|
|
179
|
+
# TODO: replace this with just chunk.model_dump() if langflow's /response SSE matches openai's
|
|
180
|
+
# SDK's delta: str schema
|
|
181
|
+
chunk_data = chunk.model_dump(exclude={"delta"})
|
|
182
|
+
if hasattr(chunk, "delta"):
|
|
183
|
+
chunk_data["delta"] = chunk.delta
|
|
176
184
|
elif hasattr(chunk, "__dict__"):
|
|
177
185
|
chunk_data = chunk.__dict__
|
|
178
186
|
else:
|
|
@@ -734,8 +734,8 @@ async def connector_sync(
|
|
|
734
734
|
{
|
|
735
735
|
"task_ids": task_ids,
|
|
736
736
|
"status": "sync_started",
|
|
737
|
-
"message": f"Started syncing files from
|
|
738
|
-
"connections_synced": len(
|
|
737
|
+
"message": f"Started syncing files from 1 {connector_type} connection",
|
|
738
|
+
"connections_synced": len(task_ids),
|
|
739
739
|
},
|
|
740
740
|
status_code=201,
|
|
741
741
|
)
|
|
@@ -391,16 +391,27 @@ async def get_settings(
|
|
|
391
391
|
environment=ENVIRONMENT or None,
|
|
392
392
|
)
|
|
393
393
|
|
|
394
|
-
except Exception
|
|
395
|
-
logger.
|
|
394
|
+
except Exception:
|
|
395
|
+
logger.exception("Failed to retrieve settings")
|
|
396
396
|
return JSONResponse(
|
|
397
|
-
{"error":
|
|
397
|
+
{"error": "Failed to retrieve settings"}, status_code=500
|
|
398
398
|
)
|
|
399
399
|
|
|
400
400
|
|
|
401
|
+
# Provider names in priority order. LLM supports anthropic; embeddings do not.
|
|
402
|
+
_LLM_PROVIDER_NAMES = ("openai", "anthropic", "watsonx", "ollama")
|
|
403
|
+
_EMBEDDING_PROVIDER_NAMES = ("openai", "watsonx", "ollama")
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
def _configured_provider_names(config, provider_names) -> list:
|
|
407
|
+
"""Return the provider names from `provider_names` marked configured in the OpenRAG config."""
|
|
408
|
+
providers = config.providers
|
|
409
|
+
return [name for name in provider_names if getattr(providers, name).configured]
|
|
410
|
+
|
|
411
|
+
|
|
401
412
|
def _first_configured_llm_provider(config, excluding: str) -> str:
|
|
402
413
|
"""Return the first configured LLM provider that isn't `excluding`."""
|
|
403
|
-
for p in
|
|
414
|
+
for p in _LLM_PROVIDER_NAMES:
|
|
404
415
|
if p != excluding and getattr(config.providers, p).configured:
|
|
405
416
|
return p
|
|
406
417
|
return "openai"
|
|
@@ -408,7 +419,7 @@ def _first_configured_llm_provider(config, excluding: str) -> str:
|
|
|
408
419
|
|
|
409
420
|
def _first_configured_embedding_provider(config, excluding: str) -> str:
|
|
410
421
|
"""Return the first configured embedding provider (openai/watsonx/ollama) that isn't `excluding`."""
|
|
411
|
-
for p in
|
|
422
|
+
for p in _EMBEDDING_PROVIDER_NAMES:
|
|
412
423
|
if p != excluding and getattr(config.providers, p).configured:
|
|
413
424
|
return p
|
|
414
425
|
return "openai"
|
|
@@ -1003,14 +1014,14 @@ async def update_settings(
|
|
|
1003
1014
|
)
|
|
1004
1015
|
return SettingsUpdateResponse(message="Configuration updated successfully")
|
|
1005
1016
|
|
|
1006
|
-
except Exception
|
|
1007
|
-
logger.
|
|
1017
|
+
except Exception:
|
|
1018
|
+
logger.exception("Failed to update settings")
|
|
1008
1019
|
await TelemetryClient.send_event(
|
|
1009
1020
|
Category.SETTINGS_OPERATIONS,
|
|
1010
1021
|
MessageId.ORB_SETTINGS_UPDATE_FAILED
|
|
1011
1022
|
)
|
|
1012
1023
|
return JSONResponse(
|
|
1013
|
-
{"error":
|
|
1024
|
+
{"error": "Failed to update settings"}, status_code=500
|
|
1014
1025
|
)
|
|
1015
1026
|
|
|
1016
1027
|
|
|
@@ -1272,15 +1283,10 @@ async def onboarding(
|
|
|
1272
1283
|
admin_username = user.user_id if IBM_AUTH_ENABLED and user else None
|
|
1273
1284
|
await init_index(opensearch_client, admin_username=admin_username)
|
|
1274
1285
|
logger.info("OpenSearch index initialization completed successfully")
|
|
1275
|
-
except Exception
|
|
1276
|
-
logger.
|
|
1277
|
-
"Failed to initialize OpenSearch index after onboarding",
|
|
1278
|
-
error=str(e),
|
|
1279
|
-
)
|
|
1286
|
+
except Exception:
|
|
1287
|
+
logger.exception("Failed to initialize OpenSearch index after onboarding")
|
|
1280
1288
|
return JSONResponse(
|
|
1281
|
-
{
|
|
1282
|
-
"error": str(e),
|
|
1283
|
-
},
|
|
1289
|
+
{"Failed to initialize OpenSearch index after onboarding"},
|
|
1284
1290
|
status_code=500,
|
|
1285
1291
|
)
|
|
1286
1292
|
|
|
@@ -1643,14 +1649,31 @@ async def _update_langflow_model_values(config, flows_service, llm_model=None, l
|
|
|
1643
1649
|
)
|
|
1644
1650
|
|
|
1645
1651
|
if not (embedding_model or embedding_provider or llm_model or llm_provider):
|
|
1652
|
+
# 1. Update ALL configured LLM providers.
|
|
1653
|
+
# Regression fix (#1587): the no-argument fallback used by
|
|
1654
|
+
# reapply_all_settings previously only reapplied embedding providers,
|
|
1655
|
+
# leaving LLM model values unset whenever flows were reset.
|
|
1656
|
+
llm_providers = _configured_provider_names(config, _LLM_PROVIDER_NAMES)
|
|
1657
|
+
|
|
1658
|
+
current_llm_provider = config.agent.llm_provider.lower()
|
|
1659
|
+
for provider in llm_providers:
|
|
1660
|
+
# Use configured model for current provider, or None (first available) for others
|
|
1661
|
+
provider_llm_model = (
|
|
1662
|
+
config.agent.llm_model
|
|
1663
|
+
if provider == current_llm_provider
|
|
1664
|
+
else None
|
|
1665
|
+
)
|
|
1666
|
+
await flows_service.change_langflow_model_value(
|
|
1667
|
+
provider,
|
|
1668
|
+
llm_model=provider_llm_model,
|
|
1669
|
+
force_llm_update=True
|
|
1670
|
+
)
|
|
1671
|
+
logger.info(
|
|
1672
|
+
f"Successfully updated Langflow flows for LLM provider {provider}"
|
|
1673
|
+
)
|
|
1674
|
+
|
|
1646
1675
|
# 2. Update ALL configured embedding providers
|
|
1647
|
-
embedding_providers =
|
|
1648
|
-
if config.providers.openai.configured:
|
|
1649
|
-
embedding_providers.append("openai")
|
|
1650
|
-
if config.providers.watsonx.configured:
|
|
1651
|
-
embedding_providers.append("watsonx")
|
|
1652
|
-
if config.providers.ollama.configured:
|
|
1653
|
-
embedding_providers.append("ollama")
|
|
1676
|
+
embedding_providers = _configured_provider_names(config, _EMBEDDING_PROVIDER_NAMES)
|
|
1654
1677
|
|
|
1655
1678
|
current_embedding_provider = config.knowledge.embedding_provider.lower()
|
|
1656
1679
|
for provider in embedding_providers:
|
|
@@ -1996,10 +2019,10 @@ async def rollback_onboarding(
|
|
|
1996
2019
|
deleted_conversations=deleted_conversations_count
|
|
1997
2020
|
)
|
|
1998
2021
|
|
|
1999
|
-
except Exception
|
|
2000
|
-
logger.error("Failed to rollback onboarding configuration"
|
|
2022
|
+
except Exception:
|
|
2023
|
+
logger.error("Failed to rollback onboarding configuration")
|
|
2001
2024
|
return JSONResponse(
|
|
2002
|
-
{"error":
|
|
2025
|
+
{"error": "Failed to rollback onboarding"}, status_code=500
|
|
2003
2026
|
)
|
|
2004
2027
|
|
|
2005
2028
|
|
|
@@ -2067,11 +2090,12 @@ async def update_docling_preset(
|
|
|
2067
2090
|
settings=settings_toggles,
|
|
2068
2091
|
preset_config=preset_config,
|
|
2069
2092
|
)
|
|
2070
|
-
|
|
2093
|
+
except HTTPException:
|
|
2094
|
+
# Preserve intended HTTP status codes (e.g. 400 for an invalid preset)
|
|
2095
|
+
raise
|
|
2071
2096
|
except Exception as e:
|
|
2072
2097
|
logger.error("Failed to update docling settings", error=str(e))
|
|
2073
|
-
raise HTTPException(status_code=500, detail=
|
|
2074
|
-
|
|
2098
|
+
raise HTTPException(status_code=500, detail="Failed to update docling settings") from e
|
|
2075
2099
|
|
|
2076
2100
|
async def refresh_openrag_docs(
|
|
2077
2101
|
document_service=Depends(get_document_service),
|
|
@@ -2107,4 +2131,4 @@ async def refresh_openrag_docs(
|
|
|
2107
2131
|
raise HTTPException(
|
|
2108
2132
|
status_code=500,
|
|
2109
2133
|
detail=f"Failed to refresh OpenRAG docs: {str(e)}",
|
|
2110
|
-
)
|
|
2134
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openrag
|
|
3
|
-
Version: 0.5.1.
|
|
3
|
+
Version: 0.5.1.dev2
|
|
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
|
|
@@ -205,7 +205,7 @@ class APIKeyService:
|
|
|
205
205
|
jwt_token: str = None,
|
|
206
206
|
) -> Dict[str, Any]:
|
|
207
207
|
"""
|
|
208
|
-
List all API keys for a user (without the actual keys).
|
|
208
|
+
List all active (non-revoked) API keys for a user (without the actual keys).
|
|
209
209
|
|
|
210
210
|
Args:
|
|
211
211
|
user_id: The user's ID
|
|
@@ -220,7 +220,12 @@ class APIKeyService:
|
|
|
220
220
|
# Search for user's keys
|
|
221
221
|
search_body = {
|
|
222
222
|
"query": {
|
|
223
|
-
"
|
|
223
|
+
"bool": {
|
|
224
|
+
"must": [
|
|
225
|
+
{"term": {"user_id": user_id}},
|
|
226
|
+
{"term": {"revoked": False }},
|
|
227
|
+
]
|
|
228
|
+
}
|
|
224
229
|
},
|
|
225
230
|
"sort": [{"created_at": {"order": "desc"}}],
|
|
226
231
|
"_source": [
|
|
@@ -2,6 +2,7 @@ import asyncio
|
|
|
2
2
|
import copy
|
|
3
3
|
import os
|
|
4
4
|
import json
|
|
5
|
+
import re
|
|
5
6
|
from collections import Counter
|
|
6
7
|
from typing import Any, Dict
|
|
7
8
|
from agentd.tool_decorator import tool
|
|
@@ -22,6 +23,19 @@ EMBED_RETRY_MAX_DELAY = 8.0
|
|
|
22
23
|
_global_search_service = None
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
def _is_exact_token_query(query: str) -> bool:
|
|
27
|
+
"""Return True for code/token-like queries that should not allow partial fuzzy matches."""
|
|
28
|
+
if not query or len(query.strip()) < 3:
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
query = query.strip()
|
|
32
|
+
|
|
33
|
+
if re.search(r"[^a-zA-Z0-9\s]", query):
|
|
34
|
+
return True
|
|
35
|
+
|
|
36
|
+
return bool(re.search(r"[a-zA-Z]", query) and re.search(r"\d", query))
|
|
37
|
+
|
|
38
|
+
|
|
25
39
|
def register_search_service(service: "SearchService") -> None:
|
|
26
40
|
"""
|
|
27
41
|
Explicitly register the active search service for the @tool wrapper.
|
|
@@ -584,8 +598,17 @@ class SearchService:
|
|
|
584
598
|
)
|
|
585
599
|
)
|
|
586
600
|
}
|
|
587
|
-
|
|
588
|
-
|
|
601
|
+
|
|
602
|
+
# Determine if we should apply exact-token filtering
|
|
603
|
+
should_filter_exact = bool(exact_files) or _is_exact_token_query(query)
|
|
604
|
+
|
|
605
|
+
if should_filter_exact:
|
|
606
|
+
if exact_files:
|
|
607
|
+
# Filter to only chunks from files with exact matches
|
|
608
|
+
chunks = [chunk for chunk in chunks if chunk.get("filename") in exact_files]
|
|
609
|
+
else:
|
|
610
|
+
# No exact matches found for a token-like query - return empty results
|
|
611
|
+
chunks = []
|
|
589
612
|
|
|
590
613
|
def _build_terms_agg(field: str) -> Dict[str, Any]:
|
|
591
614
|
counts = Counter(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
services:
|
|
2
2
|
opensearch:
|
|
3
|
-
image: langflowai/openrag-opensearch:${OPENRAG_VERSION:-latest}
|
|
3
|
+
image: docker.io/langflowai/openrag-opensearch:${OPENRAG_VERSION:-latest}
|
|
4
4
|
# build:
|
|
5
5
|
# context: .
|
|
6
6
|
# dockerfile: Dockerfile
|
|
@@ -26,7 +26,7 @@ services:
|
|
|
26
26
|
restart: unless-stopped
|
|
27
27
|
|
|
28
28
|
dashboards:
|
|
29
|
-
image: opensearchproject/opensearch-dashboards:3.0.0
|
|
29
|
+
image: docker.io/opensearchproject/opensearch-dashboards:3.0.0
|
|
30
30
|
container_name: osdash
|
|
31
31
|
depends_on:
|
|
32
32
|
- opensearch
|
|
@@ -38,7 +38,7 @@ services:
|
|
|
38
38
|
- "5601:5601"
|
|
39
39
|
|
|
40
40
|
openrag-backend:
|
|
41
|
-
image: langflowai/openrag-backend:${OPENRAG_VERSION:-latest}
|
|
41
|
+
image: docker.io/langflowai/openrag-backend:${OPENRAG_VERSION:-latest}
|
|
42
42
|
build:
|
|
43
43
|
context: .
|
|
44
44
|
dockerfile: Dockerfile.backend
|
|
@@ -116,7 +116,7 @@ services:
|
|
|
116
116
|
- "host.docker.internal:host-gateway"
|
|
117
117
|
|
|
118
118
|
openrag-frontend:
|
|
119
|
-
image: langflowai/openrag-frontend:${OPENRAG_VERSION:-latest}
|
|
119
|
+
image: docker.io/langflowai/openrag-frontend:${OPENRAG_VERSION:-latest}
|
|
120
120
|
build:
|
|
121
121
|
context: .
|
|
122
122
|
dockerfile: Dockerfile.frontend
|
|
@@ -129,7 +129,7 @@ services:
|
|
|
129
129
|
- "${FRONTEND_PORT:-3000}:3000"
|
|
130
130
|
|
|
131
131
|
langflow:
|
|
132
|
-
image: langflowai/openrag-langflow:${OPENRAG_VERSION:-latest}
|
|
132
|
+
image: docker.io/langflowai/openrag-langflow:${OPENRAG_VERSION:-latest}
|
|
133
133
|
build:
|
|
134
134
|
context: .
|
|
135
135
|
dockerfile: Dockerfile.langflow
|
|
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
|
|
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.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/ollama_embedding.json
RENAMED
|
File without changes
|
|
File without changes
|
{openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/ollama_llm_text.json
RENAMED
|
File without changes
|
{openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/flows/components/watsonx_embedding.json
RENAMED
|
File without changes
|
|
File without changes
|
{openrag-0.5.1.dev1 → openrag-0.5.1.dev2}/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.1.dev1 → openrag-0.5.1.dev2}/src/tui/_assets/openrag-documents/ibm_anthropic.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
|
|
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
|