This commit is contained in:
2025-09-21 03:00:57 +00:00
parent db854b8ec8
commit e017e0533d
17 changed files with 553 additions and 109 deletions

4
.env
View File

@@ -1,5 +1,5 @@
WEAVIATE_IS_LOCAL=True WEAVIATE_IS_LOCAL=True
# CLAUDE_PROJECT_DIR=/home/trav/claude-scripts
# URL can be just a host or full URL; defaults shown below # URL can be just a host or full URL; defaults shown below
WCD_URL=http://weaviate.yo # or http://localhost:8080 WCD_URL=http://weaviate.yo # or http://localhost:8080
# LOCAL_WEAVIATE_PORT=8080 # optional override # LOCAL_WEAVIATE_PORT=8080 # optional override
@@ -11,7 +11,7 @@ WCD_URL=http://weaviate.yo # or http://localhost:8080
R2R_API_URL=http://r2r.lab R2R_API_URL=http://r2r.lab
R2R_API_KEY= R2R_API_KEY=
FIRECRAWL_API_KEY=dummy-key FIRECRAWL_API_KEY=dummy-key
OPENWEBUI_API_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjlmNjEwODg2LWRhM2MtNDQ4YS05OWE0LTYyZGEyZjIyZjJiNiJ9.W-dqabcE4F-LQ--k2yrJM_KEBDB-wi1CmoahlN1tQbY OPENWEBUI_API_KEY=sk-09ae2f70c71248a8a7295d4323c6b96d
OPENWEBUI_API_URL=http://chat.lab OPENWEBUI_API_URL=http://chat.lab
WEAVIATE_API_KEY= WEAVIATE_API_KEY=
OPENAI_API_KEY=sk-1234 OPENAI_API_KEY=sk-1234

View File

@@ -358,45 +358,56 @@ class CollectionOverviewScreen(Screen[None]):
async def update_collections_table(self) -> None: async def update_collections_table(self) -> None:
"""Update the collections table with enhanced formatting.""" """Update the collections table with enhanced formatting."""
table = self.query_one("#collections_table", EnhancedDataTable) try:
table.clear(columns=True) table = self.query_one("#collections_table", EnhancedDataTable)
table.clear(columns=True)
# Add enhanced columns with more metadata # Add enhanced columns with more metadata
table.add_columns("Collection", "Backend", "Documents", "Size", "Type", "Status", "Updated") table.add_columns("Collection", "Backend", "Documents", "Size", "Type", "Status", "Updated")
# Add rows with enhanced formatting # Add rows with enhanced formatting
for collection in self.collections: for collection in self.collections:
# Format size try:
size_str = f"{collection['size_mb']:.1f} MB" # Format size
if collection["size_mb"] > 1000: size_str = f"{collection['size_mb']:.1f} MB"
size_str = f"{collection['size_mb'] / 1000:.1f} GB" if collection["size_mb"] > 1000:
size_str = f"{collection['size_mb'] / 1000:.1f} GB"
# Format document count # Format document count
doc_count = f"{collection['count']:,}" doc_count = f"{collection['count']:,}"
# Determine content type based on collection name or other metadata # Determine content type based on collection name or other metadata
content_type = "📄 Mixed" content_type = "📄 Mixed"
if "web" in collection["name"].lower(): if "web" in collection["name"].lower():
content_type = "🌐 Web" content_type = "🌐 Web"
elif "doc" in collection["name"].lower(): elif "doc" in collection["name"].lower():
content_type = "📖 Docs" content_type = "📖 Docs"
elif "repo" in collection["name"].lower(): elif "repo" in collection["name"].lower():
content_type = "📦 Code" content_type = "📦 Code"
table.add_row( table.add_row(
collection["name"], collection["name"],
collection["backend"], collection["backend"],
doc_count, doc_count,
size_str, size_str,
content_type, content_type,
collection["status"], collection["status"],
collection["last_updated"], collection["last_updated"],
) )
except Exception as e:
LOGGER.warning(f"Failed to add collection row for {collection.get('name', 'unknown')}: {e}")
continue
if self.collections: if self.collections:
table.move_cursor(row=0) try:
table.move_cursor(row=0)
except Exception as e:
LOGGER.warning(f"Failed to move table cursor: {e}")
self.get_selected_collection() self.get_selected_collection()
except Exception as e:
LOGGER.exception(f"Failed to update collections table: {e}")
self.notify(f"Failed to update table: {e}", severity="error", markup=False)
def update_search_controls(self, collection: CollectionInfo | None) -> None: def update_search_controls(self, collection: CollectionInfo | None) -> None:
"""Enable or disable search controls based on backend support.""" """Enable or disable search controls based on backend support."""

