gnosisllm-knowledge 0.2.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/PKG-INFO +73 -10
  2. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/README.md +72 -9
  3. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/pyproject.toml +1 -1
  4. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/__init__.py +91 -39
  5. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/api/__init__.py +6 -0
  6. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/api/knowledge.py +1018 -0
  7. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/api/memory.py +966 -0
  8. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/__init__.py +14 -5
  9. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/memory/indexer.py +27 -2
  10. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/memory/searcher.py +111 -10
  11. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/agentic.py +355 -48
  12. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/config.py +49 -28
  13. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/indexer.py +49 -3
  14. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/mappings.py +14 -5
  15. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/__init__.py +12 -0
  16. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/client.py +1380 -0
  17. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/config.py +127 -0
  18. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/setup.py +322 -0
  19. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/queries.py +33 -33
  20. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/searcher.py +238 -0
  21. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/setup.py +308 -148
  22. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/app.py +436 -31
  23. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/agentic.py +26 -9
  24. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/load.py +169 -19
  25. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/cli/commands/memory.py +733 -0
  26. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/search.py +9 -10
  27. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/setup.py +49 -23
  28. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/display/service.py +43 -0
  29. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/utils/config.py +62 -4
  30. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/domain/__init__.py +97 -0
  31. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/domain/discovery.py +166 -0
  32. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/document.py +19 -19
  33. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/domain/memory.py +440 -0
  34. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/result.py +11 -3
  35. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/search.py +12 -25
  36. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/source.py +11 -12
  37. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/events/__init__.py +8 -0
  38. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/events/types.py +198 -5
  39. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/exceptions.py +227 -0
  40. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/__init__.py +17 -0
  41. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/agentic.py +11 -3
  42. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/indexer.py +10 -1
  43. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/interfaces/memory.py +524 -0
  44. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/searcher.py +10 -1
  45. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/interfaces/streaming.py +133 -0
  46. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/streaming/__init__.py +36 -0
  47. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/streaming/pipeline.py +228 -0
  48. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/__init__.py +8 -0
  49. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/config.py +27 -0
  50. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/neoreader.py +31 -3
  51. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/fetchers/neoreader_discovery.py +505 -0
  52. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/__init__.py +5 -1
  53. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/base.py +3 -4
  54. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/loaders/discovery.py +338 -0
  55. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/loaders/discovery_streaming.py +343 -0
  56. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/factory.py +46 -0
  57. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/sitemap.py +129 -1
  58. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/loaders/sitemap_streaming.py +258 -0
  59. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/services/indexing.py +100 -93
  60. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/services/search.py +84 -31
  61. gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/services/streaming_pipeline.py +334 -0
  62. gnosisllm_knowledge-0.2.0/src/gnosisllm_knowledge/api/__init__.py +0 -5
  63. gnosisllm_knowledge-0.2.0/src/gnosisllm_knowledge/api/knowledge.py +0 -548
  64. gnosisllm_knowledge-0.2.0/src/gnosisllm_knowledge/core/domain/__init__.py +0 -43
  65. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/memory/__init__.py +0 -0
  66. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/__init__.py +0 -0
  67. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/chunking/__init__.py +0 -0
  68. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/chunking/fixed.py +0 -0
  69. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/chunking/sentence.py +0 -0
  70. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/__init__.py +0 -0
  71. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/__init__.py +0 -0
  72. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/display/__init__.py +0 -0
  73. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/utils/__init__.py +0 -0
  74. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/__init__.py +0 -0
  75. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/events/emitter.py +0 -0
  76. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/chunker.py +0 -0
  77. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/fetcher.py +0 -0
  78. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/loader.py +0 -0
  79. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/setup.py +0 -0
  80. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/http.py +0 -0
  81. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/website.py +0 -0
  82. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/py.typed +0 -0
  83. {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/services/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gnosisllm-knowledge
3
- Version: 0.2.0
3
+ Version: 0.4.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,10 +41,12 @@ 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
47
- - **Multi-Tenancy**: Built-in support for account and collection isolation
49
+ - **Multi-Tenancy**: Index isolation for complete tenant separation (tenant-agnostic library)
48
50
  - **Event-Driven**: Observer pattern for progress tracking and monitoring
49
51
  - **SOLID Architecture**: Clean, maintainable, and extensible codebase
50
52
 
@@ -142,14 +144,15 @@ gnosisllm-knowledge load <URL> [OPTIONS]
142
144
 
143
145
  Options:
144
146
  --type Source type: website, sitemap (auto-detects)
145
- --index Target index name (default: knowledge)
146
- --account-id Multi-tenant account ID
147
+ --index Target index name (e.g., knowledge-tenant-123)
147
148
  --collection-id Collection grouping ID
148
149
  --batch-size Documents per batch (default: 100)
149
150
  --max-urls Max URLs from sitemap (default: 1000)
150
151
  --dry-run Preview without indexing
151
152
  ```
152
153
 
154
+ Multi-tenancy is achieved through index isolation. Use `--index` with tenant-specific names (e.g., `--index knowledge-tenant-123`).
155
+
153
156
  ### Search
154
157
 
155
158
  Search indexed content with multiple modes:
@@ -159,14 +162,15 @@ gnosisllm-knowledge search <QUERY> [OPTIONS]
159
162
 
160
163
  Options:
161
164
  --mode Search mode: semantic, keyword, hybrid, agentic
162
- --index Index to search (default: knowledge)
165
+ --index Index to search (e.g., knowledge-tenant-123)
163
166
  --limit Max results (default: 5)
164
- --account-id Filter by account
165
167
  --collection-ids Filter by collections (comma-separated)
166
168
  --json Output as JSON for scripting
167
169
  --interactive Interactive search session
168
170
  ```
169
171
 
172
+ Multi-tenancy is achieved through index isolation. Use `--index` with tenant-specific names.
173
+
170
174
  ## Architecture
171
175
 
172
176
  ```
@@ -317,22 +321,81 @@ agent_body = {
317
321
 
318
322
  ## Multi-Tenancy
319
323
 
324
+ This library is **tenant-agnostic**. Multi-tenancy is achieved through **index isolation** - each tenant gets their own OpenSearch index.
325
+
320
326
  ```python
321
- # Load with tenant isolation
327
+ # The calling application (e.g., API) constructs tenant-specific index names
328
+ index_name = f"knowledge-{account_id}"
329
+
330
+ # Create Knowledge instance for the tenant
331
+ knowledge = Knowledge.from_opensearch(
332
+ host="localhost",
333
+ port=9200,
334
+ index_prefix=index_name, # knowledge-tenant-123
335
+ )
336
+
337
+ # Load content to tenant's isolated index
322
338
  await knowledge.load(
323
339
  source="https://docs.example.com/sitemap.xml",
324
- account_id="tenant-123",
325
340
  collection_id="docs",
326
341
  )
327
342
 
328
- # Search within tenant
343
+ # Search within tenant's index (no account_id filter needed)
329
344
  results = await knowledge.search(
330
345
  "query",
331
- account_id="tenant-123",
332
346
  collection_ids=["docs"],
333
347
  )
334
348
  ```
335
349
 
350
+ **Note**: For audit purposes, you can store `account_id` in document metadata:
351
+ ```python
352
+ await knowledge.load(
353
+ source="https://docs.example.com/sitemap.xml",
354
+ document_defaults={"metadata": {"account_id": "tenant-123"}},
355
+ )
356
+ ```
357
+
358
+ ## Agentic Memory
359
+
360
+ Conversational memory with automatic fact extraction using OpenSearch's ML Memory plugin.
361
+
362
+ ```bash
363
+ # Setup memory connectors
364
+ gnosisllm-knowledge memory setup --openai-key sk-...
365
+
366
+ # Create container and store conversations
367
+ gnosisllm-knowledge memory container create my-memory
368
+ gnosisllm-knowledge memory store <container-id> --file messages.json --user-id alice
369
+ gnosisllm-knowledge memory recall <container-id> "user preferences" --user-id alice
370
+ ```
371
+
372
+ ```python
373
+ from gnosisllm_knowledge import Memory, MemoryStrategy, StrategyConfig, Message
374
+
375
+ memory = Memory.from_env()
376
+
377
+ # Create container with strategies
378
+ container = await memory.create_container(
379
+ name="agent-memory",
380
+ strategies=[
381
+ StrategyConfig(type=MemoryStrategy.SEMANTIC, namespace=["user_id"]),
382
+ ],
383
+ )
384
+
385
+ # Store conversation with fact extraction
386
+ await memory.store(
387
+ container_id=container.id,
388
+ messages=[Message(role="user", content="I prefer dark mode")],
389
+ user_id="alice",
390
+ infer=True,
391
+ )
392
+
393
+ # Recall memories
394
+ result = await memory.recall(container.id, "preferences", user_id="alice")
395
+ ```
396
+
397
+ See [docs/memory.md](docs/memory.md) for full documentation.
398
+
336
399
  ## Event Tracking
337
400
 
338
401
  ```python
@@ -6,10 +6,12 @@ Enterprise-grade knowledge loading, indexing, and semantic search library for Py
6
6
 
7
7
  - **Semantic Search**: Vector-based similarity search using OpenAI embeddings
8
8
  - **Hybrid Search**: Combine semantic and keyword (BM25) search for best results
9
+ - **Agentic Search**: AI-powered search with reasoning and natural language answers
10
+ - **Agentic Memory**: Conversational memory with automatic fact extraction
9
11
  - **Multiple Loaders**: Load content from websites, sitemaps, and files
10
12
  - **Intelligent Chunking**: Sentence-aware text splitting with configurable overlap
11
13
  - **OpenSearch Backend**: Production-ready with k-NN vector search
12
- - **Multi-Tenancy**: Built-in support for account and collection isolation
14
+ - **Multi-Tenancy**: Index isolation for complete tenant separation (tenant-agnostic library)
13
15
  - **Event-Driven**: Observer pattern for progress tracking and monitoring
14
16
  - **SOLID Architecture**: Clean, maintainable, and extensible codebase
15
17
 
@@ -107,14 +109,15 @@ gnosisllm-knowledge load <URL> [OPTIONS]
107
109
 
108
110
  Options:
109
111
  --type Source type: website, sitemap (auto-detects)
110
- --index Target index name (default: knowledge)
111
- --account-id Multi-tenant account ID
112
+ --index Target index name (e.g., knowledge-tenant-123)
112
113
  --collection-id Collection grouping ID
113
114
  --batch-size Documents per batch (default: 100)
114
115
  --max-urls Max URLs from sitemap (default: 1000)
115
116
  --dry-run Preview without indexing
116
117
  ```
117
118
 
119
+ Multi-tenancy is achieved through index isolation. Use `--index` with tenant-specific names (e.g., `--index knowledge-tenant-123`).
120
+
118
121
  ### Search
119
122
 
120
123
  Search indexed content with multiple modes:
@@ -124,14 +127,15 @@ gnosisllm-knowledge search <QUERY> [OPTIONS]
124
127
 
125
128
  Options:
126
129
  --mode Search mode: semantic, keyword, hybrid, agentic
127
- --index Index to search (default: knowledge)
130
+ --index Index to search (e.g., knowledge-tenant-123)
128
131
  --limit Max results (default: 5)
129
- --account-id Filter by account
130
132
  --collection-ids Filter by collections (comma-separated)
131
133
  --json Output as JSON for scripting
132
134
  --interactive Interactive search session
133
135
  ```
134
136
 
137
+ Multi-tenancy is achieved through index isolation. Use `--index` with tenant-specific names.
138
+
135
139
  ## Architecture
136
140
 
137
141
  ```
@@ -282,22 +286,81 @@ agent_body = {
282
286
 
283
287
  ## Multi-Tenancy
284
288
 
289
+ This library is **tenant-agnostic**. Multi-tenancy is achieved through **index isolation** - each tenant gets their own OpenSearch index.
290
+
285
291
  ```python
286
- # Load with tenant isolation
292
+ # The calling application (e.g., API) constructs tenant-specific index names
293
+ index_name = f"knowledge-{account_id}"
294
+
295
+ # Create Knowledge instance for the tenant
296
+ knowledge = Knowledge.from_opensearch(
297
+ host="localhost",
298
+ port=9200,
299
+ index_prefix=index_name, # knowledge-tenant-123
300
+ )
301
+
302
+ # Load content to tenant's isolated index
287
303
  await knowledge.load(
288
304
  source="https://docs.example.com/sitemap.xml",
289
- account_id="tenant-123",
290
305
  collection_id="docs",
291
306
  )
292
307
 
293
- # Search within tenant
308
+ # Search within tenant's index (no account_id filter needed)
294
309
  results = await knowledge.search(
295
310
  "query",
296
- account_id="tenant-123",
297
311
  collection_ids=["docs"],
298
312
  )
299
313
  ```
300
314
 
315
+ **Note**: For audit purposes, you can store `account_id` in document metadata:
316
+ ```python
317
+ await knowledge.load(
318
+ source="https://docs.example.com/sitemap.xml",
319
+ document_defaults={"metadata": {"account_id": "tenant-123"}},
320
+ )
321
+ ```
322
+
323
+ ## Agentic Memory
324
+
325
+ Conversational memory with automatic fact extraction using OpenSearch's ML Memory plugin.
326
+
327
+ ```bash
328
+ # Setup memory connectors
329
+ gnosisllm-knowledge memory setup --openai-key sk-...
330
+
331
+ # Create container and store conversations
332
+ gnosisllm-knowledge memory container create my-memory
333
+ gnosisllm-knowledge memory store <container-id> --file messages.json --user-id alice
334
+ gnosisllm-knowledge memory recall <container-id> "user preferences" --user-id alice
335
+ ```
336
+
337
+ ```python
338
+ from gnosisllm_knowledge import Memory, MemoryStrategy, StrategyConfig, Message
339
+
340
+ memory = Memory.from_env()
341
+
342
+ # Create container with strategies
343
+ container = await memory.create_container(
344
+ name="agent-memory",
345
+ strategies=[
346
+ StrategyConfig(type=MemoryStrategy.SEMANTIC, namespace=["user_id"]),
347
+ ],
348
+ )
349
+
350
+ # Store conversation with fact extraction
351
+ await memory.store(
352
+ container_id=container.id,
353
+ messages=[Message(role="user", content="I prefer dark mode")],
354
+ user_id="alice",
355
+ infer=True,
356
+ )
357
+
358
+ # Recall memories
359
+ result = await memory.recall(container.id, "preferences", user_id="alice")
360
+ ```
361
+
362
+ See [docs/memory.md](docs/memory.md) for full documentation.
363
+
301
364
  ## Event Tracking
302
365
 
303
366
  ```python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gnosisllm-knowledge"
3
- version = "0.2.0"
3
+ version = "0.4.0"
4
4
  description = "Enterprise-grade knowledge loading, indexing, and search for Python"
5
5
  authors = [
6
6
  {name = "David Marsa", email = "david.marsa@neomanex.com"},
@@ -38,7 +38,7 @@ Features:
38
38
  - SOLID principles throughout
39
39
  """
40
40
 
41
- from gnosisllm_knowledge.api import Knowledge
41
+ from gnosisllm_knowledge.api import Knowledge, Memory
42
42
  from gnosisllm_knowledge.backends import (
43
43
  AgenticSearchFallback,
44
44
  MemoryIndexer,
@@ -51,6 +51,20 @@ from gnosisllm_knowledge.backends import (
51
51
  )
52
52
  from gnosisllm_knowledge.chunking import FixedSizeChunker, SentenceChunker
53
53
  from gnosisllm_knowledge.core.domain.document import Document, DocumentStatus, TextChunk
54
+ from gnosisllm_knowledge.core.domain.memory import (
55
+ ContainerConfig,
56
+ ContainerInfo,
57
+ HistoryEntry,
58
+ MemoryEntry,
59
+ MemoryStats,
60
+ MemoryStrategy,
61
+ MemoryType,
62
+ Message,
63
+ Namespace,
64
+ RecallResult,
65
+ SessionInfo,
66
+ StrategyConfig,
67
+ )
54
68
  from gnosisllm_knowledge.core.domain.result import (
55
69
  BatchResult,
56
70
  IndexResult,
@@ -58,9 +72,9 @@ from gnosisllm_knowledge.core.domain.result import (
58
72
  ValidationResult,
59
73
  )
60
74
  from gnosisllm_knowledge.core.domain.search import (
61
- AgentType,
62
75
  AgenticSearchQuery,
63
76
  AgenticSearchResult,
77
+ AgentType,
64
78
  ReasoningStep,
65
79
  SearchMode,
66
80
  SearchQuery,
@@ -72,15 +86,27 @@ from gnosisllm_knowledge.core.exceptions import (
72
86
  AgenticSearchError,
73
87
  ConfigurationError,
74
88
  ConnectionError,
89
+ ContainerExistsError,
90
+ ContainerNotFoundError,
75
91
  IndexError,
92
+ InferenceError,
93
+ InferenceTimeoutError,
76
94
  KnowledgeError,
77
95
  LoadError,
96
+ MemoryConfigurationError,
97
+ MemoryError,
78
98
  SearchError,
99
+ SessionNotFoundError,
100
+ )
101
+ from gnosisllm_knowledge.core.streaming import (
102
+ BatchCollector,
103
+ BoundedQueue,
104
+ PipelineConfig,
79
105
  )
80
106
  from gnosisllm_knowledge.fetchers import (
81
107
  HTTPContentFetcher,
82
- NeoreaderContentFetcher,
83
108
  NeoreaderConfig,
109
+ NeoreaderContentFetcher,
84
110
  )
85
111
  from gnosisllm_knowledge.loaders import (
86
112
  LoaderFactory,
@@ -95,58 +121,84 @@ from gnosisllm_knowledge.services import (
95
121
  __version__ = "0.2.0"
96
122
 
97
123
  __all__ = [
98
- # Main API
99
- "Knowledge",
100
- # Domain Models
101
- "Document",
102
- "DocumentStatus",
103
- "TextChunk",
104
- "SearchQuery",
105
- "SearchResult",
106
- "SearchResultItem",
107
- "SearchMode",
108
124
  "AgentType",
125
+ "AgenticSearchError",
126
+ "AgenticSearchFallback",
109
127
  "AgenticSearchQuery",
110
128
  "AgenticSearchResult",
111
- "ReasoningStep",
112
- "LoadResult",
113
- "IndexResult",
129
+ "BatchCollector",
114
130
  "BatchResult",
115
- "ValidationResult",
131
+ "BoundedQueue",
132
+ "ConfigurationError",
133
+ "ConnectionError",
134
+ "ContainerConfig",
135
+ "ContainerExistsError",
136
+ "ContainerInfo",
137
+ "ContainerNotFoundError",
138
+ # Domain Models
139
+ "Document",
140
+ "DocumentStatus",
116
141
  # Events
117
142
  "Event",
118
- "EventType",
119
143
  "EventEmitter",
144
+ "EventType",
145
+ "FixedSizeChunker",
146
+ # Fetchers
147
+ "HTTPContentFetcher",
148
+ "HistoryEntry",
149
+ "IndexError",
150
+ "IndexResult",
151
+ "InferenceError",
152
+ "InferenceTimeoutError",
153
+ # Main API
154
+ "Knowledge",
120
155
  # Exceptions
121
156
  "KnowledgeError",
122
- "ConfigurationError",
123
- "ConnectionError",
157
+ # Services
158
+ "KnowledgeIndexingService",
159
+ "KnowledgeSearchService",
124
160
  "LoadError",
125
- "IndexError",
126
- "SearchError",
127
- "AgenticSearchError",
161
+ "LoadResult",
128
162
  # Loaders
129
163
  "LoaderFactory",
130
- "WebsiteLoader",
131
- "SitemapLoader",
132
- # Fetchers
133
- "HTTPContentFetcher",
134
- "NeoreaderContentFetcher",
164
+ "Memory",
165
+ "MemoryConfigurationError",
166
+ "MemoryEntry",
167
+ # Memory Exceptions
168
+ "MemoryError",
169
+ # Memory Backend (for testing)
170
+ "MemoryIndexer",
171
+ "MemorySearcher",
172
+ "MemoryStats",
173
+ # Memory Domain Models
174
+ "MemoryStrategy",
175
+ "MemoryType",
176
+ "Message",
177
+ "Namespace",
135
178
  "NeoreaderConfig",
136
- # Chunkers
137
- "SentenceChunker",
138
- "FixedSizeChunker",
179
+ "NeoreaderContentFetcher",
180
+ "OpenSearchAgenticSearcher",
139
181
  # OpenSearch Backend
140
182
  "OpenSearchConfig",
141
183
  "OpenSearchIndexer",
142
184
  "OpenSearchKnowledgeSearcher",
143
185
  "OpenSearchSetupAdapter",
144
- "OpenSearchAgenticSearcher",
145
- "AgenticSearchFallback",
146
- # Memory Backend (for testing)
147
- "MemoryIndexer",
148
- "MemorySearcher",
149
- # Services
150
- "KnowledgeIndexingService",
151
- "KnowledgeSearchService",
186
+ # Streaming Pipeline
187
+ "PipelineConfig",
188
+ "ReasoningStep",
189
+ "RecallResult",
190
+ "SearchError",
191
+ "SearchMode",
192
+ "SearchQuery",
193
+ "SearchResult",
194
+ "SearchResultItem",
195
+ # Chunkers
196
+ "SentenceChunker",
197
+ "SessionInfo",
198
+ "SessionNotFoundError",
199
+ "SitemapLoader",
200
+ "StrategyConfig",
201
+ "TextChunk",
202
+ "ValidationResult",
203
+ "WebsiteLoader",
152
204
  ]
@@ -0,0 +1,6 @@
1
+ """High-level API for knowledge and memory operations."""
2
+
3
+ from gnosisllm_knowledge.api.knowledge import Knowledge
4
+ from gnosisllm_knowledge.api.memory import Memory
5
+
6
+ __all__ = ["Knowledge", "Memory"]