remdb 0.3.226__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.

@@ -249,73 +249,65 @@ def load_agent_schema(
249
249
  enable_db_fallback: bool = True,
250
250
  ) -> dict[str, Any]:
251
251
  """
252
- Load agent schema from YAML file with unified search logic and caching.
252
+ Load agent schema with database-first priority for hot-reloading support.
253
253
 
254
254
  Schema names are case-invariant - "Rem", "rem", "REM" all resolve to the same schema.
255
255
 
256
- Filesystem schemas are cached indefinitely (immutable, versioned with code).
257
- Database schemas (future) will be cached with TTL for invalidation.
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.
258
259
 
259
260
  Handles path resolution automatically:
260
- - "rem" → searches schemas/agents/rem.yaml (top-level)
261
- - "moment-builder" → searches schemas/agents/core/moment-builder.yaml
262
- - "contract-analyzer" → searches schemas/agents/examples/contract-analyzer.yaml
263
- - "core/moment-builder" → searches schemas/agents/core/moment-builder.yaml
264
- - "/absolute/path.yaml" → loads directly
265
- - "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)
266
265
 
267
266
  Search Order:
268
- 1. Check cache (if use_cache=True and schema found in FS cache)
269
- 2. Exact path if it exists (absolute or relative)
270
- 3. Custom paths from rem.register_schema_path() and SCHEMA__PATHS env var
271
- 4. Package resources: schemas/agents/{name}.yaml (top-level)
272
- 5. Package resources: schemas/agents/core/{name}.yaml
273
- 6. Package resources: schemas/agents/examples/{name}.yaml
274
- 7. Package resources: schemas/evaluators/{name}.yaml
275
- 8. Package resources: schemas/{name}.yaml
276
- 9. Database LOOKUP: schemas table (if enable_db_fallback=True and user_id provided)
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
277
276
 
278
277
  Args:
279
278
  schema_name_or_path: Schema name or file path (case-invariant for names)
280
279
  Examples: "rem-query-agent", "Contract-Analyzer", "./my-schema.yaml"
281
280
  use_cache: If True, uses in-memory cache for filesystem schemas
282
- user_id: User ID for database schema lookup (required for DB fallback)
283
- enable_db_fallback: If True, falls back to database LOOKUP when file not found
281
+ user_id: User ID for database schema lookup
282
+ enable_db_fallback: If True, checks database FIRST for schema (default: True)
284
283
 
285
284
  Returns:
286
285
  Agent schema as dictionary
287
286
 
288
287
  Raises:
289
- FileNotFoundError: If schema not found in any search location (filesystem + database)
288
+ FileNotFoundError: If schema not found in any search location (database + filesystem)
290
289
  yaml.YAMLError: If schema file is invalid YAML
291
290
 
292
291
  Examples:
293
- >>> # Load by short name (cached after first load) - case invariant
294
- >>> schema = load_agent_schema("Contract-Analyzer") # same as "contract-analyzer"
292
+ >>> # Load by short name - checks database first for hot-reload support
293
+ >>> schema = load_agent_schema("Contract-Analyzer") # case invariant
295
294
  >>>
296
- >>> # Load from custom path (not cached - custom paths may change)
295
+ >>> # Load from custom path (skips database - exact paths always use filesystem)
297
296
  >>> schema = load_agent_schema("./my-agent.yaml")
298
297
  >>>
299
- >>> # Load evaluator schema (cached)
298
+ >>> # Load evaluator schema
300
299
  >>> schema = load_agent_schema("rem-lookup-correctness")
301
- >>>
302
- >>> # Load custom user schema from database (case invariant)
303
- >>> schema = load_agent_schema("My-Agent", user_id="user-123") # same as "my-agent"
304
300
  """
305
301
  # Normalize the name for cache key (lowercase for case-invariant lookups)
306
302
  cache_key = str(schema_name_or_path).replace('agents/', '').replace('schemas/', '').replace('evaluators/', '').replace('core/', '').replace('examples/', '').lower()
307
303
  if cache_key.endswith('.yaml') or cache_key.endswith('.yml'):
308
304
  cache_key = cache_key.rsplit('.', 1)[0]
309
305
 
310
- # Check cache first (only for package resources, not custom paths)
311
306
  path = Path(schema_name_or_path)
312
307
  is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
313
308
 