View File

@@ -152,7 +152,13 @@ class ConfirmDeleteScreen(Screen[None]):
def _refresh_parent_collections(self) -> None: def _refresh_parent_collections(self) -> None:
"""Helper method to refresh parent collections.""" """Helper method to refresh parent collections."""
self.parent_screen.refresh_collections() try:
self.parent_screen.refresh_collections()
except Exception as e:
import logging
logger = logging.getLogger(__name__)
logger.exception(f"Failed to refresh parent collections after deletion: {e}")
# Don't re-raise to prevent TUI crash
class ConfirmDocumentDeleteScreen(Screen[None]): class ConfirmDocumentDeleteScreen(Screen[None]):

View File

@@ -397,34 +397,20 @@ class StorageManager:
size_mb = count * 0.01 # Rough estimate: 10KB per document size_mb = count * 0.01 # Rough estimate: 10KB per document
if collection_name in collection_map: # Create unique key combining collection name and backend to show separately
# Merge with existing collection collection_key = f"{collection_name}#{backend_type.value}"
existing = collection_map[collection_name]
existing_backends = existing["backend"]
backend_value = backend_type.value
if isinstance(existing_backends, str): # Create new collection entry (no aggregation)
existing["backend"] = [existing_backends, backend_value] collection_info: CollectionInfo = {
elif isinstance(existing_backends, list): "name": collection_name,
# Prevent duplicates "type": self._get_collection_type(collection_name, backend_type),
if backend_value not in existing_backends: "count": count,
existing_backends.append(backend_value) "backend": backend_type.value,
"status": "active",
# Aggregate counts and sizes "last_updated": "2024-01-01T00:00:00Z",
existing["count"] += count "size_mb": size_mb,
existing["size_mb"] += size_mb }
else: collection_map[collection_key] = collection_info
# Create new collection entry
collection_info: CollectionInfo = {
"name": collection_name,
"type": self._get_collection_type(collection_name, backend_type),
"count": count,
"backend": backend_type.value,
"status": "active",
"last_updated": "2024-01-01T00:00:00Z",
"size_mb": size_mb,
}
collection_map[collection_name] = collection_info
except Exception: except Exception:
continue continue

View File

@@ -777,24 +777,35 @@ class R2RStorage(BaseStorage):
@override @override
async def count(self, *, collection_name: str | None = None) -> int: async def count(self, *, collection_name: str | None = None) -> int:
"""Get document count in collection.""" """Get document count in collection by actually querying documents."""
endpoint = self.endpoint endpoint = self.endpoint
client = self._create_http_client() client = self._create_http_client()
try: try:
# Get collections and find the count for the specific collection target_collection = collection_name or self.config.collection_name
# First get the collection ID
response = await client.get(f"{endpoint}/v3/collections") response = await client.get(f"{endpoint}/v3/collections")
response.raise_for_status() response.raise_for_status()
data: dict[str, object] = response.json() data: dict[str, object] = response.json()
target_collection = collection_name or self.config.collection_name collection_id = None
results = cast(list[dict[str, object]], data.get("results", [])) results = cast(list[dict[str, object]], data.get("results", []))
for collection in results: for collection in results:
if collection.get("name") == target_collection: if collection.get("name") == target_collection:
doc_count = collection.get("document_count", 0) collection_id = collection.get("id")
return _as_int(doc_count) break
if not collection_id:
return 0
# Query actual documents in the collection to get accurate count
doc_response = await client.get(f"{endpoint}/v3/collections/{collection_id}/documents")
doc_response.raise_for_status()
doc_data: dict[str, object] = doc_response.json()
documents = cast(list[object], doc_data.get("results", []))
return len(documents)
# Collection not found
return 0
except Exception: except Exception:
return 0 return 0
finally: finally:

View File

