remdb 0.3.202__py3-none-any.whl → 0.3.245__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.
Potentially problematic release.
This version of remdb might be problematic. Click here for more details.
- rem/agentic/README.md +36 -2
- rem/agentic/context.py +86 -3
- rem/agentic/context_builder.py +39 -33
- rem/agentic/mcp/tool_wrapper.py +2 -2
- rem/agentic/providers/pydantic_ai.py +68 -51
- rem/agentic/schema.py +2 -2
- rem/api/mcp_router/resources.py +223 -0
- rem/api/mcp_router/tools.py +170 -18
- rem/api/routers/admin.py +30 -4
- rem/api/routers/auth.py +175 -18
- rem/api/routers/chat/child_streaming.py +394 -0
- rem/api/routers/chat/completions.py +24 -29
- rem/api/routers/chat/sse_events.py +5 -1
- rem/api/routers/chat/streaming.py +242 -272
- rem/api/routers/chat/streaming_utils.py +327 -0
- rem/api/routers/common.py +18 -0
- rem/api/routers/dev.py +7 -1
- rem/api/routers/feedback.py +9 -1
- rem/api/routers/messages.py +80 -15
- rem/api/routers/models.py +9 -1
- rem/api/routers/query.py +17 -15
- rem/api/routers/shared_sessions.py +16 -0
- rem/cli/commands/ask.py +205 -114
- rem/cli/commands/process.py +12 -4
- rem/cli/commands/query.py +109 -0
- rem/cli/commands/session.py +117 -0
- rem/cli/main.py +2 -0
- rem/models/entities/session.py +1 -0
- rem/schemas/agents/rem.yaml +1 -1
- rem/services/postgres/repository.py +7 -7
- rem/services/rem/service.py +47 -0
- rem/services/session/__init__.py +2 -1
- rem/services/session/compression.py +14 -12
- rem/services/session/pydantic_messages.py +111 -11
- rem/services/session/reload.py +2 -1
- rem/settings.py +71 -0
- rem/sql/migrations/001_install.sql +4 -4
- rem/sql/migrations/004_cache_system.sql +3 -1
- rem/sql/migrations/migrate_session_id_to_uuid.sql +45 -0
- rem/utils/schema_loader.py +139 -111
- {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/METADATA +2 -2
- {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/RECORD +44 -39
- {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/WHEEL +0 -0
- {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/entry_points.txt +0 -0
|
@@ -64,9 +64,11 @@ CREATE OR REPLACE FUNCTION rem_kv_store_empty(p_user_id TEXT)
|
|
|
64
64
|
RETURNS BOOLEAN AS $$
|
|
65
65
|
BEGIN
|
|
66
66
|
-- Quick existence check - very fast with index
|
|
67
|
+
-- Check for user-specific OR public (NULL user_id) entries
|
|
68
|
+
-- This ensures self-healing triggers correctly for public ontologies
|
|
67
69
|
RETURN NOT EXISTS (
|
|
68
70
|
SELECT 1 FROM kv_store
|
|
69
|
-
WHERE user_id = p_user_id
|
|
71
|
+
WHERE user_id = p_user_id OR user_id IS NULL
|
|
70
72
|
LIMIT 1
|
|
71
73
|
);
|
|
72
74
|
END;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
-- Migration: Update messages.session_id from session name to session UUID
|
|
2
|
+
-- This fixes the bug where messages were stored with session.name instead of session.id
|
|
3
|
+
--
|
|
4
|
+
-- Run this migration AFTER deploying the code fixes in remdb 0.3.204+
|
|
5
|
+
-- The code now correctly stores session.id (UUID), but existing data needs migration.
|
|
6
|
+
|
|
7
|
+
BEGIN;
|
|
8
|
+
|
|
9
|
+
-- First, count how many messages need to be updated
|
|
10
|
+
DO $$
|
|
11
|
+
DECLARE
|
|
12
|
+
count_to_migrate INTEGER;
|
|
13
|
+
BEGIN
|
|
14
|
+
SELECT COUNT(*) INTO count_to_migrate
|
|
15
|
+
FROM messages m
|
|
16
|
+
JOIN sessions s ON m.session_id = s.name
|
|
17
|
+
WHERE m.session_id != s.id::text;
|
|
18
|
+
|
|
19
|
+
RAISE NOTICE 'Messages needing migration: %', count_to_migrate;
|
|
20
|
+
END $$;
|
|
21
|
+
|
|
22
|
+
-- Update messages.session_id from session name to session UUID
|
|
23
|
+
UPDATE messages m
|
|
24
|
+
SET session_id = s.id::text
|
|
25
|
+
FROM sessions s
|
|
26
|
+
WHERE m.session_id = s.name
|
|
27
|
+
AND m.session_id != s.id::text;
|
|
28
|
+
|
|
29
|
+
-- Report how many were updated
|
|
30
|
+
DO $$
|
|
31
|
+
DECLARE
|
|
32
|
+
updated_count INTEGER;
|
|
33
|
+
BEGIN
|
|
34
|
+
GET DIAGNOSTICS updated_count = ROW_COUNT;
|
|
35
|
+
RAISE NOTICE 'Messages updated: %', updated_count;
|
|
36
|
+
END $$;
|
|
37
|
+
|
|
38
|
+
COMMIT;
|
|
39
|
+
|
|
40
|
+
-- Verify the fix - all messages should now join by UUID
|
|
41
|
+
SELECT
|
|
42
|
+
'Messages matching sessions by UUID' as status,
|
|
43
|
+
COUNT(*) as count
|
|
44
|
+
FROM messages m
|
|
45
|
+
JOIN sessions s ON m.session_id = s.id::text;
|
rem/utils/schema_loader.py
CHANGED
|
@@ -147,15 +147,25 @@ def _load_schema_from_database(schema_name: str, user_id: str) -> dict[str, Any]
|
|
|
147
147
|
try:
|
|
148
148
|
await db.connect()
|
|
149
149
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
150
|
+
# Query for public schemas (user_id IS NULL) and optionally user-specific
|
|
151
|
+
if user_id:
|
|
152
|
+
query = """
|
|
153
|
+
SELECT spec FROM schemas
|
|
154
|
+
WHERE LOWER(name) = LOWER($1)
|
|
155
|
+
AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
|
|
156
|
+
LIMIT 1
|
|
157
|
+
"""
|
|
158
|
+
row = await db.fetchrow(query, schema_name, user_id)
|
|
159
|
+
else:
|
|
160
|
+
# No user_id - only search public schemas
|
|
161
|
+
query = """
|
|
162
|
+
SELECT spec FROM schemas
|
|
163
|
+
WHERE LOWER(name) = LOWER($1)
|
|
164
|
+
AND (user_id = 'system' OR user_id IS NULL)
|
|
165
|
+
LIMIT 1
|
|
166
|
+
"""
|
|
167
|
+
row = await db.fetchrow(query, schema_name)
|
|
168
|
+
logger.debug(f"Executing schema lookup: name={schema_name}, user_id={user_id or 'public'}")
|
|
159
169
|
|
|
160
170
|
if row:
|
|
161
171
|
spec = row.get("spec")
|
|
@@ -193,17 +203,25 @@ def _load_schema_from_database(schema_name: str, user_id: str) -> dict[str, Any]
|
|
|
193
203
|
try:
|
|
194
204
|
await db.connect()
|
|
195
205
|
|
|
196
|
-
# Query schemas
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
206
|
+
# Query for public schemas (user_id IS NULL) and optionally user-specific
|
|
207
|
+
if user_id:
|
|
208
|
+
query = """
|
|
209
|
+
SELECT spec FROM schemas
|
|
210
|
+
WHERE LOWER(name) = LOWER($1)
|
|
211
|
+
AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
|
|
212
|
+
LIMIT 1
|
|
213
|
+
"""
|
|
214
|
+
row = await db.fetchrow(query, schema_name, user_id)
|
|
215
|
+
else:
|
|
216
|
+
# No user_id - only search public schemas
|
|
217
|
+
query = """
|
|
218
|
+
SELECT spec FROM schemas
|
|
219
|
+
WHERE LOWER(name) = LOWER($1)
|
|
220
|
+
AND (user_id = 'system' OR user_id IS NULL)
|
|
221
|
+
LIMIT 1
|
|
222
|
+
"""
|
|
223
|
+
row = await db.fetchrow(query, schema_name)
|
|
224
|
+
logger.debug(f"Executing schema lookup: name={schema_name}, user_id={user_id or 'public'}")
|
|
207
225
|
|
|
208
226
|
if row:
|
|
209
227
|
spec = row.get("spec")
|
|
@@ -231,73 +249,65 @@ def load_agent_schema(
|
|
|
231
249
|
enable_db_fallback: bool = True,
|
|
232
250
|
) -> dict[str, Any]:
|
|
233
251
|
"""
|
|
234
|
-
Load agent schema
|
|
252
|
+
Load agent schema with database-first priority for hot-reloading support.
|
|
235
253
|
|
|
236
254
|
Schema names are case-invariant - "Rem", "rem", "REM" all resolve to the same schema.
|
|
237
255
|
|
|
238
|
-
|
|
239
|
-
|
|
256
|
+
**IMPORTANT**: Database is checked FIRST (before filesystem) to enable hot-reloading
|
|
257
|
+
of schema updates without redeploying the application. This allows operators to
|
|
258
|
+
update schemas via `rem process ingest` and have changes take effect immediately.
|
|
240
259
|
|
|
241
260
|
Handles path resolution automatically:
|
|
242
|
-
- "rem" → searches schemas/agents/rem.yaml
|
|
243
|
-
- "moment-builder" → searches schemas/agents/core/moment-builder.yaml
|
|
244
|
-
- "
|
|
245
|
-
- "
|
|
246
|
-
- "/absolute/path.yaml" → loads directly
|
|
247
|
-
- "relative/path.yaml" → loads relative to cwd
|
|
261
|
+
- "rem" → searches database, then schemas/agents/rem.yaml
|
|
262
|
+
- "moment-builder" → searches database, then schemas/agents/core/moment-builder.yaml
|
|
263
|
+
- "/absolute/path.yaml" → loads directly from filesystem (exact paths skip database)
|
|
264
|
+
- "relative/path.yaml" → loads relative to cwd (exact paths skip database)
|
|
248
265
|
|
|
249
266
|
Search Order:
|
|
250
|
-
1.
|
|
251
|
-
2.
|
|
252
|
-
3.
|
|
253
|
-
4.
|
|
254
|
-
5. Package resources: schemas/agents/
|
|
255
|
-
6. Package resources: schemas/agents/
|
|
256
|
-
7. Package resources: schemas/
|
|
257
|
-
8. Package resources: schemas/{name}.yaml
|
|
258
|
-
9.
|
|
267
|
+
1. Exact path if it exists (absolute or relative) - skips database
|
|
268
|
+
2. Database LOOKUP: schemas table (if enable_db_fallback=True) - PREFERRED for hot-reload
|
|
269
|
+
3. Check cache (if use_cache=True and schema found in FS cache)
|
|
270
|
+
4. Custom paths from rem.register_schema_path() and SCHEMA__PATHS env var
|
|
271
|
+
5. Package resources: schemas/agents/{name}.yaml (top-level)
|
|
272
|
+
6. Package resources: schemas/agents/core/{name}.yaml
|
|
273
|
+
7. Package resources: schemas/agents/examples/{name}.yaml
|
|
274
|
+
8. Package resources: schemas/evaluators/{name}.yaml
|
|
275
|
+
9. Package resources: schemas/{name}.yaml
|
|
259
276
|
|
|
260
277
|
Args:
|
|
261
278
|
schema_name_or_path: Schema name or file path (case-invariant for names)
|
|
262
279
|
Examples: "rem-query-agent", "Contract-Analyzer", "./my-schema.yaml"
|
|
263
280
|
use_cache: If True, uses in-memory cache for filesystem schemas
|
|
264
|
-
user_id: User ID for database schema lookup
|
|
265
|
-
enable_db_fallback: If True,
|
|
281
|
+
user_id: User ID for database schema lookup
|
|
282
|
+
enable_db_fallback: If True, checks database FIRST for schema (default: True)
|
|
266
283
|
|
|
267
284
|
Returns:
|
|
268
285
|
Agent schema as dictionary
|
|
269
286
|
|
|
270
287
|
Raises:
|
|
271
|
-
FileNotFoundError: If schema not found in any search location (
|
|
288
|
+
FileNotFoundError: If schema not found in any search location (database + filesystem)
|
|
272
289
|
yaml.YAMLError: If schema file is invalid YAML
|
|
273
290
|
|
|
274
291
|
Examples:
|
|
275
|
-
>>> # Load by short name
|
|
276
|
-
>>> schema = load_agent_schema("Contract-Analyzer") #
|
|
292
|
+
>>> # Load by short name - checks database first for hot-reload support
|
|
293
|
+
>>> schema = load_agent_schema("Contract-Analyzer") # case invariant
|
|
277
294
|
>>>
|
|
278
|
-
>>> # Load from custom path (
|
|
295
|
+
>>> # Load from custom path (skips database - exact paths always use filesystem)
|
|
279
296
|
>>> schema = load_agent_schema("./my-agent.yaml")
|
|
280
297
|
>>>
|
|
281
|
-
>>> # Load evaluator schema
|
|
298
|
+
>>> # Load evaluator schema
|
|
282
299
|
>>> schema = load_agent_schema("rem-lookup-correctness")
|
|
283
|
-
>>>
|
|
284
|
-
>>> # Load custom user schema from database (case invariant)
|
|
285
|
-
>>> schema = load_agent_schema("My-Agent", user_id="user-123") # same as "my-agent"
|
|
286
300
|
"""
|
|
287
301
|
# Normalize the name for cache key (lowercase for case-invariant lookups)
|
|
288
302
|
cache_key = str(schema_name_or_path).replace('agents/', '').replace('schemas/', '').replace('evaluators/', '').replace('core/', '').replace('examples/', '').lower()
|
|
289
303
|
if cache_key.endswith('.yaml') or cache_key.endswith('.yml'):
|
|
290
304
|
cache_key = cache_key.rsplit('.', 1)[0]
|
|
291
305
|
|
|
292
|
-
# Check cache first (only for package resources, not custom paths)
|
|
293
306
|
path = Path(schema_name_or_path)
|
|
294
307
|
is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
|
|
295
308
|
|
|
296
|
-
if use_cache and not is_custom_path and cache_key in _fs_schema_cache:
|
|
297
|
-
logger.debug(f"Loading schema from cache: {cache_key}")
|
|
298
|
-
return _fs_schema_cache[cache_key]
|
|
299
|
-
|
|
300
309
|
# 1. Try exact path first (absolute or relative to cwd) - must be a file, not directory
|
|
310
|
+
# Exact paths skip database lookup (explicit file reference)
|
|
301
311
|
if path.exists() and path.is_file():
|
|
302
312
|
logger.debug(f"Loading schema from exact path: {path}")
|
|
303
313
|
with open(path, "r") as f:
|
|
@@ -306,10 +316,28 @@ def load_agent_schema(
|
|
|
306
316
|
# Don't cache custom paths (they may change)
|
|
307
317
|
return cast(dict[str, Any], schema)
|
|
308
318
|
|
|
309
|
-
# 2. Normalize name for
|
|
319
|
+
# 2. Normalize name for lookups (lowercase)
|
|
310
320
|
base_name = cache_key
|
|
311
321
|
|
|
312
|
-
# 3. Try
|
|
322
|
+
# 3. Try database FIRST (if enabled) - enables hot-reload without redeploy
|
|
323
|
+
# Database schemas are NOT cached to ensure hot-reload works immediately
|
|
324
|
+
if enable_db_fallback and not is_custom_path:
|
|
325
|
+
try:
|
|
326
|
+
logger.debug(f"Checking database for schema: {base_name} (user_id={user_id or 'public'})")
|
|
327
|
+
db_schema = _load_schema_from_database(base_name, user_id)
|
|
328
|
+
if db_schema:
|
|
329
|
+
logger.info(f"✅ Loaded schema from database: {base_name}")
|
|
330
|
+
return db_schema
|
|
331
|
+
except Exception as e:
|
|
332
|
+
logger.debug(f"Database schema lookup failed: {e}")
|
|
333
|
+
# Fall through to filesystem search
|
|
334
|
+
|
|
335
|
+
# 4. Check filesystem cache (only for package resources, not custom paths)
|
|
336
|
+
if use_cache and not is_custom_path and cache_key in _fs_schema_cache:
|
|
337
|
+
logger.debug(f"Loading schema from cache: {cache_key}")
|
|
338
|
+
return _fs_schema_cache[cache_key]
|
|
339
|
+
|
|
340
|
+
# 5. Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
|
|
313
341
|
from ..registry import get_schema_paths
|
|
314
342
|
|
|
315
343
|
custom_paths = get_schema_paths()
|
|
@@ -340,7 +368,7 @@ def load_agent_schema(
|
|
|
340
368
|
# Don't cache custom paths (they may change during development)
|
|
341
369
|
return cast(dict[str, Any], schema)
|
|
342
370
|
|
|
343
|
-
#
|
|
371
|
+
# 6. Try package resources with standard search paths
|
|
344
372
|
for search_pattern in SCHEMA_SEARCH_PATHS:
|
|
345
373
|
search_path = search_pattern.format(name=base_name)
|
|
346
374
|
|
|
@@ -365,19 +393,7 @@ def load_agent_schema(
|
|
|
365
393
|
logger.debug(f"Could not load from {search_path}: {e}")
|
|
366
394
|
continue
|
|
367
395
|
|
|
368
|
-
#
|
|
369
|
-
if enable_db_fallback and user_id:
|
|
370
|
-
try:
|
|
371
|
-
logger.debug(f"Attempting database LOOKUP for schema: {base_name} (user_id={user_id})")
|
|
372
|
-
db_schema = _load_schema_from_database(base_name, user_id)
|
|
373
|
-
if db_schema:
|
|
374
|
-
logger.info(f"✅ Loaded schema from database: {base_name} (user_id={user_id})")
|
|
375
|
-
return db_schema
|
|
376
|
-
except Exception as e:
|
|
377
|
-
logger.debug(f"Database schema lookup failed: {e}")
|
|
378
|
-
# Fall through to error below
|
|
379
|
-
|
|
380
|
-
# 6. Schema not found in any location
|
|
396
|
+
# 7. Schema not found in any location
|
|
381
397
|
searched_paths = [pattern.format(name=base_name) for pattern in SCHEMA_SEARCH_PATHS]
|
|
382
398
|
|
|
383
399
|
custom_paths_note = ""
|
|
@@ -387,9 +403,9 @@ def load_agent_schema(
|
|
|
387
403
|
db_search_note = ""
|
|
388
404
|
if enable_db_fallback:
|
|
389
405
|
if user_id:
|
|
390
|
-
db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id
|
|
406
|
+
db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id IN ('{user_id}', 'system', NULL) (no match)"
|
|
391
407
|
else:
|
|
392
|
-
db_search_note = "\n - Database:
|
|
408
|
+
db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id IN ('system', NULL) (no match)"
|
|
393
409
|
|
|
394
410
|
raise FileNotFoundError(
|
|
395
411
|
f"Schema not found: {schema_name_or_path}\n"
|
|
@@ -405,18 +421,21 @@ async def load_agent_schema_async(
|
|
|
405
421
|
schema_name_or_path: str,
|
|
406
422
|
user_id: str | None = None,
|
|
407
423
|
db=None,
|
|
424
|
+
enable_db_fallback: bool = True,
|
|
408
425
|
) -> dict[str, Any]:
|
|
409
426
|
"""
|
|
410
|
-
Async version of load_agent_schema
|
|
427
|
+
Async version of load_agent_schema with database-first priority.
|
|
411
428
|
|
|
412
429
|
Schema names are case-invariant - "MyAgent", "myagent", "MYAGENT" all resolve to the same schema.
|
|
413
430
|
|
|
414
|
-
|
|
431
|
+
**IMPORTANT**: Database is checked FIRST (before filesystem) to enable hot-reloading
|
|
432
|
+
of schema updates without redeploying the application.
|
|
415
433
|
|
|
416
434
|
Args:
|
|
417
435
|
schema_name_or_path: Schema name or file path (case-invariant for names)
|
|
418
436
|
user_id: User ID for database schema lookup
|
|
419
437
|
db: Optional existing PostgresService connection (if None, will create one)
|
|
438
|
+
enable_db_fallback: If True, checks database FIRST for schema (default: True)
|
|
420
439
|
|
|
421
440
|
Returns:
|
|
422
441
|
Agent schema as dictionary
|
|
@@ -424,7 +443,6 @@ async def load_agent_schema_async(
|
|
|
424
443
|
Raises:
|
|
425
444
|
FileNotFoundError: If schema not found
|
|
426
445
|
"""
|
|
427
|
-
# First try filesystem search (sync operations are fine)
|
|
428
446
|
path = Path(schema_name_or_path)
|
|
429
447
|
|
|
430
448
|
# Normalize the name for cache key (lowercase for case-invariant lookups)
|
|
@@ -434,12 +452,7 @@ async def load_agent_schema_async(
|
|
|
434
452
|
|
|
435
453
|
is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
|
|
436
454
|
|
|
437
|
-
#
|
|
438
|
-
if not is_custom_path and cache_key in _fs_schema_cache:
|
|
439
|
-
logger.debug(f"Loading schema from cache: {cache_key}")
|
|
440
|
-
return _fs_schema_cache[cache_key]
|
|
441
|
-
|
|
442
|
-
# Try exact path (must be a file, not directory)
|
|
455
|
+
# 1. Try exact path first (skips database - explicit file reference)
|
|
443
456
|
if path.exists() and path.is_file():
|
|
444
457
|
logger.debug(f"Loading schema from exact path: {path}")
|
|
445
458
|
with open(path, "r") as f:
|
|
@@ -448,7 +461,51 @@ async def load_agent_schema_async(
|
|
|
448
461
|
|
|
449
462
|
base_name = cache_key
|
|
450
463
|
|
|
451
|
-
# Try
|
|
464
|
+
# 2. Try database FIRST (if enabled) - enables hot-reload without redeploy
|
|
465
|
+
if enable_db_fallback and not is_custom_path:
|
|
466
|
+
from rem.services.postgres import get_postgres_service
|
|
467
|
+
|
|
468
|
+
should_disconnect = False
|
|
469
|
+
if db is None:
|
|
470
|
+
db = get_postgres_service()
|
|
471
|
+
if db:
|
|
472
|
+
await db.connect()
|
|
473
|
+
should_disconnect = True
|
|
474
|
+
|
|
475
|
+
if db:
|
|
476
|
+
try:
|
|
477
|
+
if user_id:
|
|
478
|
+
query = """
|
|
479
|
+
SELECT spec FROM schemas
|
|
480
|
+
WHERE LOWER(name) = LOWER($1)
|
|
481
|
+
AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
|
|
482
|
+
LIMIT 1
|
|
483
|
+
"""
|
|
484
|
+
row = await db.fetchrow(query, base_name, user_id)
|
|
485
|
+
else:
|
|
486
|
+
# No user_id - only search public schemas
|
|
487
|
+
query = """
|
|
488
|
+
SELECT spec FROM schemas
|
|
489
|
+
WHERE LOWER(name) = LOWER($1)
|
|
490
|
+
AND (user_id = 'system' OR user_id IS NULL)
|
|
491
|
+
LIMIT 1
|
|
492
|
+
"""
|
|
493
|
+
row = await db.fetchrow(query, base_name)
|
|
494
|
+
if row:
|
|
495
|
+
spec = row.get("spec")
|
|
496
|
+
if spec and isinstance(spec, dict):
|
|
497
|
+
logger.info(f"✅ Loaded schema from database: {base_name}")
|
|
498
|
+
return spec
|
|
499
|
+
finally:
|
|
500
|
+
if should_disconnect:
|
|
501
|
+
await db.disconnect()
|
|
502
|
+
|
|
503
|
+
# 3. Check filesystem cache
|
|
504
|
+
if not is_custom_path and cache_key in _fs_schema_cache:
|
|
505
|
+
logger.debug(f"Loading schema from cache: {cache_key}")
|
|
506
|
+
return _fs_schema_cache[cache_key]
|
|
507
|
+
|
|
508
|
+
# 4. Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
|
|
452
509
|
from ..registry import get_schema_paths
|
|
453
510
|
custom_paths = get_schema_paths()
|
|
454
511
|
|
|
@@ -470,7 +527,7 @@ async def load_agent_schema_async(
|
|
|
470
527
|
schema = yaml.safe_load(f)
|
|
471
528
|
return cast(dict[str, Any], schema)
|
|
472
529
|
|
|
473
|
-
# Try package resources
|
|
530
|
+
# 5. Try package resources
|
|
474
531
|
for search_pattern in SCHEMA_SEARCH_PATHS:
|
|
475
532
|
search_path = search_pattern.format(name=base_name)
|
|
476
533
|
try:
|
|
@@ -484,35 +541,6 @@ async def load_agent_schema_async(
|
|
|
484
541
|
except Exception:
|
|
485
542
|
continue
|
|
486
543
|
|
|
487
|
-
# Try database lookup
|
|
488
|
-
if user_id:
|
|
489
|
-
from rem.services.postgres import get_postgres_service
|
|
490
|
-
|
|
491
|
-
should_disconnect = False
|
|
492
|
-
if db is None:
|
|
493
|
-
db = get_postgres_service()
|
|
494
|
-
if db:
|
|
495
|
-
await db.connect()
|
|
496
|
-
should_disconnect = True
|
|
497
|
-
|
|
498
|
-
if db:
|
|
499
|
-
try:
|
|
500
|
-
query = """
|
|
501
|
-
SELECT spec FROM schemas
|
|
502
|
-
WHERE LOWER(name) = LOWER($1)
|
|
503
|
-
AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
|
|
504
|
-
LIMIT 1
|
|
505
|
-
"""
|
|
506
|
-
row = await db.fetchrow(query, base_name, user_id)
|
|
507
|
-
if row:
|
|
508
|
-
spec = row.get("spec")
|
|
509
|
-
if spec and isinstance(spec, dict):
|
|
510
|
-
logger.info(f"✅ Loaded schema from database: {base_name}")
|
|
511
|
-
return spec
|
|
512
|
-
finally:
|
|
513
|
-
if should_disconnect:
|
|
514
|
-
await db.disconnect()
|
|
515
|
-
|
|
516
544
|
# Not found
|
|
517
545
|
raise FileNotFoundError(f"Schema not found: {schema_name_or_path}")
|
|
518
546
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remdb
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.245
|
|
4
4
|
Summary: Resources Entities Moments - Bio-inspired memory system for agentic AI workloads
|
|
5
5
|
Project-URL: Homepage, https://github.com/Percolation-Labs/reminiscent
|
|
6
6
|
Project-URL: Documentation, https://github.com/Percolation-Labs/reminiscent/blob/main/README.md
|
|
@@ -39,7 +39,7 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.49b0
|
|
|
39
39
|
Requires-Dist: opentelemetry-instrumentation>=0.49b0
|
|
40
40
|
Requires-Dist: opentelemetry-sdk>=1.28.0
|
|
41
41
|
Requires-Dist: psycopg[binary]>=3.2.0
|
|
42
|
-
Requires-Dist: pydantic-ai>=0.0
|
|
42
|
+
Requires-Dist: pydantic-ai>=1.0.0
|
|
43
43
|
Requires-Dist: pydantic-settings>=2.6.0
|
|
44
44
|
Requires-Dist: pydantic>=2.10.0
|
|
45
45
|
Requires-Dist: pydub>=0.25.0
|
|
@@ -3,51 +3,54 @@ rem/config.py,sha256=cyXFpqgTvHeYeIriiQHGC1jSokp55BkJtMS1cVu-C1M,6769
|
|
|
3
3
|
rem/mcp_server.py,sha256=OK0XaO2k_7BnVRozOfH_xRL51SkRN9kLoNNp_zrrGeA,1383
|
|
4
4
|
rem/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
rem/registry.py,sha256=AAGcr7oRHiHsX2mu7TL4EgKw39IFea8F-YIgbX58CUM,10545
|
|
6
|
-
rem/settings.py,sha256=
|
|
7
|
-
rem/agentic/README.md,sha256=
|
|
6
|
+
rem/settings.py,sha256=W1ktvJvcna5i-zXHWa55t0uMN0uG0NoVJrvWmDhvTuE,62430
|
|
7
|
+
rem/agentic/README.md,sha256=DHt53giAbyEpp_8NV_WFkJJlfvVJX7lLyqNZRAz-OOo,23203
|
|
8
8
|
rem/agentic/__init__.py,sha256=-UZiEYpodfD5xDns6L0nYSqK9owr3NxiWsq6vmK1tGk,1268
|
|
9
|
-
rem/agentic/context.py,sha256=
|
|
10
|
-
rem/agentic/context_builder.py,sha256=
|
|
9
|
+
rem/agentic/context.py,sha256=_UlvHlTHdFQnOULVXrdr0SUmO8LmBbcsXzwIxGVSvzM,15635
|
|
10
|
+
rem/agentic/context_builder.py,sha256=7MuqcGNMqCI2XNTnLiL7j7Peb87am0gbfQ_qqd029-A,14229
|
|
11
11
|
rem/agentic/llm_provider_models.py,sha256=bkBs_6aQ0maerlnQNH5hWv21Os3mX5Q14zXTW_8bGgI,10508
|
|
12
12
|
rem/agentic/query.py,sha256=yBtVT9bCUT9DPKRw9UltzN4o9wgB-Ry-FfW814Eg1WE,3612
|
|
13
13
|
rem/agentic/query_helper.py,sha256=DAr-he5XsJfwrcEzfJCNujWYU6MFvK0JFXee2ulRMQU,2458
|
|
14
|
-
rem/agentic/schema.py,sha256=
|
|
14
|
+
rem/agentic/schema.py,sha256=YDmkfR6JEV9elgOEc-7e_YZzLAtKMZ2f-viBvJIPeZY,22991
|
|
15
15
|
rem/agentic/serialization.py,sha256=zwjyvcGjTHuChG9goRHEVlA3etAekVJGzv9o6Fo7raM,7999
|
|
16
16
|
rem/agentic/agents/README.md,sha256=npq2ENb5dNGYxqGQYTb9E0JquyKcXrMt8kM2q6LRxRk,4972
|
|
17
17
|
rem/agentic/agents/__init__.py,sha256=OV-9J0EpxLv_zjhv9v2o-42tFcSkLabrwgumood27ZI,893
|
|
18
18
|
rem/agentic/agents/agent_manager.py,sha256=idT4brDCSzjDKkm897acKHgbJb25FISvDKqeWyU7hak,8228
|
|
19
19
|
rem/agentic/agents/sse_simulator.py,sha256=NTJuunUlEY5KFUKbxgkrt5iihdVIEAqPsufUVisziaQ,16392
|
|
20
20
|
rem/agentic/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
rem/agentic/mcp/tool_wrapper.py,sha256=
|
|
21
|
+
rem/agentic/mcp/tool_wrapper.py,sha256=7xpF1UuGZQy0rfuzQgkNxHGbwWFbNWnnIjtKupxRMDw,12170
|
|
22
22
|
rem/agentic/otel/__init__.py,sha256=IC0lLMmuxXRZrhO9p8-GQ6raZDP9YE3gcuCwl6vBv4c,195
|
|
23
23
|
rem/agentic/otel/setup.py,sha256=-NL5jDXuDdQMKEhZfOtjZ2kJtpayQ7dhM0p1OrU185c,9629
|
|
24
24
|
rem/agentic/providers/phoenix.py,sha256=_e8-S8aSfpX2EulH0nXAermoDZ1c9Kh3QALGTCvCmC4,35422
|
|
25
|
-
rem/agentic/providers/pydantic_ai.py,sha256=
|
|
25
|
+
rem/agentic/providers/pydantic_ai.py,sha256=rMkfJSy_XcrgP5W8uhWGasdYJUxfU2wpdT8BHVn4mqM,35075
|
|
26
26
|
rem/agentic/tools/__init__.py,sha256=tb_9ml0i2LtEALAJ6h7D91xVEA_8ktDzD4s3nM0MsUE,147
|
|
27
27
|
rem/agentic/tools/rem_tools.py,sha256=0Aps2TcA3z6WLJQ1M98iYX-1uoIEwTozmwodl2_AUCI,7833
|
|
28
28
|
rem/api/README.md,sha256=68KtBi1nkXm_J0skGVBhchXP-cLNaBBka6ZhLqAncoA,19998
|
|
29
29
|
rem/api/deps.py,sha256=3_M8YOdyzEkr4kIhjJvxuDvnSaq7U8TLx1sZkEG63eU,6611
|
|
30
30
|
rem/api/main.py,sha256=6BcUdr0F74-RnVytToh8s9H7OmmO11Xgl_p03FjeDks,16757
|
|
31
31
|
rem/api/mcp_router/prompts.py,sha256=bVNsJMur6i0oyd38WIr-r0kUNUAlcGG595WVhBDwxik,4077
|
|
32
|
-
rem/api/mcp_router/resources.py,sha256=
|
|
32
|
+
rem/api/mcp_router/resources.py,sha256=plGhg8bp5hOstoIgPIpniVsBaWjSxz_dHsiabqWWh7g,26814
|
|
33
33
|
rem/api/mcp_router/server.py,sha256=06yqR7CBAcmMqHJyUpndQXXYCnu42M5Uen3Oh4mnMVI,11550
|
|
34
|
-
rem/api/mcp_router/tools.py,sha256=
|
|
34
|
+
rem/api/mcp_router/tools.py,sha256=jD9kStAnLtgdX33EaWrYds_yUT151sPh84WjYkR9izc,60943
|
|
35
35
|
rem/api/middleware/tracking.py,sha256=ZlFkCVsmIfGuiRX1PPWN0vEIPZoOFIKqMZ3P-CjwfHc,6453
|
|
36
|
-
rem/api/routers/admin.py,sha256=
|
|
37
|
-
rem/api/routers/auth.py,sha256=
|
|
38
|
-
rem/api/routers/
|
|
39
|
-
rem/api/routers/
|
|
40
|
-
rem/api/routers/
|
|
41
|
-
rem/api/routers/
|
|
42
|
-
rem/api/routers/
|
|
43
|
-
rem/api/routers/
|
|
36
|
+
rem/api/routers/admin.py,sha256=t5WRsi_niGvdqibk6Qel6T7uF0lO2AdDCG1sQC4HVB4,15179
|
|
37
|
+
rem/api/routers/auth.py,sha256=gF85VMen9BaHxWGWi5xXXYH5MfxZDmtaE2pGMxEfeZ8,31260
|
|
38
|
+
rem/api/routers/common.py,sha256=Sw39bkCOrqoJl0hB9ZuJhXd0223Aj0rJ9Uej-4DPAAU,517
|
|
39
|
+
rem/api/routers/dev.py,sha256=UpwEYZYuxsWSSHZosirdUp1uoyYbD_Mg47z4beqFx-4,2389
|
|
40
|
+
rem/api/routers/feedback.py,sha256=sr-NNawuAYEi-EwyCHYNwI0zGdS-Cwjs6NfGc6GZrnI,11525
|
|
41
|
+
rem/api/routers/messages.py,sha256=YMx3Z_dqDrltt1ZUleiLaBamrrOBD-hvLIhRKlBVn4M,20386
|
|
42
|
+
rem/api/routers/models.py,sha256=VvHA1JmpiyVCHhH68s8PNwpVxSvAyGlXQJ3T8dFMwRs,2088
|
|
43
|
+
rem/api/routers/query.py,sha256=7g9e-LdrlIMr-VpW8MZFVT0oEVuoF8O5fIaUovp2u0M,14104
|
|
44
|
+
rem/api/routers/shared_sessions.py,sha256=2CRAZUR8OLq39KC1r4IBQycE5PYO5Jg9lSJG8mnPa7M,12866
|
|
44
45
|
rem/api/routers/chat/__init__.py,sha256=fck9klAzF7HJHNPAhl0B63uSavXvs6h26QhUsByf4JM,113
|
|
45
|
-
rem/api/routers/chat/
|
|
46
|
+
rem/api/routers/chat/child_streaming.py,sha256=B-XAvAK0UlJOCN_RNwNESgVkdpKg3emiPo2s3MdTuYs,13457
|
|
47
|
+
rem/api/routers/chat/completions.py,sha256=I6EKMVfEe4QmfsEfW6mTK7riJWZUzkWZCgNRnmJG7ik,29637
|
|
46
48
|
rem/api/routers/chat/json_utils.py,sha256=BVRu-7PWIHTbC9Ubq4MfifZ8qYQZpcGhEgFgPVcXXKE,2191
|
|
47
49
|
rem/api/routers/chat/models.py,sha256=kzBxRvm5Ie2IchJrnFOom8cx6_ieEbuF2RqfiRJNNh8,7339
|
|
48
50
|
rem/api/routers/chat/otel_utils.py,sha256=al_4v044T3sOtIZtT9kHiNT6Twlc7wqz26edCcUSHSY,930
|
|
49
|
-
rem/api/routers/chat/sse_events.py,sha256=
|
|
50
|
-
rem/api/routers/chat/streaming.py,sha256=
|
|
51
|
+
rem/api/routers/chat/sse_events.py,sha256=m1-2HodSKx9NI6OCcgX17kHcV5GBYmp1iOm1lG8FdrE,16724
|
|
52
|
+
rem/api/routers/chat/streaming.py,sha256=6D98GxNSF-EIfcgzxumUaFm0gNee4D4-bhkWwF6hrgc,43594
|
|
53
|
+
rem/api/routers/chat/streaming_utils.py,sha256=ipVHWATbCjrg6Rrad9SMz0gIe6aS56lDn9fwwuFUJvA,9735
|
|
51
54
|
rem/auth/README.md,sha256=BpZUqEVYMUpQG4guykyuvmtzlH3_LsGzspuRZS20i8k,8631
|
|
52
55
|
rem/auth/__init__.py,sha256=ebS-_x21TZsgq7QVgziUpXagSVQU5y0kIxqc_ZywzCE,1027
|
|
53
56
|
rem/auth/jwt.py,sha256=VT77nTYqCt4tkbd_ZmXQy9wU3LcjQ8WLqm9sEcYLYLs,11600
|
|
@@ -60,21 +63,22 @@ rem/auth/providers/microsoft.py,sha256=sv6emYa5B7XTk6gi18n_UCLPDqUmrrsuDnAnWGvJA
|
|
|
60
63
|
rem/cli/README.md,sha256=Cn41x7YoNlnNg3t9WBMGfNXqZBfhjmU6hgPNGL1mlpo,13677
|
|
61
64
|
rem/cli/__init__.py,sha256=NazCCnBFZwMkvJgzeGkfYveP_MUpvbqHcOLZihew0-Q,188
|
|
62
65
|
rem/cli/dreaming.py,sha256=UUxx9zXFDIvI5QhCLB303TPH0OiYMnr3l2YhF2GvF_8,11537
|
|
63
|
-
rem/cli/main.py,sha256=
|
|
66
|
+
rem/cli/main.py,sha256=JvpdGixaBFMdKsAxBGza71Fy0_yejDh7uObFiHNq5Hc,3226
|
|
64
67
|
rem/cli/commands/README.md,sha256=CxTm4pAKVzE780sWn_sAILu2_nH_0oh9whppZvW4bew,9295
|
|
65
68
|
rem/cli/commands/__init__.py,sha256=wKff1WrBXwf-vDXjSvUuk-61Npm5716okVnOQ22FcEk,30
|
|
66
|
-
rem/cli/commands/ask.py,sha256=
|
|
69
|
+
rem/cli/commands/ask.py,sha256=3A8oCyUt1IlYWLYX390s1Yk--OgxdMdXuz8VqdqJiOk,23863
|
|
67
70
|
rem/cli/commands/cluster.py,sha256=MQThC3Da73ixVQ75UYxleQlB8AqPQLzEK73eaB8pNFI,64247
|
|
68
71
|
rem/cli/commands/configure.py,sha256=GQzlER8PkUCTaeYuLbXUYoeqlmEDafcjAcPJrDchC1I,16595
|
|
69
72
|
rem/cli/commands/db.py,sha256=9uAJT4xkMstVuqXjj02y-4A3y5G8DUsEaLf44Q3ayXA,28141
|
|
70
73
|
rem/cli/commands/dreaming.py,sha256=2P8nyX9gnRgyCJZrDuyJt5_YAsFmjUGa6dg7OvoLA8k,13292
|
|
71
74
|
rem/cli/commands/experiments.py,sha256=dRJKtvrGQu0a9bQZaLnVfdWhaur2bKYviixqOnYQC-k,62472
|
|
72
75
|
rem/cli/commands/mcp.py,sha256=PiP_zXflZ2lPVgmH3N8EGOWXDSfvNTQJD-MMW3ym3xo,1666
|
|
73
|
-
rem/cli/commands/process.py,sha256=
|
|
76
|
+
rem/cli/commands/process.py,sha256=JH5xcf11pDlw2eD5Cp2taFPRC0DbiHyiZcQfKSDk8rY,14681
|
|
77
|
+
rem/cli/commands/query.py,sha256=ttJObJD6YCqlfT0noCuSc-27PopEP7c293FbCw7s5nE,3712
|
|
74
78
|
rem/cli/commands/scaffold.py,sha256=hv2-ozD1bbD8FEky7OdIDzcgu-KISs5ek6APqykdZ6I,1618
|
|
75
79
|
rem/cli/commands/schema.py,sha256=oCsRUoih2MC_mpxmj14hsQy0xWLCddSUYcfGnDMlbuw,7325
|
|
76
80
|
rem/cli/commands/serve.py,sha256=ku6z5gxRwmY-vNdNELGPA8aiYyO4QGRgJ_H4wpusd8Y,2926
|
|
77
|
-
rem/cli/commands/session.py,sha256=
|
|
81
|
+
rem/cli/commands/session.py,sha256=2vPdaSXSWfs3YozxAzHoOY1ph9l9V4PAitzv2wjOcyI,13933
|
|
78
82
|
rem/models/core/__init__.py,sha256=BBbARx5_7uVz5FuuoPdFm3tbiWZWubs97i3smU0UxXg,1449
|
|
79
83
|
rem/models/core/core_model.py,sha256=aYVx2905n0b6TGLnIiV5YMWO2O8pxHVtLEWljWvURxU,2617
|
|
80
84
|
rem/models/core/engram.py,sha256=CuoilA74hmlgMT2mZCoEEh0jFsMrKUw9wdyFOygBa8E,10135
|
|
@@ -92,14 +96,14 @@ rem/models/entities/ontology.py,sha256=1K9rNZ32BjS24tmjYN89zW81kFVw2vAfcY24ldJqY
|
|
|
92
96
|
rem/models/entities/ontology_config.py,sha256=fe-LLM-AaKznVoQ02ou2GvPSAp_Bwez0rk3H0RIUYTw,5055
|
|
93
97
|
rem/models/entities/resource.py,sha256=FW7R_AylZilb-1iYfZA5MMQw2zA42CUVweKgO-4cwqM,3407
|
|
94
98
|
rem/models/entities/schema.py,sha256=CEcd49kR_6YgaLLKsWaIb2J0KdbVsgYoi_srPgzr9Aw,2945
|
|
95
|
-
rem/models/entities/session.py,sha256=
|
|
99
|
+
rem/models/entities/session.py,sha256=CODIf3979RZ-bj6gwVZFNmnlKmd6QnxhsmGPTSjn4IA,2519
|
|
96
100
|
rem/models/entities/shared_session.py,sha256=PWTH637NHmwziXCgr1BM0KXWLUzHrbfLlYKLH3qdU6A,5901
|
|
97
101
|
rem/models/entities/subscriber.py,sha256=0x51UkGRkAeJfr_0u4srN8H0NrXJEv5MdESeQsjvin4,5181
|
|
98
102
|
rem/models/entities/user.py,sha256=Ps-CWn-Rkj7yYEW768_mSu3maDxysxsJWT2T7XisuN4,2879
|
|
99
103
|
rem/schemas/README.md,sha256=_WH2A78jyLb11xu8q1tu4pDMlgZfE9WjYqrAUbn2BIM,13588
|
|
100
104
|
rem/schemas/__init__.py,sha256=cY7Hqc056Mb3t12nfpkAK6WZDvOP1gk4rv0CK4VbhTk,213
|
|
101
105
|
rem/schemas/agents/README.md,sha256=FZI5B8Miqod7KY3KxidW4q8u9W7FbtigV2VU7ropPS0,2815
|
|
102
|
-
rem/schemas/agents/rem.yaml,sha256=
|
|
106
|
+
rem/schemas/agents/rem.yaml,sha256=oYVvyfbyW0wCbF-XVrfW3FitbTF4Zdgr5hOHcJ-19Ls,8389
|
|
103
107
|
rem/schemas/agents/core/agent-builder.yaml,sha256=-Yy-X1nreK1hEjGad1Pr0ROtG1LiRtidq8-63CMEqL4,7399
|
|
104
108
|
rem/schemas/agents/core/moment-builder.yaml,sha256=-nieKbEiYKiIwBtTCBtIVDKV-cfXpGn0AJ66BUUm48U,8368
|
|
105
109
|
rem/schemas/agents/core/rem-query-agent.yaml,sha256=dQyShquyn-2nGooy8tyZ588etfx4kzfAE1xDIBCJCVI,10265
|
|
@@ -171,7 +175,7 @@ rem/services/postgres/migration_service.py,sha256=2irsWfzczZ0_-wge6ReyCrFrE3Hxvn
|
|
|
171
175
|
rem/services/postgres/programmable_diff_service.py,sha256=Ip6gRm7LRdYww_5nWkhnXPdqjHSW4sbFOWjBatLHiQs,25075
|
|
172
176
|
rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=523lJuq_xeRWVo8D3ocFd7else5ZUw2XAketmhDN1wA,17295
|
|
173
177
|
rem/services/postgres/register_type.py,sha256=AF88kjn0Gdi8xEaAj5JimH1BrzZ7ONaSOQ4qKKXLhTw,11387
|
|
174
|
-
rem/services/postgres/repository.py,sha256=
|
|
178
|
+
rem/services/postgres/repository.py,sha256=U_I43BSGjK8qVBCCjyJjp6kCa2-U4A19Q-WdBMK_lfg,16630
|
|
175
179
|
rem/services/postgres/schema_generator.py,sha256=R0qJI_wFp4JgkGsh42kVtxdCAWjd129qlGV2_3YdgoM,23943
|
|
176
180
|
rem/services/postgres/service.py,sha256=3CIOP7LuaK4p2rYTyscIXasGLTwjb62HnAGbOCuEm74,27122
|
|
177
181
|
rem/services/postgres/sql_builder.py,sha256=dgezomG1s-cLcu8Q3u8AjOWO3Rtyg4r_m91UAE4vc9o,10418
|
|
@@ -182,18 +186,19 @@ rem/services/rem/executor.py,sha256=o30fYs7Y91arcCZ70PurPn-Q_7gXjxZXerk70A-MM4A,
|
|
|
182
186
|
rem/services/rem/parser.py,sha256=w7jFSzWuNSTrhPDw3s5IH4O0kVT4zwBp0i52RyNEPNs,6896
|
|
183
187
|
rem/services/rem/queries.py,sha256=k-fniVSMBcq4TPUw-g4kp6D9Fbs5DphqUwzAk2wXv5M,5146
|
|
184
188
|
rem/services/rem/query.py,sha256=z4Qcaed1mPG2p-4pazEUlnUFqOEYxrKGYLffwD2-V-c,12178
|
|
185
|
-
rem/services/rem/service.py,sha256
|
|
189
|
+
rem/services/rem/service.py,sha256=--yHq3ODXxX2mgc2AmUS_pNm46g2S8aEyJ0vEZYrjU0,22773
|
|
186
190
|
rem/services/session/README.md,sha256=WDoVWMRXrSh6wRSlUQ0oIHUItOol65INl86VCNPUOYQ,10446
|
|
187
|
-
rem/services/session/__init__.py,sha256=
|
|
188
|
-
rem/services/session/compression.py,sha256=
|
|
189
|
-
rem/services/session/pydantic_messages.py,sha256=
|
|
190
|
-
rem/services/session/reload.py,sha256=
|
|
191
|
+
rem/services/session/__init__.py,sha256=y9tvBcto0qUcduZwAQn1EwrAo-bZ0ZErodz_1SeN5kU,417
|
|
192
|
+
rem/services/session/compression.py,sha256=WHh0IZP-pM3_QNeYcYLyq-9Zz_p2HT4iFezor5RQcks,18936
|
|
193
|
+
rem/services/session/pydantic_messages.py,sha256=1mLq-AJfa8Gf0kfwmPGW_cghFPKEB5dkHHFmdeP9-lY,12338
|
|
194
|
+
rem/services/session/reload.py,sha256=Abr9QOq_PPTsQelMGzWvgh8fKRbW2WH_ZT8ATSsvsgQ,2896
|
|
191
195
|
rem/sql/background_indexes.sql,sha256=wbQMtgap247K29w24aPPHhhF0tdcFuZ2nCWyALh51DM,1985
|
|
192
|
-
rem/sql/migrations/001_install.sql,sha256=
|
|
196
|
+
rem/sql/migrations/001_install.sql,sha256=95-f4L8KUo5te9r_G0fNPdsr8KXK34HaF-dH_vbdr9k,35485
|
|
193
197
|
rem/sql/migrations/002_install_models.sql,sha256=bxb35SX4KZ9qLAlQrKf35R82F3jWiqmVyeuvDRlXUeA,153766
|
|
194
198
|
rem/sql/migrations/003_optional_extensions.sql,sha256=QACy3J50ZgV_4BHNkkT3iswkE1ijc0oCAOgavv6KC5g,12443
|
|
195
|
-
rem/sql/migrations/004_cache_system.sql,sha256=
|
|
199
|
+
rem/sql/migrations/004_cache_system.sql,sha256=dbjKNTFsB2pHAOqThkpsK_pMWN0GKZoFvQopHauqzjY,10728
|
|
196
200
|
rem/sql/migrations/005_schema_update.sql,sha256=fVcuUt0I24UXMEWA25TM-kN29GC19IAqxlxFP-3Z2ys,5055
|
|
201
|
+
rem/sql/migrations/migrate_session_id_to_uuid.sql,sha256=-H4ROtu4SPHTVbzW60Am1YdpJ_OHagWCAwgqd3wbDIM,1248
|
|
197
202
|
rem/utils/AGENTIC_CHUNKING.md,sha256=Z9IyL5yoFTlvamPE5KA7cs0Btoc_6bq8hh7Q_WARlw8,17230
|
|
198
203
|
rem/utils/README.md,sha256=Osix2SVYAECMFTFnLhn8D8rsPrtNaCBWfkZfkn5RS60,18087
|
|
199
204
|
rem/utils/__init__.py,sha256=ZGMTgR7g-V3fhfgKo791wGBhdxy72xTJSo7Q_xwkQRI,1417
|
|
@@ -209,7 +214,7 @@ rem/utils/files.py,sha256=6ax-5vmk_4cI-IG55PT9sKj_DqXBl32RkTRSsxqvgGY,8759
|
|
|
209
214
|
rem/utils/markdown.py,sha256=zhfSiSRX36vky1b2UOGKsuSr11L2l6Kl_O7iSfwQXBY,401
|
|
210
215
|
rem/utils/mime_types.py,sha256=8KGEuPWVdQ8r1DFLsgiaAgEYqMaaQIk-6lCVOBB1z_A,5346
|
|
211
216
|
rem/utils/model_helpers.py,sha256=c60hxrS6wmYCIJjjl7uMq4cE-GCe27A7YAizRjKqtJE,15160
|
|
212
|
-
rem/utils/schema_loader.py,sha256=
|
|
217
|
+
rem/utils/schema_loader.py,sha256=FEooLXUxzzpoUeNsgwYGM5AkM6flsm4cp1Pm6L3mDSA,25933
|
|
213
218
|
rem/utils/sql_paths.py,sha256=4bEHU3J3liZdhWYu0WSpCQSo-wfO0sHC_BrJlStRAks,4257
|
|
214
219
|
rem/utils/sql_types.py,sha256=VKGmDhxPP91EnjJ6h78Q2sUvjBulowR1brtgAdACbtE,10622
|
|
215
220
|
rem/utils/user_id.py,sha256=AhrUniMZYDybHT6mcv9RalUS3klobqkoMmPh9ZxiZcU,2107
|
|
@@ -224,7 +229,7 @@ rem/workers/dreaming.py,sha256=UqCf-iBUhzBVBRFj7_DtR6q27oRo7EUoal9qqHLzlo4,17823
|
|
|
224
229
|
rem/workers/engram_processor.py,sha256=Ws92kAILMLK_np3F1HRmhKKXiruLIvFn3o9MY3V2W8g,10779
|
|
225
230
|
rem/workers/sqs_file_processor.py,sha256=tX8S0yo2n1XGvaZ7JUqeGmtTwxybQqz3wkHT2j6Ak7Y,6597
|
|
226
231
|
rem/workers/unlogged_maintainer.py,sha256=KhebhXl3s6DwvHnXXEJ45r5tLK9PNj-0KclNIQVQ68s,15817
|
|
227
|
-
remdb-0.3.
|
|
228
|
-
remdb-0.3.
|
|
229
|
-
remdb-0.3.
|
|
230
|
-
remdb-0.3.
|
|
232
|
+
remdb-0.3.245.dist-info/METADATA,sha256=aqFWcRJ1shoMwHMtXAAkX4hkEq-9HPNdHZBwxrE0C8w,53340
|
|
233
|
+
remdb-0.3.245.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
234
|
+
remdb-0.3.245.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
|
|
235
|
+
remdb-0.3.245.dist-info/RECORD,,
|