okb 1.0.0__py3-none-any.whl → 1.1.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.
- okb/cli.py +1209 -16
- okb/config.py +122 -4
- okb/http_server.py +208 -2
- okb/llm/analyze.py +524 -0
- okb/llm/consolidate.py +685 -0
- okb/llm/enrich.py +723 -0
- okb/llm/extractors/__init__.py +13 -0
- okb/llm/extractors/base.py +44 -0
- okb/llm/extractors/cross_doc.py +478 -0
- okb/llm/extractors/dedup.py +499 -0
- okb/llm/extractors/entity.py +369 -0
- okb/llm/extractors/todo.py +149 -0
- okb/llm/providers.py +9 -6
- okb/mcp_server.py +1279 -12
- okb/migrations/0008.enrichment.sql +46 -0
- okb/migrations/0009.entity-consolidation.sql +120 -0
- okb/migrations/0010.token-id.sql +7 -0
- okb/modal_llm.py +26 -8
- okb/plugins/sources/__init__.py +2 -1
- okb/plugins/sources/dropbox_paper.py +44 -9
- okb/plugins/sources/github.py +5 -5
- okb/plugins/sources/todoist.py +254 -0
- okb/tokens.py +25 -3
- {okb-1.0.0.dist-info → okb-1.1.0.dist-info}/METADATA +119 -68
- okb-1.1.0.dist-info/RECORD +49 -0
- {okb-1.0.0.dist-info → okb-1.1.0.dist-info}/entry_points.txt +1 -0
- okb-1.0.0.dist-info/RECORD +0 -36
- {okb-1.0.0.dist-info → okb-1.1.0.dist-info}/WHEEL +0 -0
okb/tokens.py
CHANGED
|
@@ -22,6 +22,7 @@ from psycopg.rows import dict_row
|
|
|
22
22
|
class TokenInfo:
|
|
23
23
|
"""Information about a token."""
|
|
24
24
|
|
|
25
|
+
id: int
|
|
25
26
|
token_hash: str
|
|
26
27
|
database: str
|
|
27
28
|
permissions: str # 'ro' or 'rw'
|
|
@@ -143,7 +144,7 @@ def list_tokens(db_url: str) -> list[TokenInfo]:
|
|
|
143
144
|
with psycopg.connect(db_url, row_factory=dict_row) as conn:
|
|
144
145
|
results = conn.execute(
|
|
145
146
|
"""
|
|
146
|
-
SELECT token_hash, permissions, description, created_at, last_used_at
|
|
147
|
+
SELECT id, token_hash, permissions, description, created_at, last_used_at
|
|
147
148
|
FROM tokens
|
|
148
149
|
ORDER BY created_at DESC
|
|
149
150
|
"""
|
|
@@ -151,6 +152,7 @@ def list_tokens(db_url: str) -> list[TokenInfo]:
|
|
|
151
152
|
|
|
152
153
|
return [
|
|
153
154
|
TokenInfo(
|
|
155
|
+
id=r["id"],
|
|
154
156
|
token_hash=r["token_hash"],
|
|
155
157
|
database=db_name,
|
|
156
158
|
permissions=r["permissions"],
|
|
@@ -171,7 +173,7 @@ def delete_token(db_url: str, token_or_prefix: str) -> bool:
|
|
|
171
173
|
|
|
172
174
|
Args:
|
|
173
175
|
db_url: Database connection URL
|
|
174
|
-
token_or_prefix: Full token or token prefix (e.g., '
|
|
176
|
+
token_or_prefix: Full token or token prefix (e.g., 'okb_personal_ro')
|
|
175
177
|
|
|
176
178
|
Returns:
|
|
177
179
|
True if token was deleted, False if not found
|
|
@@ -199,6 +201,25 @@ def delete_token(db_url: str, token_or_prefix: str) -> bool:
|
|
|
199
201
|
return False
|
|
200
202
|
|
|
201
203
|
|
|
204
|
+
def delete_token_by_id(db_url: str, token_id: int) -> bool:
|
|
205
|
+
"""Delete a token by its ID.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
db_url: Database connection URL
|
|
209
|
+
token_id: Token ID from the tokens table
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
True if token was deleted, False if not found
|
|
213
|
+
"""
|
|
214
|
+
with psycopg.connect(db_url) as conn:
|
|
215
|
+
result = conn.execute(
|
|
216
|
+
"DELETE FROM tokens WHERE id = %s RETURNING id",
|
|
217
|
+
(token_id,),
|
|
218
|
+
).fetchone()
|
|
219
|
+
conn.commit()
|
|
220
|
+
return result is not None
|
|
221
|
+
|
|
222
|
+
|
|
202
223
|
def verify_token(token: str, get_db_url_fn) -> TokenInfo | None:
|
|
203
224
|
"""Verify a token and return its info if valid.
|
|
204
225
|
|
|
@@ -225,7 +246,7 @@ def verify_token(token: str, get_db_url_fn) -> TokenInfo | None:
|
|
|
225
246
|
with psycopg.connect(db_url, row_factory=dict_row) as conn:
|
|
226
247
|
result = conn.execute(
|
|
227
248
|
"""
|
|
228
|
-
SELECT token_hash, permissions, description, created_at, last_used_at
|
|
249
|
+
SELECT id, token_hash, permissions, description, created_at, last_used_at
|
|
229
250
|
FROM tokens
|
|
230
251
|
WHERE token_hash = %s
|
|
231
252
|
""",
|
|
@@ -243,6 +264,7 @@ def verify_token(token: str, get_db_url_fn) -> TokenInfo | None:
|
|
|
243
264
|
conn.commit()
|
|
244
265
|
|
|
245
266
|
return TokenInfo(
|
|
267
|
+
id=result["id"],
|
|
246
268
|
token_hash=result["token_hash"],
|
|
247
269
|
database=database,
|
|
248
270
|
permissions=result["permissions"],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: okb
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Personal knowledge base with semantic search for LLMs
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -13,6 +13,7 @@ Provides-Extra: docx
|
|
|
13
13
|
Provides-Extra: llm
|
|
14
14
|
Provides-Extra: llm-bedrock
|
|
15
15
|
Provides-Extra: pdf
|
|
16
|
+
Provides-Extra: todoist
|
|
16
17
|
Provides-Extra: web
|
|
17
18
|
Requires-Dist: PyGithub (>=2.0.0)
|
|
18
19
|
Requires-Dist: anthropic (>=0.40.0) ; extra == "all"
|
|
@@ -35,10 +36,15 @@ Requires-Dist: python-docx (>=1.1.0) ; extra == "docx"
|
|
|
35
36
|
Requires-Dist: pyyaml (>=6.0)
|
|
36
37
|
Requires-Dist: ruff (>=0.1.0) ; extra == "dev"
|
|
37
38
|
Requires-Dist: sentence-transformers (>=2.2.0)
|
|
39
|
+
Requires-Dist: todoist-api-python (>=3.0.0) ; extra == "all"
|
|
40
|
+
Requires-Dist: todoist-api-python (>=3.0.0) ; extra == "todoist"
|
|
38
41
|
Requires-Dist: trafilatura (>=1.6.0) ; extra == "all"
|
|
39
42
|
Requires-Dist: trafilatura (>=1.6.0) ; extra == "web"
|
|
40
43
|
Requires-Dist: watchdog (>=3.0.0)
|
|
41
44
|
Requires-Dist: yoyo-migrations (>=8.0.0)
|
|
45
|
+
Project-URL: Homepage, https://github.com/username/okb
|
|
46
|
+
Project-URL: Issues, https://github.com/username/okb/issues
|
|
47
|
+
Project-URL: Repository, https://github.com/username/okb
|
|
42
48
|
Description-Content-Type: text/markdown
|
|
43
49
|
|
|
44
50
|
# Owned Knowledge Base (OKB)
|
|
@@ -47,15 +53,14 @@ A local-first semantic search system for personal documents with Claude Code int
|
|
|
47
53
|
|
|
48
54
|
## Installation
|
|
49
55
|
|
|
56
|
+
pipx - preferred!
|
|
50
57
|
```bash
|
|
51
|
-
|
|
58
|
+
pipx install okb
|
|
52
59
|
```
|
|
53
60
|
|
|
54
|
-
Or
|
|
61
|
+
Or pip:
|
|
55
62
|
```bash
|
|
56
|
-
|
|
57
|
-
cd okb
|
|
58
|
-
pip install -e .
|
|
63
|
+
pip install okb
|
|
59
64
|
```
|
|
60
65
|
|
|
61
66
|
## Quick Start
|
|
@@ -80,20 +85,25 @@ okb ingest ~/notes ~/docs
|
|
|
80
85
|
| `okb db start` | Start pgvector database container |
|
|
81
86
|
| `okb db stop` | Stop database container |
|
|
82
87
|
| `okb db status` | Show database status |
|
|
88
|
+
| `okb db migrate [name]` | Apply pending migrations (optionally for specific db) |
|
|
89
|
+
| `okb db list` | List configured databases |
|
|
83
90
|
| `okb db destroy` | Remove container and volume (destructive) |
|
|
84
91
|
| `okb ingest <paths>` | Ingest documents into knowledge base |
|
|
85
|
-
| `okb ingest <paths> --local` | Ingest using CPU embedding (no Modal) |
|
|
92
|
+
| `okb ingest <paths> --local` | Ingest using local GPU/CPU embedding (no Modal) |
|
|
86
93
|
| `okb serve` | Start MCP server (stdio, for Claude Code) |
|
|
87
94
|
| `okb serve --http` | Start HTTP MCP server with token auth |
|
|
88
95
|
| `okb watch <paths>` | Watch directories for changes |
|
|
89
96
|
| `okb config init` | Create default config file |
|
|
90
97
|
| `okb config show` | Show current configuration |
|
|
98
|
+
| `okb config path` | Print config file path |
|
|
91
99
|
| `okb modal deploy` | Deploy GPU embedder to Modal |
|
|
92
100
|
| `okb token create` | Create API token for HTTP server |
|
|
93
101
|
| `okb token list` | List tokens for a database |
|
|
94
|
-
| `okb token revoke
|
|
102
|
+
| `okb token revoke [TOKEN] --id <n>` | Revoke token by full value or ID |
|
|
95
103
|
| `okb sync list` | List available API sources (plugins) |
|
|
104
|
+
| `okb sync list-projects <source>` | List projects from source (for config) |
|
|
96
105
|
| `okb sync run <sources>` | Sync data from external APIs |
|
|
106
|
+
| `okb sync auth <source>` | Interactive OAuth setup (e.g., dropbox-paper) |
|
|
97
107
|
| `okb sync status` | Show last sync times |
|
|
98
108
|
| `okb rescan` | Check indexed files for changes, re-ingest stale |
|
|
99
109
|
| `okb rescan --dry-run` | Show what would change without executing |
|
|
@@ -101,37 +111,19 @@ okb ingest ~/notes ~/docs
|
|
|
101
111
|
| `okb llm status` | Show LLM config and connectivity |
|
|
102
112
|
| `okb llm deploy` | Deploy Modal LLM for open model inference |
|
|
103
113
|
| `okb llm clear-cache` | Clear LLM response cache |
|
|
114
|
+
| `okb enrich run` | Extract TODOs and entities from documents |
|
|
115
|
+
| `okb enrich run --dry-run` | Show what would be enriched |
|
|
116
|
+
| `okb enrich pending` | List entities awaiting review |
|
|
117
|
+
| `okb enrich approve <id>` | Approve a pending entity |
|
|
118
|
+
| `okb enrich reject <id>` | Reject a pending entity |
|
|
119
|
+
| `okb enrich analyze` | Analyze database and update description/topics |
|
|
120
|
+
| `okb enrich consolidate` | Run entity consolidation (duplicates, clusters) |
|
|
121
|
+
| `okb enrich merge-proposals` | List pending merge proposals |
|
|
122
|
+
| `okb enrich approve-merge <id>` | Approve an entity merge |
|
|
123
|
+
| `okb enrich reject-merge <id>` | Reject an entity merge |
|
|
124
|
+
| `okb enrich clusters` | List topic clusters |
|
|
125
|
+
| `okb enrich relationships` | List entity relationships |
|
|
104
126
|
|
|
105
|
-
## Architecture
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
109
|
-
│ INGESTION (Burst GPU) │
|
|
110
|
-
│ │
|
|
111
|
-
│ Local Files → Contextual Chunking → Modal (GPU T4) → pgvector │
|
|
112
|
-
│ │
|
|
113
|
-
│ ~/notes/project-x/api-design.md │
|
|
114
|
-
│ ↓ │
|
|
115
|
-
│ "Document: API Design Notes │
|
|
116
|
-
│ Project: project-x │
|
|
117
|
-
│ Section: Authentication │
|
|
118
|
-
│ Content: Use JWT tokens with..." │
|
|
119
|
-
│ ↓ │
|
|
120
|
-
│ [0.23, -0.41, 0.87, ...] → pgvector │
|
|
121
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
122
|
-
|
|
123
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
124
|
-
│ RETRIEVAL (Always-on, Local) │
|
|
125
|
-
│ │
|
|
126
|
-
│ Claude Code → MCP Server → CPU Embedding → pgvector → Results │
|
|
127
|
-
│ │
|
|
128
|
-
│ "How do I handle auth?" │
|
|
129
|
-
│ ↓ │
|
|
130
|
-
│ [0.19, -0.38, 0.91, ...] (local CPU, ~300ms) │
|
|
131
|
-
│ ↓ │
|
|
132
|
-
│ Cosine similarity search → Top 5 chunks with context │
|
|
133
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
134
|
-
```
|
|
135
127
|
|
|
136
128
|
## Configuration
|
|
137
129
|
|
|
@@ -165,7 +157,7 @@ chunking:
|
|
|
165
157
|
Use `--db <name>` to target a specific database with any command.
|
|
166
158
|
|
|
167
159
|
Environment variables override config file settings:
|
|
168
|
-
- `
|
|
160
|
+
- `OKB_DATABASE_URL` - Database connection string
|
|
169
161
|
- `OKB_DOCKER_PORT` - Docker port mapping
|
|
170
162
|
- `OKB_CONTAINER_NAME` - Docker container name
|
|
171
163
|
|
|
@@ -186,7 +178,7 @@ Merge: scalars replace, lists extend, dicts deep-merge.
|
|
|
186
178
|
|
|
187
179
|
### LLM Integration (Optional)
|
|
188
180
|
|
|
189
|
-
Enable LLM-based document classification and
|
|
181
|
+
Enable LLM-based document classification, filtering, and enrichment:
|
|
190
182
|
|
|
191
183
|
```yaml
|
|
192
184
|
llm:
|
|
@@ -202,11 +194,25 @@ llm:
|
|
|
202
194
|
| `claude` | `export ANTHROPIC_API_KEY=...` | ~$0.25/1M tokens |
|
|
203
195
|
| `modal` | `okb llm deploy` | ~$0.02/min GPU |
|
|
204
196
|
|
|
205
|
-
|
|
197
|
+
**Modal LLM Setup** (no API key needed, runs on Modal's GPUs):
|
|
198
|
+
|
|
206
199
|
```yaml
|
|
207
200
|
llm:
|
|
208
201
|
provider: modal
|
|
209
|
-
model:
|
|
202
|
+
model: microsoft/Phi-3-mini-4k-instruct # Recommended: no gating
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Non-gated models (work immediately):
|
|
206
|
+
- `microsoft/Phi-3-mini-4k-instruct` - Good quality, 4K context
|
|
207
|
+
- `Qwen/Qwen2-1.5B-Instruct` - Smaller/faster
|
|
208
|
+
|
|
209
|
+
Gated models (require HuggingFace approval + token):
|
|
210
|
+
- `meta-llama/Llama-3.2-3B-Instruct` - Requires accepting license at HuggingFace
|
|
211
|
+
- Setup: `modal secret create huggingface HF_TOKEN=hf_...`
|
|
212
|
+
|
|
213
|
+
Deploy after configuring:
|
|
214
|
+
```bash
|
|
215
|
+
okb llm deploy
|
|
210
216
|
```
|
|
211
217
|
|
|
212
218
|
**Pre-ingest filtering** - skip low-value content during sync:
|
|
@@ -220,6 +226,36 @@ plugins:
|
|
|
220
226
|
action_on_skip: discard # or "archive"
|
|
221
227
|
```
|
|
222
228
|
|
|
229
|
+
### Document Enrichment
|
|
230
|
+
|
|
231
|
+
Extract TODOs and entities (people, projects, technologies) from documents using LLM:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
okb enrich run # Enrich un-enriched documents
|
|
235
|
+
okb enrich run --dry-run # Preview what would be enriched
|
|
236
|
+
okb enrich run --source-type markdown # Only markdown files
|
|
237
|
+
okb enrich run --query "meeting" # Filter by semantic search
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Entities are created as pending suggestions for review:
|
|
241
|
+
```bash
|
|
242
|
+
okb enrich pending # List pending entities
|
|
243
|
+
okb enrich approve <id> # Approve → creates entity document
|
|
244
|
+
okb enrich reject <id> # Reject → hidden from future suggestions
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Configure enrichment behavior:
|
|
248
|
+
```yaml
|
|
249
|
+
enrichment:
|
|
250
|
+
enabled: true
|
|
251
|
+
extract_todos: true
|
|
252
|
+
extract_entities: true
|
|
253
|
+
auto_create_todos: true # TODOs created immediately
|
|
254
|
+
auto_create_entities: false # Entities go to pending review
|
|
255
|
+
min_confidence_todo: 0.7
|
|
256
|
+
min_confidence_entity: 0.8
|
|
257
|
+
```
|
|
258
|
+
|
|
223
259
|
CLI commands:
|
|
224
260
|
```bash
|
|
225
261
|
okb llm status # Show config and connectivity
|
|
@@ -273,7 +309,7 @@ Then configure Claude Code to connect via SSE:
|
|
|
273
309
|
}
|
|
274
310
|
```
|
|
275
311
|
|
|
276
|
-
## MCP Tools
|
|
312
|
+
## MCP Tools available to LLM
|
|
277
313
|
|
|
278
314
|
| Tool | Purpose |
|
|
279
315
|
|------|---------|
|
|
@@ -287,6 +323,25 @@ Then configure Claude Code to connect via SSE:
|
|
|
287
323
|
| `save_knowledge` | Save knowledge from Claude for future reference |
|
|
288
324
|
| `delete_knowledge` | Delete a Claude-saved knowledge entry |
|
|
289
325
|
| `get_actionable_items` | Query tasks/events with structured filters |
|
|
326
|
+
| `get_database_info` | Get database description, topics, and stats |
|
|
327
|
+
| `set_database_description` | Update database description/topics (LLM can self-document) |
|
|
328
|
+
| `add_todo` | Create a TODO item in the knowledge base |
|
|
329
|
+
| `trigger_sync` | Sync API sources (Todoist, GitHub, Dropbox Paper) |
|
|
330
|
+
| `trigger_rescan` | Check indexed files for changes and re-ingest |
|
|
331
|
+
| `list_sync_sources` | List available API sync sources with status |
|
|
332
|
+
| `enrich_document` | Run LLM enrichment to extract TODOs/entities |
|
|
333
|
+
| `list_pending_entities` | List entities awaiting review |
|
|
334
|
+
| `approve_entity` | Approve a pending entity |
|
|
335
|
+
| `reject_entity` | Reject a pending entity |
|
|
336
|
+
| `analyze_knowledge_base` | Analyze content and generate description/topics |
|
|
337
|
+
| `find_entity_duplicates` | Find potential duplicate entities |
|
|
338
|
+
| `merge_entities` | Merge duplicate entities |
|
|
339
|
+
| `list_pending_merges` | List pending merge proposals |
|
|
340
|
+
| `approve_merge` | Approve a merge proposal |
|
|
341
|
+
| `reject_merge` | Reject a merge proposal |
|
|
342
|
+
| `get_topic_clusters` | Get topic clusters from consolidation |
|
|
343
|
+
| `get_entity_relationships` | Get relationships between entities |
|
|
344
|
+
| `run_consolidation` | Run full entity consolidation pipeline |
|
|
290
345
|
|
|
291
346
|
## Contextual Chunking
|
|
292
347
|
|
|
@@ -309,31 +364,9 @@ project: student-app
|
|
|
309
364
|
category: backend
|
|
310
365
|
---
|
|
311
366
|
|
|
312
|
-
#
|
|
367
|
+
# Your Document Title
|
|
313
368
|
|
|
314
|
-
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
## Cost Estimate
|
|
318
|
-
|
|
319
|
-
| Component | Local | Cloud Alternative |
|
|
320
|
-
|-----------|-------|-------------------|
|
|
321
|
-
| pgvector | $0 | ~$15-30/mo (CloudSQL) |
|
|
322
|
-
| MCP Server | $0 | ~$5/mo (small VM) |
|
|
323
|
-
| Modal embedding | ~$0.50-2/mo | N/A |
|
|
324
|
-
| **Total** | **~$1-2/mo** | **~$20-35/mo** |
|
|
325
|
-
|
|
326
|
-
## Development
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
# Install dev dependencies
|
|
330
|
-
pip install -e ".[dev]"
|
|
331
|
-
|
|
332
|
-
# Run tests
|
|
333
|
-
pytest
|
|
334
|
-
|
|
335
|
-
# Lint and format
|
|
336
|
-
ruff check . && ruff format .
|
|
369
|
+
Content here...
|
|
337
370
|
```
|
|
338
371
|
|
|
339
372
|
## Plugin System
|
|
@@ -385,12 +418,30 @@ plugins:
|
|
|
385
418
|
enabled: true
|
|
386
419
|
token: ${GITHUB_TOKEN} # Resolved from environment
|
|
387
420
|
repos: [owner/repo1, owner/repo2]
|
|
421
|
+
todoist:
|
|
422
|
+
enabled: true
|
|
423
|
+
token: ${TODOIST_TOKEN}
|
|
424
|
+
include_completed: false # Sync completed tasks
|
|
425
|
+
completed_days: 30 # Days of completed history
|
|
426
|
+
include_comments: false # Include task comments (1 API call per task)
|
|
427
|
+
project_filter: [] # List of project IDs (use sync list-projects to find)
|
|
388
428
|
dropbox-paper:
|
|
389
429
|
enabled: true
|
|
390
|
-
|
|
430
|
+
# Option 1: Refresh token (recommended, auto-refreshes)
|
|
431
|
+
app_key: ${DROPBOX_APP_KEY}
|
|
432
|
+
app_secret: ${DROPBOX_APP_SECRET}
|
|
433
|
+
refresh_token: ${DROPBOX_REFRESH_TOKEN}
|
|
434
|
+
# Option 2: Access token (short-lived, expires after ~4 hours)
|
|
435
|
+
# token: ${DROPBOX_TOKEN}
|
|
391
436
|
folders: [/] # Optional: filter to specific folders
|
|
392
437
|
```
|
|
393
438
|
|
|
439
|
+
**Dropbox Paper OAuth Setup:**
|
|
440
|
+
```bash
|
|
441
|
+
okb sync auth dropbox-paper
|
|
442
|
+
```
|
|
443
|
+
This interactive command will guide you through getting a refresh token from Dropbox.
|
|
444
|
+
|
|
394
445
|
## License
|
|
395
446
|
|
|
396
447
|
MIT
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
okb/__init__.py,sha256=2yaWIYQbho7N2O2zwTn3ZH11b8b3SaoDVlxluVTqwy4,92
|
|
2
|
+
okb/cli.py,sha256=8v_SaXFOrJYrCPSr6JgIqqzFHHYpPlHvan4CLaYUDTs,88639
|
|
3
|
+
okb/config.py,sha256=vKDC6b6Tm3_XZzvn7nA9WlGCWzCT8vtV9AvLes02YW8,28562
|
|
4
|
+
okb/data/init.sql,sha256=QpsicUN7PQ7d8zyOCRNChOu5XKdUVC3xySlRDPyKSN8,2728
|
|
5
|
+
okb/http_server.py,sha256=JFW5sXuZ0V0egHb_fyytNBORbNdqf9btAhQ_BUYiGUc,27636
|
|
6
|
+
okb/ingest.py,sha256=D5plxCC2tQXZenMNUa482dUDqsyuaq2APAQqaIgRAqU,54505
|
|
7
|
+
okb/llm/__init__.py,sha256=4jelqgXvF-eEPyLCuAmcxagN0H923wI9pBJJZKv4r0E,2368
|
|
8
|
+
okb/llm/analyze.py,sha256=BKW308AtjWStZcZiMKaRqFmQsuTclp3Qp3W4nsdw4vk,18569
|
|
9
|
+
okb/llm/base.py,sha256=gOm7zBiNdHrj7xxJfpb-4qZdYxWM0lA0vKfrBStO60E,2279
|
|
10
|
+
okb/llm/cache.py,sha256=rxRPMNBtP336MSpGWA8F7rDZnF0O2RM3rEsNtoxS0Zk,6142
|
|
11
|
+
okb/llm/consolidate.py,sha256=TjXBWzzlJrX3_z0CysrFAxclp1K7XGgMb_SI5hdK7Y8,23178
|
|
12
|
+
okb/llm/enrich.py,sha256=Yc09xvXynuiCATK451J5sBQ9lkPPllio8vAPYOEVDFo,23133
|
|
13
|
+
okb/llm/extractors/__init__.py,sha256=8sHgtgtydF4CBFiIOfURYcyunVxK770qp_aMz4jxnFU,317
|
|
14
|
+
okb/llm/extractors/base.py,sha256=p_PIMdUoEw8-C5jG8TcbG73jegE5ovmIGbbbdDrRFVs,1250
|
|
15
|
+
okb/llm/extractors/cross_doc.py,sha256=nw1-nHSHKxGlL95rfHFkStdbzpy4H3eRclyUyn2YE1A,18114
|
|
16
|
+
okb/llm/extractors/dedup.py,sha256=TVDBhNX7rPmpipO2WckAhe_Oj1LmSRPce-EceZ6FdbM,16562
|
|
17
|
+
okb/llm/extractors/entity.py,sha256=woIF5AeXD2dmFDoiOVCPgMUVWQPYHOmg1KE-ZRB3o0E,9925
|
|
18
|
+
okb/llm/extractors/todo.py,sha256=LdAyioQ5fZ-KJC_W_-CAU8OlMvju3Oci7E7aueoTnpI,4345
|
|
19
|
+
okb/llm/filter.py,sha256=y20bc3vHtp5gj7T7AhsJ45ZkAkBgztj6WPjsVAmvEeo,5447
|
|
20
|
+
okb/llm/providers.py,sha256=SpbEpJYSQHc43qyvBdv2IuUNKsf0_NfDmnooNM1tzHc,9838
|
|
21
|
+
okb/local_embedder.py,sha256=zzjBUFp4IH2xsvKyKjKZyX9dJuE_3PDMHMwpyRYSISQ,2098
|
|
22
|
+
okb/mcp_server.py,sha256=IUEGo4xmo2HhvKHhgeADqvNxICk4dBTX-6BNSmi8fkY,98610
|
|
23
|
+
okb/migrate.py,sha256=2faYL-SHiQCkGXpTUlBFMCj0B-6JYCHqZl9u6vOlui8,1693
|
|
24
|
+
okb/migrations/0001.initial-schema.sql,sha256=0s5pj9Ad6f0u_mxODAM_-DbDI3aI37Wdu5XMPAzAIqw,2577
|
|
25
|
+
okb/migrations/0002.sync-state.sql,sha256=w34dOA9sPg60NMS1aHvOhORff1k_Di9cO2ghwVQSPHU,696
|
|
26
|
+
okb/migrations/0003.structured-fields.sql,sha256=rPCSrdtotCoRpOfjHf1Ifx0pfizpYS9n4MD4CHxrv_c,1225
|
|
27
|
+
okb/migrations/0004.tokens.sql,sha256=VtcLfA1_SVVQLkEKZ-av_93Fg0ksVWLm1tlR7nJXoaQ,448
|
|
28
|
+
okb/migrations/0005.database-metadata.sql,sha256=0X4LyuUUX34s3ph2C70FnBBau5HEBwR4xyY-hwPEX90,709
|
|
29
|
+
okb/migrations/0006.llm-cache.sql,sha256=azjPpj00WH_8tx4JI8PJKZ1AOAJEhbkneVvYa3ZRZ1w,493
|
|
30
|
+
okb/migrations/0008.enrichment.sql,sha256=pkKtyuFgRiPhZ7YAyYr6yihT2R-Tx64hE18iqphqFAw,2160
|
|
31
|
+
okb/migrations/0009.entity-consolidation.sql,sha256=Q2TBHJqMa1fvAqaopa20KdJCIxqldDAeOPGC5YiuzxY,5800
|
|
32
|
+
okb/migrations/0010.token-id.sql,sha256=odFPvY3z63f6Zfx8j5qBj2LobvPafpT2hDi_MwBBf6Q,231
|
|
33
|
+
okb/modal_embedder.py,sha256=V1cpGWrtEo1MGkrD9Nc-5wRmf9e7IwKPsQj7nVuLlyg,3469
|
|
34
|
+
okb/modal_llm.py,sha256=NpCykbjlhUUdQNQ4NMLu-uEBFJbYwJDV2NdnwUZeG84,5903
|
|
35
|
+
okb/plugins/__init__.py,sha256=50LNAH4bvfIw5CHT82sknGjdCldQ-4ds0wxo1zM9E2k,324
|
|
36
|
+
okb/plugins/base.py,sha256=6TIN1UIItmuIsP4NDJhuRMH0ngKkQiGmtHTeYj1K8OU,3171
|
|
37
|
+
okb/plugins/registry.py,sha256=fN7NfoOaRnMyXSWT2srd6vEr4riJjmncQFfberf0IE8,3741
|
|
38
|
+
okb/plugins/sources/__init__.py,sha256=n58rAbcJC45JbofUY6IA526rSRjkYn4_tGjWma3TOUI,214
|
|
39
|
+
okb/plugins/sources/dropbox_paper.py,sha256=Oi59NbJGQrwjE2Xhcinc2InKRc27Gdg7l8xVTbKLkI8,7493
|
|
40
|
+
okb/plugins/sources/github.py,sha256=YlwsY2hRKlGTyHL5L4vCC1TP-b6WJzEYbPDEXnB4y-I,16309
|
|
41
|
+
okb/plugins/sources/todoist.py,sha256=B22tKYFZhuDhZHhpRdGWDGho9y7FBNgGlI1g2nf13-8,8849
|
|
42
|
+
okb/rescan.py,sha256=dVdQEkVUjsrtOKAGZc0LC2uwcnkjB8hn2SOVWHnY-R8,8396
|
|
43
|
+
okb/scripts/__init__.py,sha256=HPp8YCtIeo9XMOtOGCtntiwYr9eCxAJ1MF9Lo9WVzUA,53
|
|
44
|
+
okb/scripts/watch.py,sha256=b8oGPTN3flNdNQJETeqQ1RNZ8U1LiKvHntLwvHRIviA,6354
|
|
45
|
+
okb/tokens.py,sha256=3Of_PwNCTTexXC3d-EAiPjLdsbyk2F_dTeY30O3mqp8,8635
|
|
46
|
+
okb-1.1.0.dist-info/METADATA,sha256=3Hq4DxyrlEZYa3DhKbbBY1irBmyFZ76gJGGDt9QCPOc,13836
|
|
47
|
+
okb-1.1.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
48
|
+
okb-1.1.0.dist-info/entry_points.txt,sha256=YX6b8BlV9sSAXrneoIm3dkXtRcgHhSzbDaOpJ0yCKRs,230
|
|
49
|
+
okb-1.1.0.dist-info/RECORD,,
|
okb-1.0.0.dist-info/RECORD
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
okb/__init__.py,sha256=2yaWIYQbho7N2O2zwTn3ZH11b8b3SaoDVlxluVTqwy4,92
|
|
2
|
-
okb/cli.py,sha256=KZ8LmzHYiD19NZtrTx7UoFeiH4MMFZX621gs5JElLc4,43663
|
|
3
|
-
okb/config.py,sha256=DKmX2fgteGdh0QMsA-Immu-mZcvLjHWeB8HIf9rcM5o,22898
|
|
4
|
-
okb/data/init.sql,sha256=QpsicUN7PQ7d8zyOCRNChOu5XKdUVC3xySlRDPyKSN8,2728
|
|
5
|
-
okb/http_server.py,sha256=H8AvsRiStxupr-KnXrIlHnoRtqeA-2SgphVgGAOnqmQ,18673
|
|
6
|
-
okb/ingest.py,sha256=D5plxCC2tQXZenMNUa482dUDqsyuaq2APAQqaIgRAqU,54505
|
|
7
|
-
okb/llm/__init__.py,sha256=4jelqgXvF-eEPyLCuAmcxagN0H923wI9pBJJZKv4r0E,2368
|
|
8
|
-
okb/llm/base.py,sha256=gOm7zBiNdHrj7xxJfpb-4qZdYxWM0lA0vKfrBStO60E,2279
|
|
9
|
-
okb/llm/cache.py,sha256=rxRPMNBtP336MSpGWA8F7rDZnF0O2RM3rEsNtoxS0Zk,6142
|
|
10
|
-
okb/llm/filter.py,sha256=y20bc3vHtp5gj7T7AhsJ45ZkAkBgztj6WPjsVAmvEeo,5447
|
|
11
|
-
okb/llm/providers.py,sha256=AdVw9FFgv58-KJEfXv9JqWlkxBl-LcRWOao95CsjqWA,9718
|
|
12
|
-
okb/local_embedder.py,sha256=zzjBUFp4IH2xsvKyKjKZyX9dJuE_3PDMHMwpyRYSISQ,2098
|
|
13
|
-
okb/mcp_server.py,sha256=95e1wEtan0UrzQveCNNyhHXvtpZ18nDsxfaCKYJeX1I,50701
|
|
14
|
-
okb/migrate.py,sha256=2faYL-SHiQCkGXpTUlBFMCj0B-6JYCHqZl9u6vOlui8,1693
|
|
15
|
-
okb/migrations/0001.initial-schema.sql,sha256=0s5pj9Ad6f0u_mxODAM_-DbDI3aI37Wdu5XMPAzAIqw,2577
|
|
16
|
-
okb/migrations/0002.sync-state.sql,sha256=w34dOA9sPg60NMS1aHvOhORff1k_Di9cO2ghwVQSPHU,696
|
|
17
|
-
okb/migrations/0003.structured-fields.sql,sha256=rPCSrdtotCoRpOfjHf1Ifx0pfizpYS9n4MD4CHxrv_c,1225
|
|
18
|
-
okb/migrations/0004.tokens.sql,sha256=VtcLfA1_SVVQLkEKZ-av_93Fg0ksVWLm1tlR7nJXoaQ,448
|
|
19
|
-
okb/migrations/0005.database-metadata.sql,sha256=0X4LyuUUX34s3ph2C70FnBBau5HEBwR4xyY-hwPEX90,709
|
|
20
|
-
okb/migrations/0006.llm-cache.sql,sha256=azjPpj00WH_8tx4JI8PJKZ1AOAJEhbkneVvYa3ZRZ1w,493
|
|
21
|
-
okb/modal_embedder.py,sha256=V1cpGWrtEo1MGkrD9Nc-5wRmf9e7IwKPsQj7nVuLlyg,3469
|
|
22
|
-
okb/modal_llm.py,sha256=4rYE3VZ_T09HXCgTIYFLu1s_C2FRC9y4dgMUGqJuO2M,5368
|
|
23
|
-
okb/plugins/__init__.py,sha256=50LNAH4bvfIw5CHT82sknGjdCldQ-4ds0wxo1zM9E2k,324
|
|
24
|
-
okb/plugins/base.py,sha256=6TIN1UIItmuIsP4NDJhuRMH0ngKkQiGmtHTeYj1K8OU,3171
|
|
25
|
-
okb/plugins/registry.py,sha256=fN7NfoOaRnMyXSWT2srd6vEr4riJjmncQFfberf0IE8,3741
|
|
26
|
-
okb/plugins/sources/__init__.py,sha256=CTqgfRXCHWjKiQS0dpx2jRXj98ogcBClNORfVQwzL0I,143
|
|
27
|
-
okb/plugins/sources/dropbox_paper.py,sha256=YdNDkMEsaKz7pDfwfirwApg2v3Ub-GsbgWkSm9E4Yi0,6144
|
|
28
|
-
okb/plugins/sources/github.py,sha256=ozdTZPkU8h2-ZIx5o1FB58QBZ6P0eoVntluWL3vG87I,16309
|
|
29
|
-
okb/rescan.py,sha256=dVdQEkVUjsrtOKAGZc0LC2uwcnkjB8hn2SOVWHnY-R8,8396
|
|
30
|
-
okb/scripts/__init__.py,sha256=HPp8YCtIeo9XMOtOGCtntiwYr9eCxAJ1MF9Lo9WVzUA,53
|
|
31
|
-
okb/scripts/watch.py,sha256=b8oGPTN3flNdNQJETeqQ1RNZ8U1LiKvHntLwvHRIviA,6354
|
|
32
|
-
okb/tokens.py,sha256=JJ1C-mvtnT2O0cmjSu57PI9Nt53Sl9DqbmPuLnHlN6g,8043
|
|
33
|
-
okb-1.0.0.dist-info/METADATA,sha256=NVrVwX-U0Nj5qYks0w-UJNoDsiBPFth_J6oxzwftCBM,12002
|
|
34
|
-
okb-1.0.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
35
|
-
okb-1.0.0.dist-info/entry_points.txt,sha256=P2XvigL7DxPy8F5KvgRilX2G_rRh14bI9hyJpGgi80Y,180
|
|
36
|
-
okb-1.0.0.dist-info/RECORD,,
|
|
File without changes
|