@@ -872,3 +872,432 @@ metadata.author
2025-09-18 22:21:09 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK" 2025-09-18 22:21:09 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-18 23:06:37 | INFO | ingest_pipeline.cli.tui.utils.runners | Shutting down storage connections 2025-09-18 23:06:37 | INFO | ingest_pipeline.cli.tui.utils.runners | Shutting down storage connections
2025-09-18 23:06:37 | INFO | ingest_pipeline.cli.tui.utils.runners | All storage connections closed gracefully 2025-09-18 23:06:37 | INFO | ingest_pipeline.cli.tui.utils.runners | All storage connections closed gracefully
2025-09-21 01:41:23 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 01:41:23 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 01:41:23 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 401 Unauthorized"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 404 Not Found"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 01:41:24 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 01:41:53 | INFO | ingest_pipeline.cli.tui.utils.runners | Shutting down storage connections
2025-09-21 01:41:53 | INFO | ingest_pipeline.cli.tui.utils.runners | All storage connections closed gracefully
2025-09-21 02:27:12 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 02:27:12 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 02:27:12 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:12 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:13 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:27:22 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:27:23 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:27:40 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:27:41 | INFO | httpx | HTTP Request: DELETE http://r2r.lab/v3/collections/e37af264-a346-4971-98c8-7611147f0c1d "HTTP/1.1 200 OK"
2025-09-21 02:27:41 | INFO | ingest_pipeline.cli.tui.utils.runners | Shutting down storage connections
2025-09-21 02:27:41 | INFO | ingest_pipeline.cli.tui.utils.runners | All storage connections closed gracefully
2025-09-21 02:47:58 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 02:47:58 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 02:47:58 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 02:47:58 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 02:47:58 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 02:47:58 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:58 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 02:47:58 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:58 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:47:59 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:00 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:48:29 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 02:48:29 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 02:48:29 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:30 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:48:39 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:40 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents?offset=0&limit=50 "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:50 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:48:53 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:51:16 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 02:51:16 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 02:51:16 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 02:51:16 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 02:51:16 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 02:51:16 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:16 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:16 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 02:51:16 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:17 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:51:44 | INFO | ingest_pipeline.cli.tui.utils.runners | Shutting down storage connections
2025-09-21 02:51:44 | INFO | ingest_pipeline.cli.tui.utils.runners | All storage connections closed gracefully
2025-09-21 02:51:48 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 02:51:48 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 02:51:48 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 02:51:48 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 02:51:48 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 02:51:48 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:48 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:48 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 02:51:48 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:51:49 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:02 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:52:07 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:07 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents?offset=0&limit=50 "HTTP/1.1 200 OK"
2025-09-21 02:52:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:13 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents?offset=0&limit=50 "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:52:19 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:52:20 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 02:53:25 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:53:25 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents?offset=0&limit=50 "HTTP/1.1 200 OK"
2025-09-21 02:53:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:53:30 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents?offset=0&limit=50 "HTTP/1.1 200 OK"
2025-09-21 02:54:55 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 02:54:55 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 02:54:55 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/db6f7f9e-3915-4086-a9cf-4b498df90395/documents "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:56 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/eb597b49-5fea-4612-93ff-f83a88e5b91e/documents "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/b1e15a85-1de5-4a6f-8261-cabcd5e8e7df/documents "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/84e273f7-f8b4-40c5-a5fc-d656340fc7cc/documents "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/53d07287-146d-5849-a0ce-95b0e5fa0e7e/documents "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 02:54:57 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"
2025-09-21 03:00:23 | INFO | ingest_pipeline.cli.tui.utils.runners | Shutting down storage connections
2025-09-21 03:00:23 | INFO | ingest_pipeline.cli.tui.utils.runners | All storage connections closed gracefully
2025-09-21 03:00:29 | INFO | ingest_pipeline.cli.tui.utils.runners | Initializing collection management TUI
2025-09-21 03:00:29 | INFO | ingest_pipeline.cli.tui.utils.runners | Scanning available storage backends
2025-09-21 03:00:29 | INFO | ingest_pipeline.cli.tui.utils.runners | Launching TUI - storage backends will initialize in background
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/.well-known/openid-configuration "HTTP/1.1 404 Not Found"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/meta "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET https://pypi.org/pypi/weaviate-client/json "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/db6f7f9e-3915-4086-a9cf-4b498df90395/documents "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/eb597b49-5fea-4612-93ff-f83a88e5b91e/documents "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/866022d4-9a5d-4ff2-9609-1412502d44a1/documents "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/b1e15a85-1de5-4a6f-8261-cabcd5e8e7df/documents "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/84e273f7-f8b4-40c5-a5fc-d656340fc7cc/documents "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://r2r.lab/v3/collections/53d07287-146d-5849-a0ce-95b0e5fa0e7e/documents "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://weaviate.yo/v1/schema "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: POST http://weaviate.yo/v1/graphql "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/139c04d5-7d38-4595-8e12-79a67fd731e7 "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/dade78d9-9893-4966-bd4b-31f1c1635cfa "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/721c1517-b2cd-482d-bd1c-f99571f0f31f "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/f867530b-5eea-43bf-8257-d3da497cb10b "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/d06bd108-ae7f-44f4-92fb-2ac556784920 "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/96832710-8146-4e3b-88f3-4b3929f67dbf "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/list "HTTP/1.1 200 OK"
2025-09-21 03:00:29 | INFO | httpx | HTTP Request: GET http://chat.lab/api/v1/knowledge/cbd4ae82-6fdd-4a4e-a4d5-d0b97ae988fd "HTTP/1.1 200 OK"

