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.
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/PKG-INFO +73 -10
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/README.md +72 -9
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/pyproject.toml +1 -1
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/__init__.py +91 -39
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/api/__init__.py +6 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/api/knowledge.py +1018 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/api/memory.py +966 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/__init__.py +14 -5
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/memory/indexer.py +27 -2
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/memory/searcher.py +111 -10
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/agentic.py +355 -48
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/config.py +49 -28
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/indexer.py +49 -3
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/mappings.py +14 -5
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/__init__.py +12 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/client.py +1380 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/config.py +127 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/backends/opensearch/memory/setup.py +322 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/queries.py +33 -33
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/searcher.py +238 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/setup.py +308 -148
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/app.py +436 -31
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/agentic.py +26 -9
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/load.py +169 -19
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/cli/commands/memory.py +733 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/search.py +9 -10
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/setup.py +49 -23
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/display/service.py +43 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/utils/config.py +62 -4
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/domain/__init__.py +97 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/domain/discovery.py +166 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/document.py +19 -19
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/domain/memory.py +440 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/result.py +11 -3
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/search.py +12 -25
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/domain/source.py +11 -12
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/events/__init__.py +8 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/events/types.py +198 -5
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/exceptions.py +227 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/__init__.py +17 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/agentic.py +11 -3
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/indexer.py +10 -1
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/interfaces/memory.py +524 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/searcher.py +10 -1
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/interfaces/streaming.py +133 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/streaming/__init__.py +36 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/core/streaming/pipeline.py +228 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/__init__.py +8 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/config.py +27 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/neoreader.py +31 -3
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/fetchers/neoreader_discovery.py +505 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/__init__.py +5 -1
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/base.py +3 -4
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/loaders/discovery.py +338 -0
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/loaders/discovery_streaming.py +343 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/factory.py +46 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/sitemap.py +129 -1
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/loaders/sitemap_streaming.py +258 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/services/indexing.py +100 -93
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/services/search.py +84 -31
- gnosisllm_knowledge-0.4.0/src/gnosisllm_knowledge/services/streaming_pipeline.py +334 -0
- gnosisllm_knowledge-0.2.0/src/gnosisllm_knowledge/api/__init__.py +0 -5
- gnosisllm_knowledge-0.2.0/src/gnosisllm_knowledge/api/knowledge.py +0 -548
- gnosisllm_knowledge-0.2.0/src/gnosisllm_knowledge/core/domain/__init__.py +0 -43
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/memory/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/backends/opensearch/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/chunking/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/chunking/fixed.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/chunking/sentence.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/commands/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/display/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/cli/utils/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/__init__.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/events/emitter.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/chunker.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/fetcher.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/loader.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/core/interfaces/setup.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/fetchers/http.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/loaders/website.py +0 -0
- {gnosisllm_knowledge-0.2.0 → gnosisllm_knowledge-0.4.0}/src/gnosisllm_knowledge/py.typed +0 -0
- {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.
|
|
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**:
|
|
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 (
|
|
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 (
|
|
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
|
-
#
|
|
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**:
|
|
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 (
|
|
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 (
|
|
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
|
-
#
|
|
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
|
|
@@ -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
|
-
"
|
|
112
|
-
"LoadResult",
|
|
113
|
-
"IndexResult",
|
|
129
|
+
"BatchCollector",
|
|
114
130
|
"BatchResult",
|
|
115
|
-
"
|
|
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
|
-
|
|
123
|
-
"
|
|
157
|
+
# Services
|
|
158
|
+
"KnowledgeIndexingService",
|
|
159
|
+
"KnowledgeSearchService",
|
|
124
160
|
"LoadError",
|
|
125
|
-
"
|
|
126
|
-
"SearchError",
|
|
127
|
-
"AgenticSearchError",
|
|
161
|
+
"LoadResult",
|
|
128
162
|
# Loaders
|
|
129
163
|
"LoaderFactory",
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"
|
|
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
|
-
|
|
137
|
-
"
|
|
138
|
-
"FixedSizeChunker",
|
|
179
|
+
"NeoreaderContentFetcher",
|
|
180
|
+
"OpenSearchAgenticSearcher",
|
|
139
181
|
# OpenSearch Backend
|
|
140
182
|
"OpenSearchConfig",
|
|
141
183
|
"OpenSearchIndexer",
|
|
142
184
|
"OpenSearchKnowledgeSearcher",
|
|
143
185
|
"OpenSearchSetupAdapter",
|
|
144
|
-
|
|
145
|
-
"
|
|
146
|
-
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
|
|
150
|
-
"
|
|
151
|
-
"
|
|
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
|
]
|