314
- if use_cache and not is_custom_path and cache_key in _fs_schema_cache:
315
- logger.debug(f"Loading schema from cache: {cache_key}")
316
- return _fs_schema_cache[cache_key]
317
-
318
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)
319
311
  if path.exists() and path.is_file():
320
312
  logger.debug(f"Loading schema from exact path: {path}")
321
313
  with open(path, "r") as f:
@@ -324,10 +316,28 @@ def load_agent_schema(
324
316
  # Don't cache custom paths (they may change)
325
317
  return cast(dict[str, Any], schema)
326
318
 
327
- # 2. Normalize name for package resource search (lowercase)
319
+ # 2. Normalize name for lookups (lowercase)
328
320
  base_name = cache_key
329
321
 
330
- # 3. Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
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)
331
341
  from ..registry import get_schema_paths
332
342
 
333
343
  custom_paths = get_schema_paths()
@@ -358,7 +368,7 @@ def load_agent_schema(
358
368
  # Don't cache custom paths (they may change during development)
359
369
  return cast(dict[str, Any], schema)
360
370
 
361
- # 4. Try package resources with standard search paths
371
+ # 6. Try package resources with standard search paths
362
372
  for search_pattern in SCHEMA_SEARCH_PATHS:
363
373
  search_path = search_pattern.format(name=base_name)
364
374
 
@@ -383,20 +393,7 @@ def load_agent_schema(
383
393
  logger.debug(f"Could not load from {search_path}: {e}")
384
394
  continue
385
395
 
386
- # 5. Try database LOOKUP fallback (if enabled)
387
- # Always search for public schemas (user_id IS NULL), plus user-specific if user_id provided
388
- if enable_db_fallback:
389
- try:
390
- logger.debug(f"Attempting database LOOKUP for schema: {base_name} (user_id={user_id or 'public'})")
391
- db_schema = _load_schema_from_database(base_name, user_id)
392
- if db_schema:
393
- logger.info(f"✅ Loaded schema from database: {base_name}")
394
- return db_schema
395
- except Exception as e:
396
- logger.debug(f"Database schema lookup failed: {e}")
397
- # Fall through to error below
398
-
399
- # 6. Schema not found in any location
396
+ # 7. Schema not found in any location
400
397
  searched_paths = [pattern.format(name=base_name) for pattern in SCHEMA_SEARCH_PATHS]
401
398
 
402
399
  custom_paths_note = ""
@@ -424,18 +421,21 @@ async def load_agent_schema_async(
424
421
  schema_name_or_path: str,
425
422
  user_id: str | None = None,
426
423
  db=None,
424
+ enable_db_fallback: bool = True,
427
425
  ) -> dict[str, Any]:
428
426
  """
429
- Async version of load_agent_schema for use in async contexts.
427
+ Async version of load_agent_schema with database-first priority.
430
428
 
431
429
  Schema names are case-invariant - "MyAgent", "myagent", "MYAGENT" all resolve to the same schema.
432
430
 
433
- This version accepts an existing database connection to avoid creating new connections.
431
+ **IMPORTANT**: Database is checked FIRST (before filesystem) to enable hot-reloading
432
+ of schema updates without redeploying the application.
434
433
 
435
434
  Args:
436
435
  schema_name_or_path: Schema name or file path (case-invariant for names)
437
436
  user_id: User ID for database schema lookup
438
437
  db: Optional existing PostgresService connection (if None, will create one)
438
+ enable_db_fallback: If True, checks database FIRST for schema (default: True)
439
439
 
440
440
  Returns:
441
441
  Agent schema as dictionary
@@ -443,7 +443,6 @@ async def load_agent_schema_async(
443
443
  Raises:
444
444
  FileNotFoundError: If schema not found
445
445
  """
446
- # First try filesystem search (sync operations are fine)
447
446
  path = Path(schema_name_or_path)
448
447
 
449
448
  # Normalize the name for cache key (lowercase for case-invariant lookups)
@@ -453,12 +452,7 @@ async def load_agent_schema_async(
453
452
 
454
453
  is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
455
454
 
456
- # Check cache
457
- if not is_custom_path and cache_key in _fs_schema_cache:
458
- logger.debug(f"Loading schema from cache: {cache_key}")
459
- return _fs_schema_cache[cache_key]
460
-
461
- # Try exact path (must be a file, not directory)
455
+ # 1. Try exact path first (skips database - explicit file reference)
462
456
  if path.exists() and path.is_file():
463
457
  logger.debug(f"Loading schema from exact path: {path}")
464
458
  with open(path, "r") as f:
@@ -467,7 +461,51 @@ async def load_agent_schema_async(
467
461
 
468
462
  base_name = cache_key
469
463
 
470
- # Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
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)
471
509
  from ..registry import get_schema_paths
472
510
  custom_paths = get_schema_paths()
473
511
 
@@ -489,7 +527,7 @@ async def load_agent_schema_async(
489
527
  schema = yaml.safe_load(f)
490
528
  return cast(dict[str, Any], schema)
491
529
 
492
- # Try package resources
530
+ # 5. Try package resources
493
531
  for search_pattern in SCHEMA_SEARCH_PATHS:
494
532
  search_path = search_pattern.format(name=base_name)
495
533
  try:
@@ -503,44 +541,6 @@ async def load_agent_schema_async(
503
541
  except Exception:
504
542
  continue
505
543
 
506
- # Try database lookup - always search public schemas, plus user-specific if user_id provided
507
- from rem.services.postgres import get_postgres_service
508
-
509
- should_disconnect = False
510
- if db is None:
511
- db = get_postgres_service()
512
- if db:
513
- await db.connect()
514
- should_disconnect = True
515
-
516
- if db:
517
- try:
518
- if user_id:
519
- query = """
520
- SELECT spec FROM schemas
521
- WHERE LOWER(name) = LOWER($1)
522
- AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
523
- LIMIT 1
524
- """
525
- row = await db.fetchrow(query, base_name, user_id)
526
- else:
527
- # No user_id - only search public schemas
528
- query = """
529
- SELECT spec FROM schemas
530
- WHERE LOWER(name) = LOWER($1)
531
- AND (user_id = 'system' OR user_id IS NULL)
532
- LIMIT 1
533
- """
534
- row = await db.fetchrow(query, base_name)
535
- if row:
536
- spec = row.get("spec")
537
- if spec and isinstance(spec, dict):
538
- logger.info(f"✅ Loaded schema from database: {base_name}")
539
- return spec
540
- finally:
541
- if should_disconnect:
542
- await db.disconnect()
543
-
544
544
  # Not found
545
545
  raise FileNotFoundError(f"Schema not found: {schema_name_or_path}")
546
546
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remdb
3
- Version: 0.3.226
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.14
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,11 +3,11 @@ 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=El_nPe_uq8EllybZ4u-uYC_zriwxQqJ6H-vKugMyi60,60939
7
- rem/agentic/README.md,sha256=M8opfg40BAnJokRhw7C-hovyfI183qX2wP8uavlWOfs,30510
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=l7sJIJGJm_40xp-mmqibblu7Ik33MJM2E9mhbE5qHlA,15133
10
- rem/agentic/context_builder.py,sha256=0V-uN5B3Q7VPVH4uaN26aHMDd_ChagfCiwfYty30LbI,14583
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
@@ -22,33 +22,35 @@ rem/agentic/mcp/tool_wrapper.py,sha256=7xpF1UuGZQy0rfuzQgkNxHGbwWFbNWnnIjtKupxRM
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=WGzH6MoMbTBeUrEEGU5s-MzDScLR0iXWHprIbOsqoXM,34187
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=sN9quo7HsGxlDpOS1_1kwM1RhT9oayvpz9Bsi0DwKkM,18788
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=j0KSfJ9jt1e7sGNn5nvhQpE_qO0O9WP6NRVlJbfieOI,59510
34
+ rem/api/mcp_router/tools.py,sha256=jD9kStAnLtgdX33EaWrYds_yUT151sPh84WjYkR9izc,60943
35
35
  rem/api/middleware/tracking.py,sha256=ZlFkCVsmIfGuiRX1PPWN0vEIPZoOFIKqMZ3P-CjwfHc,6453
36
36
  rem/api/routers/admin.py,sha256=t5WRsi_niGvdqibk6Qel6T7uF0lO2AdDCG1sQC4HVB4,15179
37
- rem/api/routers/auth.py,sha256=api1zAX_f2z4HTpEyvCgAipYrrDoLZgySQN5S5goxno,26580
37
+ rem/api/routers/auth.py,sha256=gF85VMen9BaHxWGWi5xXXYH5MfxZDmtaE2pGMxEfeZ8,31260
38
38
  rem/api/routers/common.py,sha256=Sw39bkCOrqoJl0hB9ZuJhXd0223Aj0rJ9Uej-4DPAAU,517
39
39
  rem/api/routers/dev.py,sha256=UpwEYZYuxsWSSHZosirdUp1uoyYbD_Mg47z4beqFx-4,2389
40
40
  rem/api/routers/feedback.py,sha256=sr-NNawuAYEi-EwyCHYNwI0zGdS-Cwjs6NfGc6GZrnI,11525
41
41
  rem/api/routers/messages.py,sha256=YMx3Z_dqDrltt1ZUleiLaBamrrOBD-hvLIhRKlBVn4M,20386
42
42
  rem/api/routers/models.py,sha256=VvHA1JmpiyVCHhH68s8PNwpVxSvAyGlXQJ3T8dFMwRs,2088
43
- rem/api/routers/query.py,sha256=0BZjiLJ4MKxP1eb8_tKrK-gzvzVG6aLY9VmbIa-hwVQ,14400
43
+ rem/api/routers/query.py,sha256=7g9e-LdrlIMr-VpW8MZFVT0oEVuoF8O5fIaUovp2u0M,14104
44
44
  rem/api/routers/shared_sessions.py,sha256=2CRAZUR8OLq39KC1r4IBQycE5PYO5Jg9lSJG8mnPa7M,12866
45
45
  rem/api/routers/chat/__init__.py,sha256=fck9klAzF7HJHNPAhl0B63uSavXvs6h26QhUsByf4JM,113
46
+ rem/api/routers/chat/child_streaming.py,sha256=B-XAvAK0UlJOCN_RNwNESgVkdpKg3emiPo2s3MdTuYs,13457
46
47
  rem/api/routers/chat/completions.py,sha256=I6EKMVfEe4QmfsEfW6mTK7riJWZUzkWZCgNRnmJG7ik,29637
47
48
  rem/api/routers/chat/json_utils.py,sha256=BVRu-7PWIHTbC9Ubq4MfifZ8qYQZpcGhEgFgPVcXXKE,2191
48
49
  rem/api/routers/chat/models.py,sha256=kzBxRvm5Ie2IchJrnFOom8cx6_ieEbuF2RqfiRJNNh8,7339
49
50
  rem/api/routers/chat/otel_utils.py,sha256=al_4v044T3sOtIZtT9kHiNT6Twlc7wqz26edCcUSHSY,930
50
51
  rem/api/routers/chat/sse_events.py,sha256=m1-2HodSKx9NI6OCcgX17kHcV5GBYmp1iOm1lG8FdrE,16724
51
- rem/api/routers/chat/streaming.py,sha256=LEha-T_37xjbF6gqeTxmWwm2FzwBFOQvcqPV_soZH9Q,57214
52
+ rem/api/routers/chat/streaming.py,sha256=6D98GxNSF-EIfcgzxumUaFm0gNee4D4-bhkWwF6hrgc,43594
53
+ rem/api/routers/chat/streaming_utils.py,sha256=ipVHWATbCjrg6Rrad9SMz0gIe6aS56lDn9fwwuFUJvA,9735
52
54
  rem/auth/README.md,sha256=BpZUqEVYMUpQG4guykyuvmtzlH3_LsGzspuRZS20i8k,8631
53
55
  rem/auth/__init__.py,sha256=ebS-_x21TZsgq7QVgziUpXagSVQU5y0kIxqc_ZywzCE,1027
54
56
  rem/auth/jwt.py,sha256=VT77nTYqCt4tkbd_ZmXQy9wU3LcjQ8WLqm9sEcYLYLs,11600
@@ -61,21 +63,22 @@ rem/auth/providers/microsoft.py,sha256=sv6emYa5B7XTk6gi18n_UCLPDqUmrrsuDnAnWGvJA
61
63
  rem/cli/README.md,sha256=Cn41x7YoNlnNg3t9WBMGfNXqZBfhjmU6hgPNGL1mlpo,13677
62
64
  rem/cli/__init__.py,sha256=NazCCnBFZwMkvJgzeGkfYveP_MUpvbqHcOLZihew0-Q,188
63
65
  rem/cli/dreaming.py,sha256=UUxx9zXFDIvI5QhCLB303TPH0OiYMnr3l2YhF2GvF_8,11537
64
- rem/cli/main.py,sha256=gP-lnD6kkCGeeMHh9aWPRb26CT1zpsDUwuQ30Zqkobw,3127
66
+ rem/cli/main.py,sha256=JvpdGixaBFMdKsAxBGza71Fy0_yejDh7uObFiHNq5Hc,3226
65
67
  rem/cli/commands/README.md,sha256=CxTm4pAKVzE780sWn_sAILu2_nH_0oh9whppZvW4bew,9295
66
68
  rem/cli/commands/__init__.py,sha256=wKff1WrBXwf-vDXjSvUuk-61Npm5716okVnOQ22FcEk,30
67
- rem/cli/commands/ask.py,sha256=9dlx13_ZP9N8ivjmVgfuN3c8BTDdTfoZB2E1yNFi0Bk,18396
69
+ rem/cli/commands/ask.py,sha256=3A8oCyUt1IlYWLYX390s1Yk--OgxdMdXuz8VqdqJiOk,23863
68
70
  rem/cli/commands/cluster.py,sha256=MQThC3Da73ixVQ75UYxleQlB8AqPQLzEK73eaB8pNFI,64247
69
71
  rem/cli/commands/configure.py,sha256=GQzlER8PkUCTaeYuLbXUYoeqlmEDafcjAcPJrDchC1I,16595
70
72
  rem/cli/commands/db.py,sha256=9uAJT4xkMstVuqXjj02y-4A3y5G8DUsEaLf44Q3ayXA,28141
71
73
  rem/cli/commands/dreaming.py,sha256=2P8nyX9gnRgyCJZrDuyJt5_YAsFmjUGa6dg7OvoLA8k,13292
72
74
  rem/cli/commands/experiments.py,sha256=dRJKtvrGQu0a9bQZaLnVfdWhaur2bKYviixqOnYQC-k,62472
73
75
  rem/cli/commands/mcp.py,sha256=PiP_zXflZ2lPVgmH3N8EGOWXDSfvNTQJD-MMW3ym3xo,1666
74
- rem/cli/commands/process.py,sha256=acitqSuisyDwVZ2f2ndF_C5LQbPoQpVrGJLJwl8POG8,14242
76
+ rem/cli/commands/process.py,sha256=JH5xcf11pDlw2eD5Cp2taFPRC0DbiHyiZcQfKSDk8rY,14681
77
+ rem/cli/commands/query.py,sha256=ttJObJD6YCqlfT0noCuSc-27PopEP7c293FbCw7s5nE,3712
75
78
  rem/cli/commands/scaffold.py,sha256=hv2-ozD1bbD8FEky7OdIDzcgu-KISs5ek6APqykdZ6I,1618
76
79
  rem/cli/commands/schema.py,sha256=oCsRUoih2MC_mpxmj14hsQy0xWLCddSUYcfGnDMlbuw,7325
77
80
  rem/cli/commands/serve.py,sha256=ku6z5gxRwmY-vNdNELGPA8aiYyO4QGRgJ_H4wpusd8Y,2926
78
- rem/cli/commands/session.py,sha256=rUDeLnBNwc6A1zSOOs-uHyfixDmBYlVtLToJpbPxo7I,9851
81
+ rem/cli/commands/session.py,sha256=2vPdaSXSWfs3YozxAzHoOY1ph9l9V4PAitzv2wjOcyI,13933
79
82
  rem/models/core/__init__.py,sha256=BBbARx5_7uVz5FuuoPdFm3tbiWZWubs97i3smU0UxXg,1449
80
83
  rem/models/core/core_model.py,sha256=aYVx2905n0b6TGLnIiV5YMWO2O8pxHVtLEWljWvURxU,2617
81
84
  rem/models/core/engram.py,sha256=CuoilA74hmlgMT2mZCoEEh0jFsMrKUw9wdyFOygBa8E,10135
@@ -93,7 +96,7 @@ rem/models/entities/ontology.py,sha256=1K9rNZ32BjS24tmjYN89zW81kFVw2vAfcY24ldJqY
93
96
  rem/models/entities/ontology_config.py,sha256=fe-LLM-AaKznVoQ02ou2GvPSAp_Bwez0rk3H0RIUYTw,5055
94
97
  rem/models/entities/resource.py,sha256=FW7R_AylZilb-1iYfZA5MMQw2zA42CUVweKgO-4cwqM,3407
95
98
  rem/models/entities/schema.py,sha256=CEcd49kR_6YgaLLKsWaIb2J0KdbVsgYoi_srPgzr9Aw,2945
96
- rem/models/entities/session.py,sha256=VKeTAZZphrKz379Av1hhUTWfQ-DbxLAt3CfU3aDHfwk,2499
99
+ rem/models/entities/session.py,sha256=CODIf3979RZ-bj6gwVZFNmnlKmd6QnxhsmGPTSjn4IA,2519
97
100
  rem/models/entities/shared_session.py,sha256=PWTH637NHmwziXCgr1BM0KXWLUzHrbfLlYKLH3qdU6A,5901
98
101
  rem/models/entities/subscriber.py,sha256=0x51UkGRkAeJfr_0u4srN8H0NrXJEv5MdESeQsjvin4,5181
99
102
  rem/models/entities/user.py,sha256=Ps-CWn-Rkj7yYEW768_mSu3maDxysxsJWT2T7XisuN4,2879
@@ -172,7 +175,7 @@ rem/services/postgres/migration_service.py,sha256=2irsWfzczZ0_-wge6ReyCrFrE3Hxvn
172
175
  rem/services/postgres/programmable_diff_service.py,sha256=Ip6gRm7LRdYww_5nWkhnXPdqjHSW4sbFOWjBatLHiQs,25075
173
176
  rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=523lJuq_xeRWVo8D3ocFd7else5ZUw2XAketmhDN1wA,17295
174
177
  rem/services/postgres/register_type.py,sha256=AF88kjn0Gdi8xEaAj5JimH1BrzZ7ONaSOQ4qKKXLhTw,11387
175
- rem/services/postgres/repository.py,sha256=EvrsyMyu-1WDihjC-T2XnBTMYWwrRkhv1eoZDg0wjTg,16701
178
+ rem/services/postgres/repository.py,sha256=U_I43BSGjK8qVBCCjyJjp6kCa2-U4A19Q-WdBMK_lfg,16630
176
179
  rem/services/postgres/schema_generator.py,sha256=R0qJI_wFp4JgkGsh42kVtxdCAWjd129qlGV2_3YdgoM,23943
177
180
  rem/services/postgres/service.py,sha256=3CIOP7LuaK4p2rYTyscIXasGLTwjb62HnAGbOCuEm74,27122
178
181
  rem/services/postgres/sql_builder.py,sha256=dgezomG1s-cLcu8Q3u8AjOWO3Rtyg4r_m91UAE4vc9o,10418
@@ -183,17 +186,17 @@ rem/services/rem/executor.py,sha256=o30fYs7Y91arcCZ70PurPn-Q_7gXjxZXerk70A-MM4A,
183
186
  rem/services/rem/parser.py,sha256=w7jFSzWuNSTrhPDw3s5IH4O0kVT4zwBp0i52RyNEPNs,6896
184
187
  rem/services/rem/queries.py,sha256=k-fniVSMBcq4TPUw-g4kp6D9Fbs5DphqUwzAk2wXv5M,5146
185
188
  rem/services/rem/query.py,sha256=z4Qcaed1mPG2p-4pazEUlnUFqOEYxrKGYLffwD2-V-c,12178
186
- rem/services/rem/service.py,sha256=cYPPCZ90S9QRWi_4JxEe9oybdDM8Is7wgYt8EpLoiVY,21093
189
+ rem/services/rem/service.py,sha256=--yHq3ODXxX2mgc2AmUS_pNm46g2S8aEyJ0vEZYrjU0,22773
187
190
  rem/services/session/README.md,sha256=WDoVWMRXrSh6wRSlUQ0oIHUItOol65INl86VCNPUOYQ,10446
188
191
  rem/services/session/__init__.py,sha256=y9tvBcto0qUcduZwAQn1EwrAo-bZ0ZErodz_1SeN5kU,417
189
- rem/services/session/compression.py,sha256=rxUlnieBmonOxRtYhg1QTkHmKdQZ5bDbW2Qcsc0zEtg,18573
190
- rem/services/session/pydantic_messages.py,sha256=eWqSJW9nyZDgUT1Fxrrp1CVIwlipH4AYwzPBWhPuHXI,10816
191
- rem/services/session/reload.py,sha256=qbs9yYYBaEH0n_XN_A4BqHcB0RIX_JMkZjHNzUR6zY4,2805
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
192
195
  rem/sql/background_indexes.sql,sha256=wbQMtgap247K29w24aPPHhhF0tdcFuZ2nCWyALh51DM,1985
193
196
  rem/sql/migrations/001_install.sql,sha256=95-f4L8KUo5te9r_G0fNPdsr8KXK34HaF-dH_vbdr9k,35485
194
197
  rem/sql/migrations/002_install_models.sql,sha256=bxb35SX4KZ9qLAlQrKf35R82F3jWiqmVyeuvDRlXUeA,153766
195
198
  rem/sql/migrations/003_optional_extensions.sql,sha256=QACy3J50ZgV_4BHNkkT3iswkE1ijc0oCAOgavv6KC5g,12443
196
- rem/sql/migrations/004_cache_system.sql,sha256=iUMRj4r45EhI2kKABp9PS9i_Bs16715HG2ovbYMOsgc,10571
199
+ rem/sql/migrations/004_cache_system.sql,sha256=dbjKNTFsB2pHAOqThkpsK_pMWN0GKZoFvQopHauqzjY,10728
197
200
  rem/sql/migrations/005_schema_update.sql,sha256=fVcuUt0I24UXMEWA25TM-kN29GC19IAqxlxFP-3Z2ys,5055
198
201
  rem/sql/migrations/migrate_session_id_to_uuid.sql,sha256=-H4ROtu4SPHTVbzW60Am1YdpJ_OHagWCAwgqd3wbDIM,1248
199
202
  rem/utils/AGENTIC_CHUNKING.md,sha256=Z9IyL5yoFTlvamPE5KA7cs0Btoc_6bq8hh7Q_WARlw8,17230
@@ -211,7 +214,7 @@ rem/utils/files.py,sha256=6ax-5vmk_4cI-IG55PT9sKj_DqXBl32RkTRSsxqvgGY,8759
211
214
  rem/utils/markdown.py,sha256=zhfSiSRX36vky1b2UOGKsuSr11L2l6Kl_O7iSfwQXBY,401
212
215
  rem/utils/mime_types.py,sha256=8KGEuPWVdQ8r1DFLsgiaAgEYqMaaQIk-6lCVOBB1z_A,5346
213
216
  rem/utils/model_helpers.py,sha256=c60hxrS6wmYCIJjjl7uMq4cE-GCe27A7YAizRjKqtJE,15160
214
- rem/utils/schema_loader.py,sha256=u9-b9X05PWn29RHP4WJMPK3j_DUL22h8K9s_cPnMy6Q,25671
217
+ rem/utils/schema_loader.py,sha256=FEooLXUxzzpoUeNsgwYGM5AkM6flsm4cp1Pm6L3mDSA,25933
215
218
  rem/utils/sql_paths.py,sha256=4bEHU3J3liZdhWYu0WSpCQSo-wfO0sHC_BrJlStRAks,4257
216
219
  rem/utils/sql_types.py,sha256=VKGmDhxPP91EnjJ6h78Q2sUvjBulowR1brtgAdACbtE,10622
217
220
  rem/utils/user_id.py,sha256=AhrUniMZYDybHT6mcv9RalUS3klobqkoMmPh9ZxiZcU,2107
@@ -226,7 +229,7 @@ rem/workers/dreaming.py,sha256=UqCf-iBUhzBVBRFj7_DtR6q27oRo7EUoal9qqHLzlo4,17823
226
229
  rem/workers/engram_processor.py,sha256=Ws92kAILMLK_np3F1HRmhKKXiruLIvFn3o9MY3V2W8g,10779
227
230
  rem/workers/sqs_file_processor.py,sha256=tX8S0yo2n1XGvaZ7JUqeGmtTwxybQqz3wkHT2j6Ak7Y,6597
228
231
  rem/workers/unlogged_maintainer.py,sha256=KhebhXl3s6DwvHnXXEJ45r5tLK9PNj-0KclNIQVQ68s,15817
229
- remdb-0.3.226.dist-info/METADATA,sha256=oSLxEj7l2ii1Gvv0EMdmKwJkThCsg7gjV9I-8cu5_V0,53341
230
- remdb-0.3.226.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
231
- remdb-0.3.226.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
232
- remdb-0.3.226.dist-info/RECORD,,
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,,