View File

@@ -2,6 +2,7 @@ from __future__ import annotations
from datetime import timedelta from datetime import timedelta
from types import SimpleNamespace from types import SimpleNamespace
from typing import cast
import pytest import pytest
from prefect.deployments.runner import RunnerDeployment from prefect.deployments.runner import RunnerDeployment
@@ -81,7 +82,7 @@ def test_serve_deployments_invokes_prefect(monkeypatch: pytest.MonkeyPatch) -> N
# Create a mock deployment using SimpleNamespace to avoid Prefect complexity # Create a mock deployment using SimpleNamespace to avoid Prefect complexity
deployment = SimpleNamespace(name="only") deployment = SimpleNamespace(name="only")
scheduler.serve_deployments([deployment]) scheduler.serve_deployments([cast(RunnerDeployment, deployment)])
assert called["deployments"] == (deployment,) assert called["deployments"] == (deployment,)
assert called["limit"] == 10 assert called["limit"] == 10

View File

@@ -333,7 +333,7 @@ async def test_ensure_collection_finds_existing(
assert collection_id == "col-1" assert collection_id == "col-1"
assert storage.default_collection_id == "col-1" assert storage.default_collection_id == "col-1"
await storage.client.aclose() await storage.client.aclose() # type: ignore[attr-defined]
@pytest.mark.asyncio @pytest.mark.asyncio
@@ -354,7 +354,7 @@ async def test_ensure_collection_creates_when_missing(
assert located is not None assert located is not None
identifier, _ = located identifier, _ = located
assert identifier == collection_id assert identifier == collection_id
await storage.client.aclose() await storage.client.aclose() # type: ignore[attr-defined]
@pytest.mark.asyncio @pytest.mark.asyncio
@@ -386,4 +386,4 @@ async def test_store_batch_creates_documents(
_, collection_payload = collection _, collection_payload = collection
assert collection_payload["document_count"] == 2 assert collection_payload["document_count"] == 2
await storage.client.aclose() await storage.client.aclose() # type: ignore[attr-defined]

View File

@@ -20,7 +20,7 @@ from ingest_pipeline.storage.base import BaseStorage
class StubStorage(BaseStorage): class StubStorage(BaseStorage):
def __init__( def __init__(
self, config: StorageConfig, *, documents: list[Document] | None = None, fail: bool = False self, config: StorageConfig, *, documents: list[Document] | None = None, fail: bool = False
)) -> None: ) -> None:
super().__init__(config) super().__init__(config)
self.documents = documents or [] self.documents = documents or []
self.fail = fail self.fail = fail
@@ -37,7 +37,7 @@ class StubStorage(BaseStorage):
async def store_batch( async def store_batch(
self, documents: list[Document], *, collection_name: str | None = None self, documents: list[Document], *, collection_name: str | None = None
)) -> list[str]: ) -> list[str]:
self.stored.extend(documents) self.stored.extend(documents)
if self.fail: if self.fail:
raise RuntimeError("batch failed") raise RuntimeError("batch failed")
@@ -61,7 +61,7 @@ class StubStorage(BaseStorage):
threshold: float = 0.7, threshold: float = 0.7,
*, *,
collection_name: str | None = None, collection_name: str | None = None,
)): ):
for document in self.documents: for document in self.documents:
yield document yield document
@@ -76,7 +76,7 @@ class CollectionStubStorage(StubStorage):
*, *,
collections: list[str], collections: list[str],
counts: dict[str, int], counts: dict[str, int],
)) -> None: ) -> None:
super().__init__(config) super().__init__(config)
self.collections = collections self.collections = collections
self.counts = counts self.counts = counts
@@ -115,12 +115,12 @@ async def test_multi_storage_adapter_reports_replication_failure(document_factor
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)) )
secondary_config = StorageConfig( secondary_config = StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)) )
primary = StubStorage(primary_config) primary = StubStorage(primary_config)
secondary = StubStorage(secondary_config, fail=True) secondary = StubStorage(secondary_config, fail=True)
@@ -140,26 +140,26 @@ def test_storage_manager_build_multi_storage_adapter_deduplicates(document_facto
openwebui_api_key=None, openwebui_api_key=None,
r2r_endpoint=None, r2r_endpoint=None,
r2r_api_key=None, r2r_api_key=None,
))) ))
manager = StorageManager(settings) manager = StorageManager(settings)
weaviate_config = StorageConfig( weaviate_config = StorageConfig(
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)) )
openwebui_config = StorageConfig( openwebui_config = StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)) )
manager.backends[StorageBackend.WEAVIATE] = StubStorage(weaviate_config) manager.backends[StorageBackend.WEAVIATE] = StubStorage(weaviate_config)
manager.backends[StorageBackend.OPEN_WEBUI] = StubStorage(openwebui_config) manager.backends[StorageBackend.OPEN_WEBUI] = StubStorage(openwebui_config)
adapter = manager.build_multi_storage_adapter( adapter = manager.build_multi_storage_adapter(
[StorageBackend.WEAVIATE, StorageBackend.WEAVIATE, StorageBackend.OPEN_WEBUI] [StorageBackend.WEAVIATE, StorageBackend.WEAVIATE, StorageBackend.OPEN_WEBUI]
)) )
assert len(adapter._storages) == 2 assert len(adapter._storages) == 2
assert adapter._storages[0].config.backend == StorageBackend.WEAVIATE assert adapter._storages[0].config.backend == StorageBackend.WEAVIATE
@@ -195,33 +195,33 @@ async def test_storage_manager_search_across_backends_groups_results(document_fa
document_weaviate = document_factory( document_weaviate = document_factory(
content="alpha", metadata_updates={"source_url": "https://alpha"} content="alpha", metadata_updates={"source_url": "https://alpha"}
)) )
document_openwebui = document_factory( document_openwebui = document_factory(
content="beta", metadata_updates={"source_url": "https://beta"} content="beta", metadata_updates={"source_url": "https://beta"}
)) )
manager.backends[StorageBackend.WEAVIATE] = StubStorage( manager.backends[StorageBackend.WEAVIATE] = StubStorage(
StorageConfig( StorageConfig(
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)), ),
documents=[document_weaviate], documents=[document_weaviate],
)) )
manager.backends[StorageBackend.OPEN_WEBUI] = StubStorage( manager.backends[StorageBackend.OPEN_WEBUI] = StubStorage(
StorageConfig( StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)), ),
documents=[document_openwebui], documents=[document_openwebui],
)) )
results = await manager.search_across_backends( results = await manager.search_across_backends(
"query", "query",
limit=5, limit=5,
backends=[StorageBackend.WEAVIATE, StorageBackend.OPEN_WEBUI], backends=[StorageBackend.WEAVIATE, StorageBackend.OPEN_WEBUI],
)) )
assert results[StorageBackend.WEAVIATE][0].content == "alpha" assert results[StorageBackend.WEAVIATE][0].content == "alpha"
assert results[StorageBackend.OPEN_WEBUI][0].content == "beta" assert results[StorageBackend.OPEN_WEBUI][0].content == "beta"
@@ -233,12 +233,12 @@ async def test_multi_storage_adapter_store_batch_replicates_to_all_backends(docu
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)) )
secondary_config = StorageConfig( secondary_config = StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)) )
primary = StubStorage(primary_config) primary = StubStorage(primary_config)
secondary = StubStorage(secondary_config) secondary = StubStorage(secondary_config)
@@ -261,12 +261,12 @@ async def test_multi_storage_adapter_delete_reports_secondary_failures() -> None
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)) )
secondary_config = StorageConfig( secondary_config = StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)) )
primary = StubStorage(primary_config) primary = StubStorage(primary_config)
secondary = StubStorage(secondary_config, fail=True) secondary = StubStorage(secondary_config, fail=True)
@@ -293,15 +293,15 @@ async def test_storage_manager_initialize_all_backends_registers_capabilities(mo
monkeypatch.setattr( monkeypatch.setattr(
"ingest_pipeline.cli.tui.utils.storage_manager.WeaviateStorage", "ingest_pipeline.cli.tui.utils.storage_manager.WeaviateStorage",
StubStorage, StubStorage,
)) )
monkeypatch.setattr( monkeypatch.setattr(
"ingest_pipeline.cli.tui.utils.storage_manager.OpenWebUIStorage", "ingest_pipeline.cli.tui.utils.storage_manager.OpenWebUIStorage",
StubStorage, StubStorage,
)) )
monkeypatch.setattr( monkeypatch.setattr(
"ingest_pipeline.cli.tui.utils.storage_manager.R2RStorage", "ingest_pipeline.cli.tui.utils.storage_manager.R2RStorage",
StubStorage, StubStorage,
)) )
results = await manager.initialize_all_backends() results = await manager.initialize_all_backends()
@@ -360,19 +360,19 @@ async def test_storage_manager_get_all_collections_merges_counts_and_backends()
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="shared", collection_name="shared",
)), ),
collections=["shared", ""], collections=["shared", ""],
counts={"shared": 2}, counts={"shared": 2},
)) )
openwebui_storage = CollectionStubStorage( openwebui_storage = CollectionStubStorage(
StorageConfig( StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)), ),
collections=["shared"], collections=["shared"],
counts={"shared": -1}, counts={"shared": -1},
)) )
manager.backends = { manager.backends = {
StorageBackend.WEAVIATE: weaviate_storage, StorageBackend.WEAVIATE: weaviate_storage,
StorageBackend.OPEN_WEBUI: openwebui_storage, StorageBackend.OPEN_WEBUI: openwebui_storage,
@@ -405,17 +405,17 @@ async def test_storage_manager_get_backend_status_reports_failures() -> None:
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)), ),
collections=["collection", "archive"], collections=["collection", "archive"],
counts={"collection": 2, "archive": 1}, counts={"collection": 2, "archive": 1},
)) )
failing_storage = FailingStatusStorage( failing_storage = FailingStatusStorage(
StorageConfig( StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)) )
)) )
manager.backends = { manager.backends = {
StorageBackend.WEAVIATE: healthy_storage, StorageBackend.WEAVIATE: healthy_storage,
StorageBackend.OPEN_WEBUI: failing_storage, StorageBackend.OPEN_WEBUI: failing_storage,
@@ -451,15 +451,15 @@ async def test_storage_manager_close_all_clears_state() -> None:
backend=StorageBackend.WEAVIATE, backend=StorageBackend.WEAVIATE,
endpoint="http://weaviate.local", endpoint="http://weaviate.local",
collection_name="primary", collection_name="primary",
)) )
)) )
failing_close_storage = FailingCloseStorage( failing_close_storage = FailingCloseStorage(
StorageConfig( StorageConfig(
backend=StorageBackend.OPEN_WEBUI, backend=StorageBackend.OPEN_WEBUI,
endpoint="http://chat.local", endpoint="http://chat.local",
collection_name="secondary", collection_name="secondary",
)) )
)) )
manager.backends = { manager.backends = {
StorageBackend.WEAVIATE: closable_storage, StorageBackend.WEAVIATE: closable_storage,
StorageBackend.OPEN_WEBUI: failing_close_storage, StorageBackend.OPEN_WEBUI: failing_close_storage,