gnosisllm-knowledge 0.2.0__py3-none-any.whl → 0.3.0__py3-none-any.whl

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.
Files changed (44) hide show
  1. gnosisllm_knowledge/__init__.py +91 -39
  2. gnosisllm_knowledge/api/__init__.py +3 -2
  3. gnosisllm_knowledge/api/knowledge.py +287 -7
  4. gnosisllm_knowledge/api/memory.py +966 -0
  5. gnosisllm_knowledge/backends/__init__.py +14 -5
  6. gnosisllm_knowledge/backends/opensearch/agentic.py +341 -39
  7. gnosisllm_knowledge/backends/opensearch/config.py +49 -28
  8. gnosisllm_knowledge/backends/opensearch/indexer.py +1 -0
  9. gnosisllm_knowledge/backends/opensearch/mappings.py +2 -1
  10. gnosisllm_knowledge/backends/opensearch/memory/__init__.py +12 -0
  11. gnosisllm_knowledge/backends/opensearch/memory/client.py +1380 -0
  12. gnosisllm_knowledge/backends/opensearch/memory/config.py +127 -0
  13. gnosisllm_knowledge/backends/opensearch/memory/setup.py +322 -0
  14. gnosisllm_knowledge/backends/opensearch/searcher.py +235 -0
  15. gnosisllm_knowledge/backends/opensearch/setup.py +308 -148
  16. gnosisllm_knowledge/cli/app.py +378 -12
  17. gnosisllm_knowledge/cli/commands/agentic.py +11 -0
  18. gnosisllm_knowledge/cli/commands/memory.py +723 -0
  19. gnosisllm_knowledge/cli/commands/setup.py +24 -22
  20. gnosisllm_knowledge/cli/display/service.py +43 -0
  21. gnosisllm_knowledge/cli/utils/config.py +58 -0
  22. gnosisllm_knowledge/core/domain/__init__.py +41 -0
  23. gnosisllm_knowledge/core/domain/document.py +5 -0
  24. gnosisllm_knowledge/core/domain/memory.py +440 -0
  25. gnosisllm_knowledge/core/domain/result.py +11 -3
  26. gnosisllm_knowledge/core/domain/search.py +2 -0
  27. gnosisllm_knowledge/core/events/types.py +76 -0
  28. gnosisllm_knowledge/core/exceptions.py +134 -0
  29. gnosisllm_knowledge/core/interfaces/__init__.py +17 -0
  30. gnosisllm_knowledge/core/interfaces/memory.py +524 -0
  31. gnosisllm_knowledge/core/interfaces/streaming.py +127 -0
  32. gnosisllm_knowledge/core/streaming/__init__.py +36 -0
  33. gnosisllm_knowledge/core/streaming/pipeline.py +228 -0
  34. gnosisllm_knowledge/loaders/base.py +3 -4
  35. gnosisllm_knowledge/loaders/sitemap.py +129 -1
  36. gnosisllm_knowledge/loaders/sitemap_streaming.py +258 -0
  37. gnosisllm_knowledge/services/indexing.py +67 -75
  38. gnosisllm_knowledge/services/search.py +47 -11
  39. gnosisllm_knowledge/services/streaming_pipeline.py +302 -0
  40. {gnosisllm_knowledge-0.2.0.dist-info → gnosisllm_knowledge-0.3.0.dist-info}/METADATA +44 -1
  41. gnosisllm_knowledge-0.3.0.dist-info/RECORD +77 -0
  42. gnosisllm_knowledge-0.2.0.dist-info/RECORD +0 -64
  43. {gnosisllm_knowledge-0.2.0.dist-info → gnosisllm_knowledge-0.3.0.dist-info}/WHEEL +0 -0
  44. {gnosisllm_knowledge-0.2.0.dist-info → gnosisllm_knowledge-0.3.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,302 @@
1
+ """Streaming indexing pipeline with bounded memory.
2
+
3
+ This module provides the StreamingIndexingPipeline that orchestrates
4
+ the load -> index pipeline with guaranteed bounded memory usage.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import logging
10
+ import time
11
+ from dataclasses import dataclass, field
12
+ from typing import TYPE_CHECKING, Any
13
+
14
+ from gnosisllm_knowledge.core.domain.document import Document, DocumentStatus
15
+ from gnosisllm_knowledge.core.domain.result import IndexResult
16
+ from gnosisllm_knowledge.core.events.emitter import EventEmitter
17
+ from gnosisllm_knowledge.core.events.types import (
18
+ BatchCompletedEvent,
19
+ StreamingCompletedEvent,
20
+ StreamingProgressEvent,
21
+ )
22
+ from gnosisllm_knowledge.core.streaming.pipeline import PipelineConfig
23
+
24
+ if TYPE_CHECKING:
25
+ from gnosisllm_knowledge.core.interfaces.indexer import IDocumentIndexer
26
+ from gnosisllm_knowledge.loaders.sitemap import SitemapLoader
27
+
28
+
29
+ @dataclass
30
+ class StreamingProgress:
31
+ """Progress tracking for streaming operations.
32
+
33
+ Attributes:
34
+ urls_discovered: Total URLs discovered so far.
35
+ urls_processed: URLs that have been fetched and processed.
36
+ documents_indexed: Documents successfully indexed.
37
+ documents_failed: Documents that failed to index.
38
+ current_phase: Current pipeline phase (discovering, fetching, indexing, completed).
39
+ memory_estimate_mb: Estimated current memory usage in MB.
40
+ """
41
+
42
+ urls_discovered: int = 0
43
+ urls_processed: int = 0
44
+ documents_indexed: int = 0
45
+ documents_failed: int = 0
46
+ current_phase: str = "initializing"
47
+ memory_estimate_mb: float = 0.0
48
+
49
+
50
+ @dataclass
51
+ class StreamingPipelineResult:
52
+ """Result of a streaming pipeline execution.
53
+
54
+ Attributes:
55
+ success: Whether the pipeline completed successfully.
56
+ indexed_count: Total documents indexed.
57
+ failed_count: Total documents that failed.
58
+ urls_processed: Total URLs processed.
59
+ batches_processed: Number of batches processed.
60
+ duration_ms: Total duration in milliseconds.
61
+ errors: List of errors encountered.
62
+ """
63
+
64
+ success: bool
65
+ indexed_count: int = 0
66
+ failed_count: int = 0
67
+ urls_processed: int = 0
68
+ batches_processed: int = 0
69
+ duration_ms: float = 0.0
70
+ errors: list[dict[str, Any]] = field(default_factory=list)
71
+
72
+
73
+ class StreamingIndexingPipeline:
74
+ """Orchestrates streaming load -> index pipeline with bounded memory.
75
+
76
+ This pipeline ensures:
77
+ 1. URLs are discovered and processed in batches
78
+ 2. Documents are indexed immediately after fetching
79
+ 3. Memory is freed between batches
80
+ 4. Progress is tracked and emitted as events
81
+ 5. Errors don't stop the entire pipeline
82
+
83
+ Memory Guarantees:
84
+ - URL storage: O(url_batch_size)
85
+ - Document storage: O(index_batch_size)
86
+ - In-flight fetches: O(fetch_concurrency * avg_page_size)
87
+ - Total: Bounded, independent of sitemap size
88
+
89
+ Example:
90
+ ```python
91
+ pipeline = StreamingIndexingPipeline(
92
+ loader=sitemap_loader,
93
+ indexer=opensearch_indexer,
94
+ config=PipelineConfig(
95
+ url_batch_size=50,
96
+ fetch_concurrency=10,
97
+ index_batch_size=100,
98
+ ),
99
+ )
100
+
101
+ result = await pipeline.execute(
102
+ source="https://example.com/sitemap.xml",
103
+ index_name="knowledge-account123",
104
+ account_id="account123",
105
+ )
106
+ ```
107
+ """
108
+
109
+ def __init__(
110
+ self,
111
+ loader: SitemapLoader,
112
+ indexer: IDocumentIndexer,
113
+ config: PipelineConfig | None = None,
114
+ events: EventEmitter | None = None,
115
+ ) -> None:
116
+ """Initialize the streaming pipeline.
117
+
118
+ Args:
119
+ loader: Sitemap loader instance.
120
+ indexer: Document indexer instance.
121
+ config: Pipeline configuration.
122
+ events: Event emitter for progress events.
123
+ """
124
+ self._loader = loader
125
+ self._indexer = indexer
126
+ self._config = config or PipelineConfig()
127
+ self._events = events or EventEmitter()
128
+ self._logger = logging.getLogger(__name__)
129
+ self._progress = StreamingProgress()
130
+
131
+ async def execute(
132
+ self,
133
+ source: str,
134
+ index_name: str,
135
+ *,
136
+ account_id: str | None = None,
137
+ collection_id: str | None = None,
138
+ collection_name: str | None = None,
139
+ source_id: str | None = None,
140
+ **options: Any,
141
+ ) -> IndexResult:
142
+ """Execute the streaming pipeline.
143
+
144
+ Args:
145
+ source: Sitemap URL.
146
+ index_name: Target OpenSearch index.
147
+ account_id: For multi-tenancy filtering.
148
+ collection_id: Collection within account.
149
+ collection_name: Collection name for display.
150
+ source_id: Source identifier.
151
+ **options: Additional loader options.
152
+
153
+ Returns:
154
+ Aggregated index result.
155
+ """
156
+ start_time = time.time()
157
+ self._progress = StreamingProgress(current_phase="starting")
158
+ await self._emit_progress()
159
+
160
+ batch_count = 0
161
+
162
+ # Create index callback that enriches and indexes documents
163
+ async def index_batch(documents: list[Document]) -> IndexResult:
164
+ nonlocal batch_count
165
+
166
+ enriched = [
167
+ self._enrich_document(
168
+ doc,
169
+ source=source,
170
+ account_id=account_id,
171
+ collection_id=collection_id,
172
+ collection_name=collection_name,
173
+ source_id=source_id,
174
+ )
175
+ for doc in documents
176
+ ]
177
+
178
+ batch_start = time.time()
179
+ result = await self._indexer.bulk_index(enriched, index_name)
180
+ batch_duration = (time.time() - batch_start) * 1000
181
+
182
+ self._progress.documents_indexed += result.indexed_count
183
+ self._progress.documents_failed += result.failed_count
184
+ self._progress.current_phase = "indexing"
185
+ await self._emit_progress()
186
+
187
+ # Emit batch completed event
188
+ self._events.emit(
189
+ BatchCompletedEvent(
190
+ batch_index=batch_count,
191
+ success_count=result.indexed_count,
192
+ failure_count=result.failed_count,
193
+ duration_ms=batch_duration,
194
+ )
195
+ )
196
+ batch_count += 1
197
+
198
+ return result
199
+
200
+ # Execute streaming load with indexing
201
+ self._progress.current_phase = "processing"
202
+ await self._emit_progress()
203
+
204
+ try:
205
+ result = await self._loader.load_streaming_with_indexing(
206
+ source=source,
207
+ index_callback=index_batch,
208
+ url_batch_size=self._config.url_batch_size,
209
+ doc_batch_size=self._config.index_batch_size,
210
+ config=self._config,
211
+ **options,
212
+ )
213
+ except Exception as e:
214
+ self._logger.exception(f"Streaming pipeline failed: {e}")
215
+ duration_ms = (time.time() - start_time) * 1000
216
+ return IndexResult(
217
+ success=False,
218
+ indexed_count=self._progress.documents_indexed,
219
+ failed_count=self._progress.documents_failed,
220
+ error_message=str(e),
221
+ duration_ms=duration_ms,
222
+ )
223
+
224
+ duration_ms = (time.time() - start_time) * 1000
225
+ self._progress.current_phase = "completed"
226
+ await self._emit_progress()
227
+
228
+ # Emit completion event
229
+ self._events.emit(
230
+ StreamingCompletedEvent(
231
+ total_urls=self._progress.urls_processed,
232
+ total_documents=result.indexed_count + result.failed_count,
233
+ indexed_count=result.indexed_count,
234
+ failed_count=result.failed_count,
235
+ duration_ms=duration_ms,
236
+ )
237
+ )
238
+
239
+ return IndexResult(
240
+ success=result.failed_count == 0,
241
+ indexed_count=result.indexed_count,
242
+ failed_count=result.failed_count,
243
+ errors=result.errors,
244
+ duration_ms=duration_ms,
245
+ )
246
+
247
+ def _enrich_document(
248
+ self,
249
+ doc: Document,
250
+ source: str,
251
+ account_id: str | None,
252
+ collection_id: str | None,
253
+ collection_name: str | None,
254
+ source_id: str | None,
255
+ ) -> Document:
256
+ """Add tenant and source info to document.
257
+
258
+ Args:
259
+ doc: Original document.
260
+ source: Source URL.
261
+ account_id: Account identifier.
262
+ collection_id: Collection identifier.
263
+ collection_name: Collection name for display.
264
+ source_id: Source identifier.
265
+
266
+ Returns:
267
+ New Document with tenant info.
268
+ """
269
+ return Document(
270
+ content=doc.content,
271
+ source=source,
272
+ doc_id=doc.doc_id,
273
+ url=doc.url,
274
+ title=doc.title,
275
+ account_id=account_id,
276
+ collection_id=collection_id,
277
+ collection_name=collection_name,
278
+ source_id=source_id,
279
+ chunk_index=doc.chunk_index,
280
+ total_chunks=doc.total_chunks,
281
+ parent_doc_id=doc.parent_doc_id,
282
+ status=DocumentStatus.INDEXED,
283
+ metadata=doc.metadata,
284
+ )
285
+
286
+ async def _emit_progress(self) -> None:
287
+ """Emit progress event."""
288
+ await self._events.emit_async(
289
+ StreamingProgressEvent(
290
+ urls_discovered=self._progress.urls_discovered,
291
+ urls_processed=self._progress.urls_processed,
292
+ documents_indexed=self._progress.documents_indexed,
293
+ documents_failed=self._progress.documents_failed,
294
+ phase=self._progress.current_phase,
295
+ memory_mb=self._progress.memory_estimate_mb,
296
+ )
297
+ )
298
+
299
+ @property
300
+ def progress(self) -> StreamingProgress:
301
+ """Get current progress."""
302
+ return self._progress
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gnosisllm-knowledge
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Enterprise-grade knowledge loading, indexing, and search for Python
5
5
  License: MIT
6
6
  Keywords: knowledge-base,rag,semantic-search,vector-search,opensearch,llm,embeddings,enterprise
@@ -41,6 +41,8 @@ Enterprise-grade knowledge loading, indexing, and semantic search library for Py
41
41
 
42
42
  - **Semantic Search**: Vector-based similarity search using OpenAI embeddings
43
43
  - **Hybrid Search**: Combine semantic and keyword (BM25) search for best results
44
+ - **Agentic Search**: AI-powered search with reasoning and natural language answers
45
+ - **Agentic Memory**: Conversational memory with automatic fact extraction
44
46
  - **Multiple Loaders**: Load content from websites, sitemaps, and files
45
47
  - **Intelligent Chunking**: Sentence-aware text splitting with configurable overlap
46
48
  - **OpenSearch Backend**: Production-ready with k-NN vector search
@@ -333,6 +335,47 @@ results = await knowledge.search(
333
335
  )
334
336
  ```
335
337
 
338
+ ## Agentic Memory
339
+
340
+ Conversational memory with automatic fact extraction using OpenSearch's ML Memory plugin.
341
+
342
+ ```bash
343
+ # Setup memory connectors
344
+ gnosisllm-knowledge memory setup --openai-key sk-...
345
+
346
+ # Create container and store conversations
347
+ gnosisllm-knowledge memory container create my-memory
348
+ gnosisllm-knowledge memory store <container-id> --file messages.json --user-id alice
349
+ gnosisllm-knowledge memory recall <container-id> "user preferences" --user-id alice
350
+ ```
351
+
352
+ ```python
353
+ from gnosisllm_knowledge import Memory, MemoryStrategy, StrategyConfig, Message
354
+
355
+ memory = Memory.from_env()
356
+
357
+ # Create container with strategies
358
+ container = await memory.create_container(
359
+ name="agent-memory",
360
+ strategies=[
361
+ StrategyConfig(type=MemoryStrategy.SEMANTIC, namespace=["user_id"]),
362
+ ],
363
+ )
364
+
365
+ # Store conversation with fact extraction
366
+ await memory.store(
367
+ container_id=container.id,
368
+ messages=[Message(role="user", content="I prefer dark mode")],
369
+ user_id="alice",
370
+ infer=True,
371
+ )
372
+
373
+ # Recall memories
374
+ result = await memory.recall(container.id, "preferences", user_id="alice")
375
+ ```
376
+
377
+ See [docs/memory.md](docs/memory.md) for full documentation.
378
+
336
379
  ## Event Tracking
337
380
 
338
381
  ```python
@@ -0,0 +1,77 @@
1
+ gnosisllm_knowledge/__init__.py,sha256=Egfn6ROa9OttWweCBVocNCUivKwWfdeFEFgpwAoo_ww,4809
2
+ gnosisllm_knowledge/api/__init__.py,sha256=xVG6wMjbFa7_qDVRKlp43O4f0EQmPr9w3pAOGmmh32U,200
3
+ gnosisllm_knowledge/api/knowledge.py,sha256=Ysh6-RAdtkTBsy2V6X1zZN_PFJmyhT0cyvEpUF7-eJA,26817
4
+ gnosisllm_knowledge/api/memory.py,sha256=BrYWS3fCPaymwjzlnLqAKiCrUuMlUDMod-DcrTaarkQ,28926
5
+ gnosisllm_knowledge/backends/__init__.py,sha256=QkVcZbr-u_vDyGiOMs2jrV1oA21VyCLd6g6aJZcSJxk,927
6
+ gnosisllm_knowledge/backends/memory/__init__.py,sha256=Q_2Fh0-Xs1f7CsNn9V7z8NLW0P7F1owmxZQ4k3fTSXo,238
7
+ gnosisllm_knowledge/backends/memory/indexer.py,sha256=R_Yd1gEplzS01o7QfPxjaAZ21VxjfdvatbgrNsyp5lM,10517
8
+ gnosisllm_knowledge/backends/memory/searcher.py,sha256=k6OGtppC-UsHB8aIhlK3wSASVOPEokfe6LLV1jbmE5M,15547
9
+ gnosisllm_knowledge/backends/opensearch/__init__.py,sha256=wwg3QPVVMLkq5qHUGw_9m6gvXO3hxa-xaBj3_BRJlN4,679
10
+ gnosisllm_knowledge/backends/opensearch/agentic.py,sha256=TY5uOdZwnhOowOXEXo0ZLsY-Nb5YxcNtDyGLMbYg9Js,36548
11
+ gnosisllm_knowledge/backends/opensearch/config.py,sha256=9xHMvr5-vnCcGFOPoO2_bbKuB70Gm979BqrhvcKsKm0,8640
12
+ gnosisllm_knowledge/backends/opensearch/indexer.py,sha256=gVLH3F5-iQNAXE3ftlKoADcSWChmjCqI6q9pDIPdPnM,15158
13
+ gnosisllm_knowledge/backends/opensearch/mappings.py,sha256=EQn45YNhCEyOZpJTg1_1wEmLIR9v5Nna5ovK__65G90,8000
14
+ gnosisllm_knowledge/backends/opensearch/memory/__init__.py,sha256=9EganuADfP6-1lky1Mk_oogr2d9pCmOFcNUjO7UMVZo,403
15
+ gnosisllm_knowledge/backends/opensearch/memory/client.py,sha256=ho0Sn1lXK7EDy0RR6HXjTX5pekrfRc7Vuo4YfBiElr4,44636
16
+ gnosisllm_knowledge/backends/opensearch/memory/config.py,sha256=astoJqofwhl4KUZ6vTUG-yiG1h5hfpJjYdsBzhKzx_E,4633
17
+ gnosisllm_knowledge/backends/opensearch/memory/setup.py,sha256=0ILimioesxx2GLQ4I3uCA-Nu9Wy09PI-rSA85t8ssLw,10372
18
+ gnosisllm_knowledge/backends/opensearch/queries.py,sha256=IEZ_teGqc80OFrzD4XIwUArXRre-UhQWIH2oZnRGvC8,13301
19
+ gnosisllm_knowledge/backends/opensearch/searcher.py,sha256=kaMMMziHG006mHrbKBikjjyzDvO4qk_z0VLyjnrKhys,19984
20
+ gnosisllm_knowledge/backends/opensearch/setup.py,sha256=G9G0KZkz_ZynJjRIRWJImLDEFvQQE2wWRJfq_mlfpIs,59483
21
+ gnosisllm_knowledge/chunking/__init__.py,sha256=XKrk04DqwhhPxxP_SLGnQrVUo2fexmvzuEN9YzO4Jxk,225
22
+ gnosisllm_knowledge/chunking/fixed.py,sha256=LXZhRbYbtg4hQzqrAKyGrM_zmDhqJWXDi6cHOiJlGrM,3905
23
+ gnosisllm_knowledge/chunking/sentence.py,sha256=EqY2Y1dpfNK_qukXQC9QYrKN8b1dqyyX9TZN5bUYGqs,7271
24
+ gnosisllm_knowledge/cli/__init__.py,sha256=G8AO-LwNQqXSKZCFxLiXggOQf-xmNITWVs25xWl_-Cg,564
25
+ gnosisllm_knowledge/cli/app.py,sha256=kDhJRtdAOabnFIQw7WjuOJ9p1x2EQ7lq_UL9bWPIjIs,25647
26
+ gnosisllm_knowledge/cli/commands/__init__.py,sha256=TGrGl_AxVVXpAv01iO4JCUtWW8wzSQTBtQFj4vPeE0A,303
27
+ gnosisllm_knowledge/cli/commands/agentic.py,sha256=VKQewzpLPgJ94T3z-CA3lMCwfUBpA1a5Ca5Uv69T_YA,20294
28
+ gnosisllm_knowledge/cli/commands/load.py,sha256=RZhLtw2Ba6LCceLTD665QE4QcOm-HBc9D-lEX1ReGLM,13117
29
+ gnosisllm_knowledge/cli/commands/memory.py,sha256=65a7iVgZuy5Czgq_fhTgRrvSxMv-8JhA77zexUAwm5c,24032
30
+ gnosisllm_knowledge/cli/commands/search.py,sha256=lj3kUXmvSZRA_z8utbN2Ph_2NczOuzGkuxILreJuj_o,15326
31
+ gnosisllm_knowledge/cli/commands/setup.py,sha256=RmTpwW-12AWw6KSrQQl4HrMBwtfcSoBk-RmnApEWvsM,8099
32
+ gnosisllm_knowledge/cli/display/__init__.py,sha256=hLQ3XCBxw8C5WOT-wu1lqFyrD7FJVPHSWXUZM24Qnjc,155
33
+ gnosisllm_knowledge/cli/display/service.py,sha256=Aq2-xSjLtpmRo7K41ca64yHCB338C1r2lb3jLjvKOyI,19226
34
+ gnosisllm_knowledge/cli/utils/__init__.py,sha256=BlzSMhfXM_x9EAv304krVb_DHvdJaKLrlbb716LKkQI,106
35
+ gnosisllm_knowledge/cli/utils/config.py,sha256=qRGz8U7JTglcTybl06Fp7F2GBgGI_5AtpGHlLoMtd8g,9562
36
+ gnosisllm_knowledge/core/__init__.py,sha256=yeZYSnaypTdStzt3_FERALGUgfC5fuudTCGixUm1_z0,1827
37
+ gnosisllm_knowledge/core/domain/__init__.py,sha256=mH5wVrmAXxRkiepW-rsuWtdQjliX_so_-h1Guc5egPI,1750
38
+ gnosisllm_knowledge/core/domain/document.py,sha256=pvhqvLZI9a68aHi5rJSO1hoIKwPnEBsxBmCBuLpgNoM,8056
39
+ gnosisllm_knowledge/core/domain/memory.py,sha256=sDdqX9gf8vdm4UXtQ7RUAzppNXvwqvWrDLisZAB8Fg4,13139
40
+ gnosisllm_knowledge/core/domain/result.py,sha256=W667qa7KLYXr1cDR6-bz4AN4oancLxNnb_CpynP_XJ0,6112
41
+ gnosisllm_knowledge/core/domain/search.py,sha256=340lL4OB_QYrikCVvzK3NTdIA0QGsP8hGWpR5IYBIhM,10733
42
+ gnosisllm_knowledge/core/domain/source.py,sha256=kKmWr3U01sJkfG8jtzAQDzxtVVzUOTSqEJZT5gGlYU8,4493
43
+ gnosisllm_knowledge/core/events/__init__.py,sha256=pqWmPSuZIV3_teyYxGgNOLu8yaEw5jTO7A0tKDTydpE,540
44
+ gnosisllm_knowledge/core/events/emitter.py,sha256=qFANzBtgdnQMVgLFE76rA-4i6Es_7ItaI-JfOl9vrNc,6940
45
+ gnosisllm_knowledge/core/events/types.py,sha256=u3-4Nes1I2V1O-rXRAVFJXN8KM_oGHiq00TPdWjKiQk,8925
46
+ gnosisllm_knowledge/core/exceptions.py,sha256=kjkb3mxpAkq0jYpbJoERHrkwYx88-lA_wUTxTRKkMao,13741
47
+ gnosisllm_knowledge/core/interfaces/__init__.py,sha256=NZQNCTI4xWTnS6RyiHU4POv4RyrtgazQ0XVNDUoeUOs,1169
48
+ gnosisllm_knowledge/core/interfaces/agentic.py,sha256=OrS-3YRJ6Z6j1yAngsAv3B9fN9otmwlEyZ_G_fjDJPY,3600
49
+ gnosisllm_knowledge/core/interfaces/chunker.py,sha256=FUu3B6Ent5Zofs1XLWZ0RqevHBbGd7iNRO7pAg2JqdE,1862
50
+ gnosisllm_knowledge/core/interfaces/fetcher.py,sha256=19u2TKE6rDjX-8l7xIRKUqa6DLmZz_RncPy1p0sN3tk,3318
51
+ gnosisllm_knowledge/core/interfaces/indexer.py,sha256=4a33oyhYetAiQ6TF2u7ICPyjjidGwsrjILJ0i0YZCqY,6166
52
+ gnosisllm_knowledge/core/interfaces/loader.py,sha256=NKq5Yj1Pmbv1I8AUMDtleUCZO5URZFw6kCdx6uLG7Bk,2903
53
+ gnosisllm_knowledge/core/interfaces/memory.py,sha256=xrgPsqSfmj1-Snmyd35b-HOKipI_9N_FWRQklHj6x8I,13057
54
+ gnosisllm_knowledge/core/interfaces/searcher.py,sha256=c76SH2DD3EEVmaD6TuVjZu5hP6HjoyawUoiT9aANZz0,4634
55
+ gnosisllm_knowledge/core/interfaces/setup.py,sha256=9DMKVqoNUrWKbS58QCnfwlGk4sD9R5iGe-WLwlW7z-Q,4457
56
+ gnosisllm_knowledge/core/interfaces/streaming.py,sha256=jR7DGZdY2YJwyZdVxEh8qnst093nGcyrvKzj7QDbAhI,3842
57
+ gnosisllm_knowledge/core/streaming/__init__.py,sha256=-PKIWbSu9bI3X3H8bucjuoqBGBiH0UOvM9OSn9dh1Rs,814
58
+ gnosisllm_knowledge/core/streaming/pipeline.py,sha256=H3_9gAvemZp5AdsbrZ5OTbY9aDAfwsl58eq7vOhA09k,6429
59
+ gnosisllm_knowledge/fetchers/__init__.py,sha256=CiupP4NdIPzWme6SKp--a_wDX1qAy-QBUO_bjoVDFBQ,393
60
+ gnosisllm_knowledge/fetchers/config.py,sha256=msUHhTzCGa-cASzoXeAhXFNrDpY9E1XaDo_gqs2CtrU,2611
61
+ gnosisllm_knowledge/fetchers/http.py,sha256=nQjH1nKTIR65tmbfW6RWaP3pR5JJe4j33cTzSBWHM-E,5133
62
+ gnosisllm_knowledge/fetchers/neoreader.py,sha256=Gc5SqHr9e3zvP9TE_xHmW_iwXcYq0UqDCzob7frkaqM,6637
63
+ gnosisllm_knowledge/loaders/__init__.py,sha256=4XlrhFapi9uWsHUAG2eeQEfc47T75a9GRUXde1dmom4,387
64
+ gnosisllm_knowledge/loaders/base.py,sha256=bqFzWFD-jeBXdovAuiRUgLKvl5ExaBoDrS0L9e5JhqY,13020
65
+ gnosisllm_knowledge/loaders/factory.py,sha256=gmUqYT3yTijMLP0XRldFWlgLFWdmdvKrj5WvD3RMZw0,6374
66
+ gnosisllm_knowledge/loaders/sitemap.py,sha256=2VZ7iSYjjQ_od-FuHl9x6dFB5rj4XToi6RWfFR45O4Y,14349
67
+ gnosisllm_knowledge/loaders/sitemap_streaming.py,sha256=KkkIg_oJxJrjQP88kS_jvqQvCShGE9vTGVVeiAr0VDE,8728
68
+ gnosisllm_knowledge/loaders/website.py,sha256=i54S7X0wTYNw9jJQfaoWFqMkGJkbAJeBv-OFBNjPQ_g,1587
69
+ gnosisllm_knowledge/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
+ gnosisllm_knowledge/services/__init__.py,sha256=qOn1CjsB25UQ2K1TQIGMBe9-CUrGxAKhBrNh9Awo8n8,273
71
+ gnosisllm_knowledge/services/indexing.py,sha256=7SLn0jOcT8g1hlB758HnLkMjsFKxtIKXsXQj_8eo0Q8,12310
72
+ gnosisllm_knowledge/services/search.py,sha256=9GCI7TyC43Yd2bMc4WaAuHQy_q5fSXXPruqHGvWo4LI,11306
73
+ gnosisllm_knowledge/services/streaming_pipeline.py,sha256=TyzKa5H_sIVNVFHivu4EIBgCtMq_kkmgBMsgvqG4cq0,10056
74
+ gnosisllm_knowledge-0.3.0.dist-info/METADATA,sha256=LrSUd1lpnaqEGJ2BwGrjNUMA0uDhdf8B5YbtYHjNDtw,15466
75
+ gnosisllm_knowledge-0.3.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
76
+ gnosisllm_knowledge-0.3.0.dist-info/entry_points.txt,sha256=-4wtWCTX7bT8WessWJyqfkQ99-2aCVuSoTL1S_QpaOo,68
77
+ gnosisllm_knowledge-0.3.0.dist-info/RECORD,,
@@ -1,64 +0,0 @@
1
- gnosisllm_knowledge/__init__.py,sha256=4pqB289D-9CG7nTnzLfGLwZFTkmnl9REtOAhyDhKE-g,3675
2
- gnosisllm_knowledge/api/__init__.py,sha256=YOiYXDvA1UPFKpZve_F-wKxN_NNyyiftHEzqsYmRd0I,129
3
- gnosisllm_knowledge/api/knowledge.py,sha256=on00xHGBe80xq1q2qtmAFTLrdeWGRUKGP8EUiTKVk0o,16791
4
- gnosisllm_knowledge/backends/__init__.py,sha256=8O0Lsi7gDVbviUmHFjy2rV4eZ2R354Amq-G2EL2eZtk,708
5
- gnosisllm_knowledge/backends/memory/__init__.py,sha256=Q_2Fh0-Xs1f7CsNn9V7z8NLW0P7F1owmxZQ4k3fTSXo,238
6
- gnosisllm_knowledge/backends/memory/indexer.py,sha256=R_Yd1gEplzS01o7QfPxjaAZ21VxjfdvatbgrNsyp5lM,10517
7
- gnosisllm_knowledge/backends/memory/searcher.py,sha256=k6OGtppC-UsHB8aIhlK3wSASVOPEokfe6LLV1jbmE5M,15547
8
- gnosisllm_knowledge/backends/opensearch/__init__.py,sha256=wwg3QPVVMLkq5qHUGw_9m6gvXO3hxa-xaBj3_BRJlN4,679
9
- gnosisllm_knowledge/backends/opensearch/agentic.py,sha256=UJdiVDaxQARigOQz0cVfPrduxF8Oa7EH96lorjwji98,25462
10
- gnosisllm_knowledge/backends/opensearch/config.py,sha256=P30mOAVpo4bEKNHHP04lX2ttzNXgDbu1i-SfobcURNk,7256
11
- gnosisllm_knowledge/backends/opensearch/indexer.py,sha256=fkfpCwg7Ka2UwDl2L0V1z9sXlvnQbyYMiFeKk1Q1D1Q,15101
12
- gnosisllm_knowledge/backends/opensearch/mappings.py,sha256=ssev3HFLf82lB1guzqZ0iDQE1C6ppvG1HNGVjG4vwAU,7873
13
- gnosisllm_knowledge/backends/opensearch/queries.py,sha256=IEZ_teGqc80OFrzD4XIwUArXRre-UhQWIH2oZnRGvC8,13301
14
- gnosisllm_knowledge/backends/opensearch/searcher.py,sha256=j6j0kzLSxgDRCk1fkqZ642rAXONLa-hnzZr1qEQ1CKI,11594
15
- gnosisllm_knowledge/backends/opensearch/setup.py,sha256=mZoHBxMK_WZA63F5PviLvGLeH8CqmAn9XM0FnuJXfrQ,52319
16
- gnosisllm_knowledge/chunking/__init__.py,sha256=XKrk04DqwhhPxxP_SLGnQrVUo2fexmvzuEN9YzO4Jxk,225
17
- gnosisllm_knowledge/chunking/fixed.py,sha256=LXZhRbYbtg4hQzqrAKyGrM_zmDhqJWXDi6cHOiJlGrM,3905
18
- gnosisllm_knowledge/chunking/sentence.py,sha256=EqY2Y1dpfNK_qukXQC9QYrKN8b1dqyyX9TZN5bUYGqs,7271
19
- gnosisllm_knowledge/cli/__init__.py,sha256=G8AO-LwNQqXSKZCFxLiXggOQf-xmNITWVs25xWl_-Cg,564
20
- gnosisllm_knowledge/cli/app.py,sha256=4Nm5ccxjNHQw9jy9VH7EJ7-rn138i_fPU1yzaef8ELE,15132
21
- gnosisllm_knowledge/cli/commands/__init__.py,sha256=TGrGl_AxVVXpAv01iO4JCUtWW8wzSQTBtQFj4vPeE0A,303
22
- gnosisllm_knowledge/cli/commands/agentic.py,sha256=XGZyDKu2TkNNhetzbDIp5zFbBeLwgSyfFfR3VZgZRQM,19836
23
- gnosisllm_knowledge/cli/commands/load.py,sha256=RZhLtw2Ba6LCceLTD665QE4QcOm-HBc9D-lEX1ReGLM,13117
24
- gnosisllm_knowledge/cli/commands/search.py,sha256=lj3kUXmvSZRA_z8utbN2Ph_2NczOuzGkuxILreJuj_o,15326
25
- gnosisllm_knowledge/cli/commands/setup.py,sha256=7NtGGulAggVVQVvzcDq-YLPZlqpGtdKDnYVXd1KPpiQ,7596
26
- gnosisllm_knowledge/cli/display/__init__.py,sha256=hLQ3XCBxw8C5WOT-wu1lqFyrD7FJVPHSWXUZM24Qnjc,155
27
- gnosisllm_knowledge/cli/display/service.py,sha256=klGJtc-w7LhNWUaG530QQIazc6c5t8laIM6bnwdyhlg,17537
28
- gnosisllm_knowledge/cli/utils/__init__.py,sha256=BlzSMhfXM_x9EAv304krVb_DHvdJaKLrlbb716LKkQI,106
29
- gnosisllm_knowledge/cli/utils/config.py,sha256=8iGzJfInv83lucAHSDfxA5wbTIzh9MlqB2-xa4vcwJg,7292
30
- gnosisllm_knowledge/core/__init__.py,sha256=yeZYSnaypTdStzt3_FERALGUgfC5fuudTCGixUm1_z0,1827
31
- gnosisllm_knowledge/core/domain/__init__.py,sha256=15IWkFNV-VKQnInFxMtY4FYh7pNmjYXDq4MPpSsAoPk,938
32
- gnosisllm_knowledge/core/domain/document.py,sha256=FYvM4Vi1DQeDIq4OEY94dX9eNMpQCmkDQRHkyYqq_WY,7765
33
- gnosisllm_knowledge/core/domain/result.py,sha256=xyPfselaG7EMhvmcYjepFOEseM4Mfc15Q1Ciq7KxQFE,5843
34
- gnosisllm_knowledge/core/domain/search.py,sha256=uMJZhGCQ_kS_R5kb1hN5VNEyGbWkuRL_ON_BR4BoqSM,10569
35
- gnosisllm_knowledge/core/domain/source.py,sha256=kKmWr3U01sJkfG8jtzAQDzxtVVzUOTSqEJZT5gGlYU8,4493
36
- gnosisllm_knowledge/core/events/__init__.py,sha256=pqWmPSuZIV3_teyYxGgNOLu8yaEw5jTO7A0tKDTydpE,540
37
- gnosisllm_knowledge/core/events/emitter.py,sha256=qFANzBtgdnQMVgLFE76rA-4i6Es_7ItaI-JfOl9vrNc,6940
38
- gnosisllm_knowledge/core/events/types.py,sha256=UtmCxkhSfgpHaeFtl43aarmw-eg84KdLuXMBAttICh0,6636
39
- gnosisllm_knowledge/core/exceptions.py,sha256=fOnE_w2fqX6uS7PGkyXJxiIWcySXpRhfQtUJVA4AFdw,10367
40
- gnosisllm_knowledge/core/interfaces/__init__.py,sha256=LpBUW0ABmIMUscNIaX-dVkkarqK2pXr0Gf1rg0TSrtU,775
41
- gnosisllm_knowledge/core/interfaces/agentic.py,sha256=OrS-3YRJ6Z6j1yAngsAv3B9fN9otmwlEyZ_G_fjDJPY,3600
42
- gnosisllm_knowledge/core/interfaces/chunker.py,sha256=FUu3B6Ent5Zofs1XLWZ0RqevHBbGd7iNRO7pAg2JqdE,1862
43
- gnosisllm_knowledge/core/interfaces/fetcher.py,sha256=19u2TKE6rDjX-8l7xIRKUqa6DLmZz_RncPy1p0sN3tk,3318
44
- gnosisllm_knowledge/core/interfaces/indexer.py,sha256=4a33oyhYetAiQ6TF2u7ICPyjjidGwsrjILJ0i0YZCqY,6166
45
- gnosisllm_knowledge/core/interfaces/loader.py,sha256=NKq5Yj1Pmbv1I8AUMDtleUCZO5URZFw6kCdx6uLG7Bk,2903
46
- gnosisllm_knowledge/core/interfaces/searcher.py,sha256=c76SH2DD3EEVmaD6TuVjZu5hP6HjoyawUoiT9aANZz0,4634
47
- gnosisllm_knowledge/core/interfaces/setup.py,sha256=9DMKVqoNUrWKbS58QCnfwlGk4sD9R5iGe-WLwlW7z-Q,4457
48
- gnosisllm_knowledge/fetchers/__init__.py,sha256=CiupP4NdIPzWme6SKp--a_wDX1qAy-QBUO_bjoVDFBQ,393
49
- gnosisllm_knowledge/fetchers/config.py,sha256=msUHhTzCGa-cASzoXeAhXFNrDpY9E1XaDo_gqs2CtrU,2611
50
- gnosisllm_knowledge/fetchers/http.py,sha256=nQjH1nKTIR65tmbfW6RWaP3pR5JJe4j33cTzSBWHM-E,5133
51
- gnosisllm_knowledge/fetchers/neoreader.py,sha256=Gc5SqHr9e3zvP9TE_xHmW_iwXcYq0UqDCzob7frkaqM,6637
52
- gnosisllm_knowledge/loaders/__init__.py,sha256=4XlrhFapi9uWsHUAG2eeQEfc47T75a9GRUXde1dmom4,387
53
- gnosisllm_knowledge/loaders/base.py,sha256=T5m0zrtn-4lA3nYR6mzswQfPwCnYiRhVogzNBvYK2xA,13089
54
- gnosisllm_knowledge/loaders/factory.py,sha256=gmUqYT3yTijMLP0XRldFWlgLFWdmdvKrj5WvD3RMZw0,6374
55
- gnosisllm_knowledge/loaders/sitemap.py,sha256=sbsLYs_EugwJRWXOOawpCy7iB2lu46ZW9_3eNymp33I,9524
56
- gnosisllm_knowledge/loaders/website.py,sha256=i54S7X0wTYNw9jJQfaoWFqMkGJkbAJeBv-OFBNjPQ_g,1587
57
- gnosisllm_knowledge/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- gnosisllm_knowledge/services/__init__.py,sha256=qOn1CjsB25UQ2K1TQIGMBe9-CUrGxAKhBrNh9Awo8n8,273
59
- gnosisllm_knowledge/services/indexing.py,sha256=ZVDDV2_Zlv6zmCWg-VSNeczieR7LyNaqzXcaFP-uvsE,12471
60
- gnosisllm_knowledge/services/search.py,sha256=ft8Q7rtRKqXVZ0c_bVqa01jDaV5UQF51LnrY2ICfC1Q,10156
61
- gnosisllm_knowledge-0.2.0.dist-info/METADATA,sha256=Q5bOjQAt93BXqPFdSF_3XlZh_6ystmXCX8-hcSIuwpg,14152
62
- gnosisllm_knowledge-0.2.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
63
- gnosisllm_knowledge-0.2.0.dist-info/entry_points.txt,sha256=-4wtWCTX7bT8WessWJyqfkQ99-2aCVuSoTL1S_QpaOo,68
64
- gnosisllm_knowledge-0.2.0.dist-info/RECORD,,