remdb 0.3.221__tar.gz → 0.3.240__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of remdb might be problematic. Click here for more details.
- {remdb-0.3.221 → remdb-0.3.240}/.githooks/pre-push +1 -1
- remdb-0.3.240/.kreuzberg/mime/16abeec91e023b5b.msgpack +1 -0
- remdb-0.3.240/.kreuzberg/mime/394432a951453a5d.msgpack +1 -0
- remdb-0.3.240/.kreuzberg/mime/bfcef627f6134a1d.msgpack +1 -0
- remdb-0.3.240/.kreuzberg/mime/dccd2eed35d5d08b.msgpack +1 -0
- {remdb-0.3.221 → remdb-0.3.240}/PKG-INFO +2 -2
- {remdb-0.3.221 → remdb-0.3.240}/pyproject.toml +3 -7
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/README.md +22 -248
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/context_builder.py +24 -30
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/providers/pydantic_ai.py +67 -50
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/mcp_router/resources.py +223 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/mcp_router/tools.py +25 -9
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/admin.py +30 -4
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/auth.py +175 -18
- remdb-0.3.240/src/rem/api/routers/chat/child_streaming.py +395 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/completions.py +8 -19
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/streaming.py +205 -340
- remdb-0.3.240/src/rem/api/routers/chat/streaming_utils.py +327 -0
- remdb-0.3.240/src/rem/api/routers/common.py +18 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/dev.py +7 -1
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/feedback.py +9 -1
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/messages.py +57 -6
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/models.py +9 -1
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/query.py +12 -1
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/shared_sessions.py +16 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/ask.py +61 -81
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/process.py +9 -1
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/session.py +117 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/session.py +1 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/repository.py +7 -17
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/session/pydantic_messages.py +20 -4
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/settings.py +43 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/migrations/004_cache_system.sql +3 -1
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/schema_loader.py +139 -111
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_actual_streaming_save.py +2 -2
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_nested_agent_save.py +2 -1
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_text_response_extraction.py +4 -2
- remdb-0.3.240/tests/unit/test_streaming_utils.py +151 -0
- {remdb-0.3.221 → remdb-0.3.240}/.claude/archive/PUBLISH.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.claude/archive/QUICKSTART.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.claude/archive/publish.sh +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.claude/settings.local.json +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.dockerignore +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.env.example +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.experiments/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.experiments/RUN_ON_CLUSTER.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.experiments/TESTING_GUIDE.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.experiments/test-phoenix-integration.sh +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.githooks/pre-commit +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.gitignore +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/039976f3b4dc7549.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/045e65492b634d11.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/07f5cd0e3fb1d287.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/08f4ae339838b804.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/0a64e58ae1289686.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/0b34bcd318001ead.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/0da06e67dd284834.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/0e200bfe2ea523f2.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/10b1925cb6007390.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/11c55125d2be1895.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/12dd62bbe8ee9b6a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/18f78825b8e302a8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/19a7ff44501eb3f9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/1c9cec1b6f266e8d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/1db0e7d4ac2443af.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/1f32d592b118d944.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/20db05a60f4c6ce3.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/220746359cef9884.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2279f944d9ee9966.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/23c2221c537a5fc7.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/24034098fd444b39.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/245d4933e8c1b195.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2470f3a5e2d1953b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/24acc2df261ae549.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/256e0b513c55383d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/26a8ed0cdfc0ccab.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/28e3c2bf25dfc659.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/295a37ef869b0a49.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2a6f58009e01ad65.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2ab7ae3b2e42644e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2b24548c2f91f8b9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2bb63e6235d19b40.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2c74a0f17cde1b0c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2d728912eb223a33.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2de80149b410a676.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/2e1001cbed04103c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/32d99ccf71d10a38.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/333c03f53d37ed0e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/3353ae12a176a9bd.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/34f1cfc7a58e8b0c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/3a11309ab5c2f4f1.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/3c5bd974fb83b573.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/3ca9da43dd834bca.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/3e9db2b8a87873c7.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/3ff1b430e0b510d5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/4035607526c8600d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/40f0415d564cb996.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/4388f8ee095c9ed8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/439f422b7f8dc467.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/452c56ffd625931f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/454e06d91c1f7da3.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/45ee850e300157c8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/45f79b5f90a07f0e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/487e56b12d123968.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/49be62bf170de12a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/4b3e165ec4ba87d0.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/505ff13d9ac8f006.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/51e81cbe7899e310.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/537dea93b57ffce5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/56a9f1cd9ec05384.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/56bf449feab17e6d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/57ab5fe18c74538b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/5a11f436d88e89cd.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/5b10dca1c6db6714.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/5bcfea3bfc53067c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/5eb63bbe412735a4.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/5ebca8549bb3ff2b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/5fef074c57dd118f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/60f343229f836ab6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6153f83bf3713b32.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6488134e7b6dd403.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/68e7b00767be2e16.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6afac5499ef0a938.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6bd93d4fd4cc3893.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6defbba8bfc76983.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6e37f5165f71513b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6e6c3d4ef7ca1300.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6f9130d5f4db8b28.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/6fc0d79c16c59de5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/774b8c209528323e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/78c509bc3a9d93c4.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/798017037907ab5f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/7a4fd9fd84ae6899.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/7b094993adee6e1a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/7b3e640c001c4894.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/7c3ad418912e7c09.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/7f630276be2a1503.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/80fd68e8a4ac6556.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/819aabcfdf1334af.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/81ea65c652232174.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/8225fe0751545bd9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/84c4f70ba7616566.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/856e8ba75c4d220e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/8cace0ec228b43d6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/8d1ecc30d7d58b41.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/8e2e4ab7c05925fa.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/8e89a980bc3b92d8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/8f6a9b01f15883f5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9091b9d61e026046.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/927a028cf723c70d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/939a167803029f56.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/94bda8f2cabc1358.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/95313ccec52beb53.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/954fee40bb61432b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9592cc24f2bf0d77.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/967396ed95832197.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9804f3b02bf98e83.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9936890e55f094f3.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/99405cab6cc35283.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/99e3da57a007bc59.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/99f1579d6a6790ad.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9a6b60a4833997e2.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9c265a028ee05977.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9f02e484a5feb3af.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/9fd81ffc0b3282f8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a0d60cff1e5950a6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a1da34b0466f625e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a2bcfb3e4cf75d71.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a3fd1a45a0ef02f1.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a72acced3b5f0c28.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a78fa3051259d29c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/a964045be65be2d2.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ac4f98ccc34fc6c0.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ae8bc0c15954a96a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/af05b5754cd245b5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/af28c894e94dc85c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b0a26c1396c336b2.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b2b5204d4dfab9dc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b2f8df0bdc713008.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b361fc308a3b9ab1.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b374846290238cd1.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b4b163b746d0aa53.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b68845f6e8da9be3.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b7e677bf8412e9bd.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/b99ba32d31caa65e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/bc02d7c24ec8eccc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/bc1a967be3c37e18.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/bc89d1801e46fb3c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/bce873a224061155.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/bdb1282b79539c3a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/bea4de84b22aebbc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c1f16f2de51197de.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c5f723dcb1ff4b6f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c6ca46f28d7798dd.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c6e2f4ede9282c2f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c761de11e901384a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c99399d1889fa84c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/c9fd297a955f2355.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ca9a80b78b7aa22c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/cb9503b8979b185d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/cbc6cfb0a51ab6bb.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/cc3bda1ed2e95150.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ceb98745ab5dbe70.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/d1df948b17e4d9fc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/d1e1e212112ab926.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/d4b766742cf2328a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/d93262cc2f01da93.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/d977ad06778acf8d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/da9376a352a900b8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/db2816895dd01979.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/db3a782c367dbe28.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/db825a17acae232c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/dc96bd8d8ad04ee4.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/dd1562878ff3c0f5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/de117be85702ebbc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/e3aafc52b94d322c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/e53a6e77d7808ee8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/e7dc452a2aae9b10.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/e8a4b78d213a80ec.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ebf2fcb04221173e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ebf527595602c7cc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ec70e75eec5d6198.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/ed6a8410124b956b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/f0fa2893c7713bc6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/f1801152a72fbdf0.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/f6624f69041cc763.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/f6fe984552a62891.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/f81bbef279fc5018.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/f975369ecf8cfe1b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/mime/fd21c48c0c429b77.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0354796dc060829e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/039f9af1f7851836.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/05e117af5b509bae.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0bc34e3949fbef01.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0ce495589c7221d3.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0dd1cda742544db1.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0eba31912f25f3eb.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0f2703145ac02172.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0fa09530ccf28805.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/0fd8e540615171e8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/101ff2c4997376a9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/12c490c06def9488.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/18257c152bba13a6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/1d4a6a418d2b6a64.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/1e61d3c782893a54.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/1fc92f87c93d4fd9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/2c9de54bccd13e11.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/2f3ea5c1badef128.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/32aa8c660cf91963.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/35111034d5ad26a6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/352eb0c7f720c196.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/3a2e224daffb8e3d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/3ee772a67521e170.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/401e93fa320273da.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/40d9b4294628036d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/44592db880e5ec3f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/45870b434cfe0c85.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/458943c95381e6de.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/4ca27bb3cae67ad6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/4e0d19bea7253cc8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/4f02317672f3198b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/56a98d6dbd85ebed.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/5d6b31c824d8741e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/5f75509e9ed27170.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/5fcfe11a675bac8b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/61b8b2fc9077f91a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/642c92672daf5c43.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/655ff32e6cd550bc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/65bc24178c843052.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/66cd62510980471d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/681c1dd84a2bdf26.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/6838fe47e511b2b8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/6a609539ed167213.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/74b6b71e76efb9c9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/75e719c76477d44f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/77e0e879c2c95195.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/7a15ef0ba4aa5660.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/7a9dd710389dde99.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/7b783286f80ab872.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/7d1298c12634bc16.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/7ddf2b8e4c6cb2e3.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/7fc2229fcb868522.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/85abdb138905726a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/884e41282eb896c5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/8a703994c30b19ea.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/8aca0021ebe63f8e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/8bc107890e1ab320.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/8c1a66ea86c98f76.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/8dd5ac3207b6ca3b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/8f898c00eea3a93b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/931cbc8a4cbebf70.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/932804c1aff4d044.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/94b151c44f8a3588.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/94ce2189385c970f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/94fa736d741d63be.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/95bd2009772c07fd.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/95f748fee80393ef.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/9b1e26a55ef34ee9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/9f3159c9912586db.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/a17c34748d867e85.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/a2ca0018b46feabd.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/a60b9031cf48ebba.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/a9be790d1f0ae7ec.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/ac4d6823c4034fe6.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/ad80625c2fe055e2.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/b102691e3c3e4cae.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/b34027c96f8daa30.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/b639b463e04459db.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/b7e540f21b7f0271.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/ba460ba22b61b3ac.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/ba7499ca4c58ff94.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/be2d027b571e9344.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c1fff30850bb8b6f.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c3889a8993fc490d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c51c4fa6e6b83f7e.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c57ca30ea53e2d68.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c64c433f4452d82a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c91739ca8dcc39ea.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c91d5e81eba0d3c9.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/c9fecad2b9f0357c.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/cb7fab9ab7b8c520.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/cbbaeea4c7d24156.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/cc7dd2a0003c03d8.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/ce64ddc6701623a7.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/d19b01ce83c8c71a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/d5aae4af1fe94a3a.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/d5c47dfe60be1592.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/d7eef627315eeab2.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/d81cb4d0b47db4ae.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/deed4c82c27e2b5d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/df1c0ed33adf634d.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/e1c2af52b798715b.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/e249b7de89e07bbc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/e6b6c0b80707ee08.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/e74d1c6e8e950e20.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/e9d2da361090c228.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/ec8c114b8a360379.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/f1772556a9442724.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/f4753f23f51fe441.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/f52c654a914ee356.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/f6187d9353655ff5.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/f766aa4cfdca2770.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/fabcc3a4db082252.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.kreuzberg/tables/fec2d3d5372c2bcc.msgpack +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/Activate.ps1 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/activate +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/activate-global-python-argcomplete +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/activate.csh +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/activate.fish +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/alembic +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/arize-phoenix +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/cyclopts +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/distro +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/docutils +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/dotenv +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/email_validator +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/f2py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/fastapi +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/fastavro +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/fastmcp +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/genai-prices +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/get_gprof +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/get_objgraph +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/griffe +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/hf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/httpx +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/hypercorn +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/inv +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/invoke +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/jp.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/jsonpath_ng +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/jsonschema +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/keyring +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/kreuzberg +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/logfire +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/mako-render +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/markdown-it +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/mcp +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/mpire-dashboard +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/normalizer +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/numpy-config +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/openai +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/opentelemetry-bootstrap +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/opentelemetry-instrument +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pai +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/phoenix +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pip +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pip3 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pip3.12 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pygmentize +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pyrsa-decrypt +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pyrsa-encrypt +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pyrsa-keygen +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pyrsa-priv2pub +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pyrsa-sign +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pyrsa-verify +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pystache +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/pystache-test +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/python +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/python-argcomplete-check-easy-install-script +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/python3 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/python3.12 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/register-python-argcomplete +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rem +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2html +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2html4 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2html5 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2latex +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2man +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2odt +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2pseudoxml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2s5 +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2xetex +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/rst2xml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/strawberry +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/tiny-agents +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/tqdm +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/undill +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/uvicorn +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/watchfiles +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/bin/websockets +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/.venv-test/pyvenv.cfg +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/Dockerfile +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/Tiltfile +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/alembic/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/alembic/env.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/alembic/script.py.mako +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/alembic.ini +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/dev-setup.sh +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/docker-compose.prebuilt.yml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/docker-compose.test.yml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/docker-compose.yml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/agents/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/agents/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/agents/agent_manager.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/agents/sse_simulator.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/context.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/llm_provider_models.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/mcp/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/mcp/tool_wrapper.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/otel/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/otel/setup.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/providers/phoenix.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/query.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/query_helper.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/schema.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/serialization.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/tools/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/agentic/tools/rem_tools.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/deps.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/main.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/mcp_router/prompts.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/mcp_router/server.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/middleware/tracking.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/json_utils.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/models.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/otel_utils.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/api/routers/chat/sse_events.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/jwt.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/middleware.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/providers/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/providers/base.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/providers/email.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/providers/google.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/auth/providers/microsoft.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/cluster.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/configure.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/db.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/dreaming.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/experiments.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/mcp.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/scaffold.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/schema.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/commands/serve.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/dreaming.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/cli/main.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/config.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/mcp_server.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/core/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/core/core_model.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/core/engram.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/core/experiment.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/core/inline_edge.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/core/rem_query.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/domain_resource.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/feedback.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/file.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/image_resource.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/message.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/moment.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/ontology.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/ontology_config.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/resource.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/schema.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/shared_session.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/subscriber.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/models/entities/user.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/py.typed +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/registry.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/core/agent-builder.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/core/moment-builder.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/core/rem-query-agent.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/core/resource-affinity-assessor.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/core/simple-assistant.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/core/user-profile-builder.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/contract-analyzer.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/contract-extractor.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/cv-parser.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/hello-world.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/query.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/simple.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/examples/test.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/agents/rem.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/evaluators/hello-world/default.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/evaluators/rem/faithfulness.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/evaluators/rem/lookup-correctness.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/evaluators/rem/retrieval-precision.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/evaluators/rem/retrieval-recall.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/schemas/evaluators/rem/search-correctness.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/audio/INTEGRATION.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/audio/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/audio/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/audio/chunker.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/audio/transcriber.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/content/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/content/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/content/providers.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/content/service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/affinity_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/moment_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/ontology_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/user_model_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/dreaming/utils.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/email/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/email/service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/email/templates.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/embeddings/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/embeddings/api.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/embeddings/worker.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/examples.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/examples_paths.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/git_provider.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/local_provider.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/parsing-hooks-examples.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/paths.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/provider.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/s3_provider.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/fs/service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/git/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/git/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/git/service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/phoenix/EXPERIMENT_DESIGN.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/phoenix/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/phoenix/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/phoenix/client.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/phoenix/config.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/phoenix/prompt_labels.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/diff_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/migration_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/programmable_diff_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/pydantic_to_sqlalchemy.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/register_type.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/schema_generator.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/postgres/sql_builder.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rate_limit.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/exceptions.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/executor.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/parser.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/queries.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/query.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/rem/service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/session/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/session/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/session/compression.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/session/reload.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/services/user_service.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/background_indexes.sql +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/migrations/001_install.sql +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/migrations/002_install_models.sql +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/migrations/003_optional_extensions.sql +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/migrations/005_schema_update.sql +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/sql/migrations/migrate_session_id_to_uuid.sql +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/AGENTIC_CHUNKING.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/agentic_chunking.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/batch_ops.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/chunking.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/clip_embeddings.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/constants.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/date_utils.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/dict_utils.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/embeddings.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/examples/embeddings_example.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/examples/sql_types_example.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/files.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/markdown.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/mime_types.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/model_helpers.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/sql_paths.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/sql_types.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/user_id.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/utils/vision.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/db_listener.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/db_maintainer.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/dreaming.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/engram_processor.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/sqs_file_processor.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/src/rem/workers/unlogged_maintainer.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/test_resources.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/conftest.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/SUMMARY.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/generate_test_audio.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/test_hq_30s.wav +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/test_long_90s.wav +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/test_medium_10s.wav +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/test_short_3s.wav +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/audio/test_standard_30s.wav +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/annual_financial_report.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/consulting_agreement.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/nda_agreement.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/sample_business_plan.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/sample_invoice.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/sample_research_paper.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/sample_resume.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/pdf/service_contract.pdf +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/content-examples/test.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/CODE_REVIEW_FIXES.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/TEST_RESULTS.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/cli_verification.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/database-design.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/deep-learning-guide.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/ml-overview.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/python-best-practices.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/docs/test_summary.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/engrams/test-conversation.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/engrams/test-diary-entry.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/engrams/test-meeting-notes.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/engrams/test-observation.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/engrams/test-project-note.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/graph_seed.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/sample-architecture-doc.txt +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/sample_conversations.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/schemas/agents/query_agent.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/schemas/agents/summarization_agent.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/schemas/agents/test-cv-parser.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/schemas/agents/test_orchestrator.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/schemas/agents/test_responder.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/schemas/evaluators/accuracy_evaluator.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/001_sample_data.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/001_sample_data.yaml.bak +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/files/documents/api_spec.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/files/documents/meeting_notes.txt +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/files/engrams/personal_reflection.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/files/engrams/product_idea_voice_memo.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/files/engrams/team_standup_meeting.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/resources.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/shared_sessions_demo.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/test-user-data.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/test-user-data.yaml.bak +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/data/seed/users.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/conftest.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/helpers/README.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/helpers/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/helpers/seed_data.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/phoenix/run_complete_experiment.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/phoenix/run_hello_world_experiment.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/phoenix/test_connection.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/quick_delegation_test.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/rem-agent-eval-questions.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/rem-query-agent-tests.yaml +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/sample_data/dreaming/load_sample_data.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/sample_data/dreaming/resources/api_design_discussion.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/sample_data/dreaming/resources/database_migration_plan.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/sample_data/dreaming/resources/morning_standup_notes.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/sample_data/dreaming/resources/production_incident_postmortem.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/sample_data/dreaming/resources/quarterly_reflection.md +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/services/test_content_providers.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/services/test_schema_provider.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_agent_delegation_streaming.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_agent_end_to_end.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_agent_tool_invocation.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_agent_with_tools.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_api_endpoints.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_ask_agent_streaming.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_batch_upsert.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_completions_with_sessions.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_content_ingest_workflow.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_contract_extractor.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_dreaming_moments.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_dynamic_agents.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_early_stream_close.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_email_auth.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_embedding_worker.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_embeddings_e2e.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_git_provider.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_graph_traversal.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_mcp_server_loading.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_mcp_tool_loading.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_mcp_tools.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_mcp_tools_layer.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_messages_sessions_access.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_multi_agent.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_natural_language_to_rem.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_rem_query.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_rem_query_agent.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_rem_query_agent_structured.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_rem_query_evolution.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_rem_query_functions.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_rem_service_layer.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_schema_introspection.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_session_management.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_streaming_response.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_streaming_save.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_unlogged_maintainer.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_user_lookup_by_email.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_user_session_reloads.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_verify_setup.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/test_yaml_export.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/integration/validate_rem_agent_schema.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/scripts/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/scripts/demo_session_recovery.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/scripts/seed_sample_sessions.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/scripts/simple_session_demo.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/test_agent_manager.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/agents/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/agents/test_sse_simulator.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/providers/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/providers/test_pydantic_ai.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/test_schema.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/test_schema_integration.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/agentic/test_tool_description_suffix.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/api/__init__.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/api/test_feedback.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/api/test_models_endpoint.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/api/test_sessions_messages.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/api/test_sse_events.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/conftest.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/services/test_session_compression.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/test_admin_internal.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/test_api_key_auth.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/test_registry.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/test_resource_tools.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/test_session_cli.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/test_sql_security.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/tests/unit/utils/test_agentic_chunking.py +0 -0
- {remdb-0.3.221 → remdb-0.3.240}/walkthrough.md +0 -0
|
@@ -28,7 +28,7 @@ echo ""
|
|
|
28
28
|
echo ">>> Running integration tests (skipping LLM tests and files with event loop conflicts)..."
|
|
29
29
|
# Skip LLM-marked tests which require real API calls
|
|
30
30
|
# Ignore files that have TestClient + asyncpg event loop conflicts
|
|
31
|
-
POSTGRES__CONNECTION_STRING="postgresql://rem:rem@localhost:
|
|
31
|
+
POSTGRES__CONNECTION_STRING="postgresql://rem:rem@localhost:5051/rem" \
|
|
32
32
|
uv run pytest tests/integration/ -v -m "not llm" \
|
|
33
33
|
--ignore=tests/integration/test_session_management.py \
|
|
34
34
|
--ignore=tests/integration/test_api_endpoints.py \
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
��type�str�data�application/pdf�cached_at�A�U�� �5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
��type�str�data�application/pdf�cached_at�A�Uo�:�
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
��type�str�data�application/pdf�cached_at�A�Uo/sHc
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
��type�str�data�application/pdf�cached_at�A�Uf���
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remdb
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.240
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "remdb"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.240"
|
|
4
4
|
description = "Resources Entities Moments - Bio-inspired memory system for agentic AI workloads"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -24,7 +24,7 @@ dependencies = [
|
|
|
24
24
|
"pydantic>=2.10.0",
|
|
25
25
|
"pydantic-settings>=2.6.0",
|
|
26
26
|
# Agentic AI
|
|
27
|
-
"pydantic-ai>=0.0
|
|
27
|
+
"pydantic-ai>=1.0.0",
|
|
28
28
|
# API Framework
|
|
29
29
|
"fastapi>=0.115.0",
|
|
30
30
|
"uvicorn[standard]>=0.32.0",
|
|
@@ -140,15 +140,11 @@ testpaths = ["tests"]
|
|
|
140
140
|
python_files = ["test_*.py"]
|
|
141
141
|
python_classes = ["Test*"]
|
|
142
142
|
python_functions = ["test_*"]
|
|
143
|
-
asyncio_mode = "auto"
|
|
144
|
-
# Use session scope for both fixtures and tests to share one event loop
|
|
145
|
-
# This prevents "Event loop is closed" errors with asyncpg connections
|
|
146
|
-
asyncio_default_fixture_loop_scope = "session"
|
|
147
|
-
asyncio_default_test_loop_scope = "session"
|
|
148
143
|
addopts = [
|
|
149
144
|
"-v",
|
|
150
145
|
"--strict-markers",
|
|
151
146
|
"--tb=short",
|
|
147
|
+
"--asyncio-mode=auto",
|
|
152
148
|
]
|
|
153
149
|
markers = [
|
|
154
150
|
"asyncio: marks tests as async",
|
|
@@ -718,263 +718,37 @@ See `rem/api/README.md` for full SSE event protocol documentation.
|
|
|
718
718
|
|
|
719
719
|
## Multi-Agent Orchestration
|
|
720
720
|
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
### Architecture
|
|
724
|
-
|
|
725
|
-
```mermaid
|
|
726
|
-
sequenceDiagram
|
|
727
|
-
participant User
|
|
728
|
-
participant API as Chat API
|
|
729
|
-
participant Orchestrator as Orchestrator Agent
|
|
730
|
-
participant EventSink as Event Sink (Queue)
|
|
731
|
-
participant Child as Child Agent
|
|
732
|
-
participant DB as PostgreSQL
|
|
733
|
-
|
|
734
|
-
User->>API: POST /chat/completions (stream=true)
|
|
735
|
-
API->>API: Create event sink (asyncio.Queue)
|
|
736
|
-
API->>Orchestrator: agent.iter(prompt)
|
|
737
|
-
|
|
738
|
-
loop Streaming Loop
|
|
739
|
-
Orchestrator->>API: PartDeltaEvent (text)
|
|
740
|
-
API->>User: SSE: data: {"delta": {"content": "..."}}
|
|
741
|
-
end
|
|
742
|
-
|
|
743
|
-
Orchestrator->>Orchestrator: Decides to call ask_agent
|
|
744
|
-
Orchestrator->>API: ToolCallPart (ask_agent)
|
|
745
|
-
API->>User: SSE: event: tool_call
|
|
746
|
-
|
|
747
|
-
API->>Child: ask_agent("child_name", input)
|
|
748
|
-
Child->>EventSink: push_event(child_content)
|
|
749
|
-
EventSink->>API: Consume child events
|
|
750
|
-
API->>User: SSE: data: {"delta": {"content": "..."}}
|
|
751
|
-
|
|
752
|
-
Child->>Child: Completes
|
|
753
|
-
Child-->>Orchestrator: Return result
|
|
754
|
-
|
|
755
|
-
Orchestrator->>API: Final response
|
|
756
|
-
API->>DB: Save tool calls
|
|
757
|
-
API->>DB: Save assistant message
|
|
758
|
-
API->>User: SSE: data: [DONE]
|
|
759
|
-
```
|
|
760
|
-
|
|
761
|
-
### Event Sink Pattern
|
|
762
|
-
|
|
763
|
-
When an agent delegates to a child via `ask_agent`, the child's streaming events need to bubble up to the parent's stream. This is achieved through an **event sink** pattern using Python's `ContextVar`:
|
|
764
|
-
|
|
765
|
-
```python
|
|
766
|
-
# context.py
|
|
767
|
-
from contextvars import ContextVar
|
|
768
|
-
|
|
769
|
-
_parent_event_sink: ContextVar["asyncio.Queue | None"] = ContextVar(
|
|
770
|
-
"parent_event_sink", default=None
|
|
771
|
-
)
|
|
772
|
-
|
|
773
|
-
async def push_event(event: Any) -> bool:
|
|
774
|
-
"""Push event to parent's event sink if available."""
|
|
775
|
-
sink = _parent_event_sink.get()
|
|
776
|
-
if sink is not None:
|
|
777
|
-
await sink.put(event)
|
|
778
|
-
return True
|
|
779
|
-
return False
|
|
780
|
-
```
|
|
781
|
-
|
|
782
|
-
The streaming controller sets up the event sink before agent execution:
|
|
783
|
-
|
|
784
|
-
```python
|
|
785
|
-
# streaming.py
|
|
786
|
-
child_event_sink: asyncio.Queue = asyncio.Queue()
|
|
787
|
-
set_event_sink(child_event_sink)
|
|
788
|
-
|
|
789
|
-
async for node in agent.iter(prompt):
|
|
790
|
-
# Process agent events...
|
|
791
|
-
|
|
792
|
-
# Consume any child events that arrived
|
|
793
|
-
while not child_event_sink.empty():
|
|
794
|
-
child_event = child_event_sink.get_nowait()
|
|
795
|
-
if child_event["type"] == "child_content":
|
|
796
|
-
yield format_sse_content_delta(child_event["content"])
|
|
797
|
-
```
|
|
798
|
-
|
|
799
|
-
### ask_agent Tool Implementation
|
|
800
|
-
|
|
801
|
-
The `ask_agent` tool in `mcp_router/tools.py` uses Pydantic AI's streaming iteration:
|
|
802
|
-
|
|
803
|
-
```python
|
|
804
|
-
async def ask_agent(agent_name: str, input_text: str, ...):
|
|
805
|
-
"""Delegate work to another agent."""
|
|
806
|
-
|
|
807
|
-
# Load and create child agent
|
|
808
|
-
schema = await load_agent_schema_async(agent_name, user_id)
|
|
809
|
-
child_agent = await create_agent(context=context, agent_schema_override=schema)
|
|
810
|
-
|
|
811
|
-
# Stream child agent with event proxying
|
|
812
|
-
async with child_agent.iter(prompt) as agent_run:
|
|
813
|
-
async for node in agent_run:
|
|
814
|
-
if Agent.is_model_request_node(node):
|
|
815
|
-
async with node.stream(agent_run.ctx) as request_stream:
|
|
816
|
-
async for event in request_stream:
|
|
817
|
-
if isinstance(event, PartDeltaEvent):
|
|
818
|
-
# Push content to parent's event sink
|
|
819
|
-
await push_event({
|
|
820
|
-
"type": "child_content",
|
|
821
|
-
"agent_name": agent_name,
|
|
822
|
-
"content": event.delta.content_delta,
|
|
823
|
-
})
|
|
824
|
-
|
|
825
|
-
return agent_run.result
|
|
826
|
-
```
|
|
827
|
-
|
|
828
|
-
### Pydantic AI Features Used
|
|
721
|
+
Agents can delegate work to other agents via the `ask_agent` tool. This enables orchestrator patterns where a parent agent routes to specialists.
|
|
829
722
|
|
|
830
|
-
|
|
723
|
+
### How It Works
|
|
831
724
|
|
|
832
|
-
|
|
725
|
+
1. **Parent agent** calls `ask_agent(agent_name, input_text)`
|
|
726
|
+
2. **Child agent** executes and streams its response
|
|
727
|
+
3. **Child events** bubble up to parent via an event sink (asyncio.Queue in ContextVar)
|
|
728
|
+
4. **All tool calls** are saved to the database for the session
|
|
833
729
|
|
|
834
|
-
|
|
835
|
-
async with agent.iter(prompt) as agent_run:
|
|
836
|
-
async for node in agent_run:
|
|
837
|
-
if Agent.is_model_request_node(node):
|
|
838
|
-
# Model is generating - stream the response
|
|
839
|
-
async with node.stream(agent_run.ctx) as stream:
|
|
840
|
-
async for event in stream:
|
|
841
|
-
if isinstance(event, PartStartEvent):
|
|
842
|
-
# Tool call starting
|
|
843
|
-
elif isinstance(event, PartDeltaEvent):
|
|
844
|
-
# Content chunk
|
|
845
|
-
elif Agent.is_call_tools_node(node):
|
|
846
|
-
# Tools are being executed
|
|
847
|
-
async with node.stream(agent_run.ctx) as stream:
|
|
848
|
-
async for event in stream:
|
|
849
|
-
if isinstance(event, FunctionToolResultEvent):
|
|
850
|
-
# Tool completed
|
|
851
|
-
```
|
|
852
|
-
|
|
853
|
-
#### 2. Node Types
|
|
854
|
-
|
|
855
|
-
- **`ModelRequestNode`**: The model is generating a response (text or tool calls)
|
|
856
|
-
- **`CallToolsNode`**: Tools are being executed
|
|
857
|
-
- **`End`**: Agent execution complete
|
|
858
|
-
|
|
859
|
-
#### 3. Event Types
|
|
730
|
+
### Key Components
|
|
860
731
|
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
732
|
+
| Component | Location | Purpose |
|
|
733
|
+
|-----------|----------|---------|
|
|
734
|
+
| `ask_agent` tool | `mcp_router/tools.py` | Loads child agent, runs with streaming, pushes events to sink |
|
|
735
|
+
| Event sink | `context.py` | ContextVar holding asyncio.Queue for child→parent event flow |
|
|
736
|
+
| Streaming controller | `streaming.py` | Drains event sink, emits SSE events, saves to DB |
|
|
866
737
|
|
|
867
|
-
###
|
|
868
|
-
|
|
869
|
-
All messages are persisted to PostgreSQL for session continuity:
|
|
870
|
-
|
|
871
|
-
```python
|
|
872
|
-
# streaming.py - after agent completes
|
|
873
|
-
async def save_session_messages(...):
|
|
874
|
-
store = SessionMessageStore(user_id=user_id)
|
|
875
|
-
|
|
876
|
-
# Save each tool call as a tool message
|
|
877
|
-
for tool_call in tool_calls:
|
|
878
|
-
await store.save_message(
|
|
879
|
-
session_id=session_id,
|
|
880
|
-
role="tool",
|
|
881
|
-
content=tool_call.result,
|
|
882
|
-
tool_name=tool_call.name,
|
|
883
|
-
tool_call_id=tool_call.id,
|
|
884
|
-
)
|
|
885
|
-
|
|
886
|
-
# Save the final assistant response
|
|
887
|
-
await store.save_message(
|
|
888
|
-
session_id=session_id,
|
|
889
|
-
role="assistant",
|
|
890
|
-
content=accumulated_content,
|
|
891
|
-
)
|
|
892
|
-
```
|
|
738
|
+
### Event Types
|
|
893
739
|
|
|
894
|
-
|
|
895
|
-
- **Embeddings**: For semantic search across conversation history
|
|
896
|
-
- **Compression**: Long conversations are summarized to manage context window
|
|
897
|
-
- **Session isolation**: Each session maintains its own message history
|
|
740
|
+
Child agents emit events that the parent streams to the client:
|
|
898
741
|
|
|
899
|
-
|
|
742
|
+
- **`child_tool_start`**: Child is calling a tool (logged, streamed, saved to DB)
|
|
743
|
+
- **`child_content`**: Child's text response (streamed as SSE content delta)
|
|
744
|
+
- **`child_tool_result`**: Tool completed with result (metadata extraction)
|
|
900
745
|
|
|
901
|
-
|
|
746
|
+
### Testing
|
|
902
747
|
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
async def test_ask_agent_streams_and_saves(self, session_id, user_id):
|
|
908
|
-
"""Test delegation via ask_agent."""
|
|
909
|
-
# Uses test_orchestrator which always delegates to test_responder
|
|
910
|
-
agent = await create_agent(context=context, agent_schema_override=schema)
|
|
911
|
-
|
|
912
|
-
chunks = []
|
|
913
|
-
async for chunk in stream_openai_response_with_save(
|
|
914
|
-
agent=agent,
|
|
915
|
-
prompt="Hello, please delegate this",
|
|
916
|
-
...
|
|
917
|
-
):
|
|
918
|
-
chunks.append(chunk)
|
|
919
|
-
|
|
920
|
-
# Verify streaming worked
|
|
921
|
-
assert len(content_chunks) > 0
|
|
922
|
-
|
|
923
|
-
# Verify persistence
|
|
924
|
-
messages = await store.load_session_messages(session_id)
|
|
925
|
-
assert len([m for m in messages if m["role"] == "assistant"]) == 1
|
|
926
|
-
assert len([m for m in messages if m["tool_name"] == "ask_agent"]) >= 1
|
|
927
|
-
|
|
928
|
-
async def test_multi_turn_saves_all_assistant_messages(self, session_id, user_id):
|
|
929
|
-
"""Test that each turn saves its own assistant message.
|
|
930
|
-
|
|
931
|
-
This catches scoping bugs like accumulated_content not being
|
|
932
|
-
properly scoped per-turn.
|
|
933
|
-
"""
|
|
934
|
-
turn_prompts = [
|
|
935
|
-
"Hello, how are you?",
|
|
936
|
-
"Tell me something interesting",
|
|
937
|
-
"Thanks for chatting!",
|
|
938
|
-
]
|
|
939
|
-
|
|
940
|
-
for prompt in turn_prompts:
|
|
941
|
-
async for chunk in stream_openai_response_with_save(...):
|
|
942
|
-
pass
|
|
943
|
-
|
|
944
|
-
# Each turn should save an assistant message
|
|
945
|
-
messages = await store.load_session_messages(session_id)
|
|
946
|
-
assistant_msgs = [m for m in messages if m["role"] == "assistant"]
|
|
947
|
-
assert len(assistant_msgs) == 3
|
|
948
|
-
```
|
|
949
|
-
|
|
950
|
-
#### Test Agent Schemas
|
|
951
|
-
|
|
952
|
-
Test agents are defined in `tests/data/schemas/agents/`:
|
|
953
|
-
|
|
954
|
-
- **`test_orchestrator.yaml`**: Always delegates via `ask_agent`
|
|
955
|
-
- **`test_responder.yaml`**: Simple agent that responds directly
|
|
956
|
-
|
|
957
|
-
```yaml
|
|
958
|
-
# test_orchestrator.yaml
|
|
959
|
-
type: object
|
|
960
|
-
description: |
|
|
961
|
-
You are a TEST ORCHESTRATOR that ALWAYS delegates to another agent.
|
|
962
|
-
Call ask_agent with agent_name="test_responder" on EVERY turn.
|
|
963
|
-
json_schema_extra:
|
|
964
|
-
kind: agent
|
|
965
|
-
name: test_orchestrator
|
|
966
|
-
tools:
|
|
967
|
-
- name: ask_agent
|
|
968
|
-
mcp_server: rem
|
|
969
|
-
```
|
|
970
|
-
|
|
971
|
-
#### Running Integration Tests
|
|
972
|
-
|
|
973
|
-
```bash
|
|
974
|
-
# Run individually (recommended due to async isolation)
|
|
975
|
-
POSTGRES__CONNECTION_STRING="postgresql://rem:rem@localhost:5050/rem" \
|
|
976
|
-
uv run pytest tests/integration/test_ask_agent_streaming.py::TestAskAgentStreaming::test_multi_turn_saves_all_assistant_messages -v -s
|
|
977
|
-
```
|
|
748
|
+
Integration tests in `tests/integration/test_ask_agent_streaming.py` verify:
|
|
749
|
+
- Child content streams correctly to client
|
|
750
|
+
- Tool calls are persisted to database
|
|
751
|
+
- Multi-turn conversations save all messages
|
|
978
752
|
|
|
979
753
|
## Future Work
|
|
980
754
|
|
|
@@ -4,15 +4,12 @@ Centralized context builder for agent execution.
|
|
|
4
4
|
Session History (ALWAYS loaded with compression):
|
|
5
5
|
- Each chat request is a single message, so session history MUST be recovered
|
|
6
6
|
- Uses SessionMessageStore with compression to keep context efficient
|
|
7
|
-
- Long assistant responses include REM LOOKUP hints: "... [REM LOOKUP session-{id}-msg-{index}] ..."
|
|
8
|
-
- Agent can retrieve full content on-demand using REM LOOKUP
|
|
9
7
|
- Prevents context window bloat while maintaining conversation continuity
|
|
10
8
|
|
|
11
9
|
User Context (on-demand by default):
|
|
12
|
-
- System message includes
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- Example: "User: sarah@example.com. To load user profile: Use REM LOOKUP \"sarah@example.com\""
|
|
10
|
+
- System message includes user email for context awareness
|
|
11
|
+
- Fails silently if user not found - agent proceeds without user context
|
|
12
|
+
- Example: "User: sarah@example.com"
|
|
16
13
|
|
|
17
14
|
User Context (auto-inject when enabled):
|
|
18
15
|
- Set CHAT__AUTO_INJECT_USER_CONTEXT=true
|
|
@@ -22,8 +19,8 @@ User Context (auto-inject when enabled):
|
|
|
22
19
|
Design Pattern:
|
|
23
20
|
1. Extract AgentContext from headers (user_id, tenant_id, session_id)
|
|
24
21
|
2. If auto-inject enabled: Load User/Session from database
|
|
25
|
-
3. If auto-inject disabled:
|
|
26
|
-
4. Construct system message with date + context
|
|
22
|
+
3. If auto-inject disabled: Show user email for context (fail silently if not found)
|
|
23
|
+
4. Construct system message with date + context
|
|
27
24
|
5. Return complete context ready for agent execution
|
|
28
25
|
|
|
29
26
|
Integration Points:
|
|
@@ -40,11 +37,10 @@ Usage (on-demand, default):
|
|
|
40
37
|
|
|
41
38
|
# Messages list structure (on-demand):
|
|
42
39
|
# [
|
|
43
|
-
# {"role": "system", "content": "Today's date: 2025-11-22\nUser: sarah@example.com
|
|
40
|
+
# {"role": "system", "content": "Today's date: 2025-11-22\n\nUser: sarah@example.com"},
|
|
44
41
|
# {"role": "user", "content": "What's next for the API migration?"}
|
|
45
42
|
# ]
|
|
46
43
|
|
|
47
|
-
# Agent receives hints and can decide to load context if needed
|
|
48
44
|
agent = await create_agent(context=context, ...)
|
|
49
45
|
prompt = "\n".join(msg.content for msg in messages)
|
|
50
46
|
result = await agent.run(prompt)
|
|
@@ -52,7 +48,7 @@ Usage (on-demand, default):
|
|
|
52
48
|
Usage (auto-inject, CHAT__AUTO_INJECT_USER_CONTEXT=true):
|
|
53
49
|
# Messages list structure (auto-inject):
|
|
54
50
|
# [
|
|
55
|
-
# {"role": "system", "content": "Today's date: 2025-11-22\n\nUser Context (auto-injected):\nSummary: ...\nInterests:
|
|
51
|
+
# {"role": "system", "content": "Today's date: 2025-11-22\n\nUser Context (auto-injected):\nSummary: ...\nInterests: ..."},
|
|
56
52
|
# {"role": "user", "content": "Previous message"},
|
|
57
53
|
# {"role": "assistant", "content": "Previous response"},
|
|
58
54
|
# {"role": "user", "content": "What's next for the API migration?"}
|
|
@@ -110,13 +106,11 @@ class ContextBuilder:
|
|
|
110
106
|
|
|
111
107
|
Session History (ALWAYS loaded with compression):
|
|
112
108
|
- If session_id provided, session history is ALWAYS loaded using SessionMessageStore
|
|
113
|
-
- Compression keeps
|
|
114
|
-
- Example: "... [Message truncated - REM LOOKUP session-{id}-msg-{index}] ..."
|
|
115
|
-
- Agent can retrieve full content on-demand using REM LOOKUP
|
|
109
|
+
- Compression keeps context efficient
|
|
116
110
|
|
|
117
111
|
User Context (on-demand by default):
|
|
118
|
-
- System message includes
|
|
119
|
-
-
|
|
112
|
+
- System message includes user email: "User: {email}"
|
|
113
|
+
- Fails silently if user not found - agent proceeds without user context
|
|
120
114
|
|
|
121
115
|
User Context (auto-inject when enabled):
|
|
122
116
|
- Set CHAT__AUTO_INJECT_USER_CONTEXT=true
|
|
@@ -137,9 +131,9 @@ class ContextBuilder:
|
|
|
137
131
|
|
|
138
132
|
# messages structure:
|
|
139
133
|
# [
|
|
140
|
-
# {"role": "system", "content": "Today's date: 2025-11-22\nUser: sarah@example.com
|
|
134
|
+
# {"role": "system", "content": "Today's date: 2025-11-22\n\nUser: sarah@example.com"},
|
|
141
135
|
# {"role": "user", "content": "Previous message"},
|
|
142
|
-
# {"role": "assistant", "content": "
|
|
136
|
+
# {"role": "assistant", "content": "Previous response"},
|
|
143
137
|
# {"role": "user", "content": "New message"}
|
|
144
138
|
# ]
|
|
145
139
|
"""
|
|
@@ -189,18 +183,18 @@ class ContextBuilder:
|
|
|
189
183
|
context_hint += f"\n\nUser Context (auto-injected):\n{user_context_content}"
|
|
190
184
|
else:
|
|
191
185
|
context_hint += "\n\nNo user context available (anonymous or new user)."
|
|
192
|
-
elif context.user_id:
|
|
193
|
-
# On-demand:
|
|
194
|
-
#
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
186
|
+
elif context.user_id and db:
|
|
187
|
+
# On-demand: Show user email for context (no REM LOOKUP - it requires exact user_id match)
|
|
188
|
+
# Fail silently if user lookup fails - just proceed without user context
|
|
189
|
+
try:
|
|
190
|
+
user_repo = Repository(User, "users", db=db)
|
|
191
|
+
user = await user_repo.get_by_id(context.user_id, context.tenant_id)
|
|
192
|
+
if user and user.email:
|
|
193
|
+
context_hint += f"\n\nUser: {user.email}"
|
|
194
|
+
# If user not found, just proceed without adding user context
|
|
195
|
+
except Exception as e:
|
|
196
|
+
# Fail silently - don't block agent execution if user lookup fails
|
|
197
|
+
logger.debug(f"Could not load user context: {e}")
|
|
204
198
|
|
|
205
199
|
# Add system context hint
|
|
206
200
|
messages.append(ContextMessage(role="system", content=context_hint))
|
|
@@ -357,6 +357,9 @@ def _convert_properties_to_prompt(properties: dict[str, Any]) -> str:
|
|
|
357
357
|
definition into natural language guidance that informs the agent
|
|
358
358
|
about the expected response structure without forcing JSON output.
|
|
359
359
|
|
|
360
|
+
IMPORTANT: The 'answer' field is the OUTPUT to the user. All other
|
|
361
|
+
fields are INTERNAL tracking that should NOT appear in the output.
|
|
362
|
+
|
|
360
363
|
Args:
|
|
361
364
|
properties: JSON Schema properties dict
|
|
362
365
|
|
|
@@ -368,45 +371,59 @@ def _convert_properties_to_prompt(properties: dict[str, Any]) -> str:
|
|
|
368
371
|
"answer": {"type": "string", "description": "The answer"},
|
|
369
372
|
"confidence": {"type": "number", "description": "Confidence 0-1"}
|
|
370
373
|
}
|
|
371
|
-
# Returns
|
|
372
|
-
# "## Response Structure\n\nYour response should include:\n- **answer**: The answer\n..."
|
|
374
|
+
# Returns guidance that only answer should be output
|
|
373
375
|
"""
|
|
374
376
|
if not properties:
|
|
375
377
|
return ""
|
|
376
378
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
for
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
379
|
+
# Separate answer (output) from other fields (internal tracking)
|
|
380
|
+
answer_field = properties.get("answer")
|
|
381
|
+
internal_fields = {k: v for k, v in properties.items() if k != "answer"}
|
|
382
|
+
|
|
383
|
+
lines = ["## Internal Thinking Structure (DO NOT output these labels)"]
|
|
384
|
+
lines.append("")
|
|
385
|
+
lines.append("Use this structure to organize your thinking, but ONLY output the answer content:")
|
|
386
|
+
lines.append("")
|
|
387
|
+
|
|
388
|
+
# If there's an answer field, emphasize it's the ONLY output
|
|
389
|
+
if answer_field:
|
|
390
|
+
answer_desc = answer_field.get("description", "Your response")
|
|
391
|
+
lines.append(f"**OUTPUT (what the user sees):** {answer_desc}")
|
|
392
|
+
lines.append("")
|
|
393
|
+
|
|
394
|
+
# Document internal fields for tracking/thinking
|
|
395
|
+
if internal_fields:
|
|
396
|
+
lines.append("**INTERNAL (for your tracking only - do NOT include in output):**")
|
|
397
|
+
for field_name, field_def in internal_fields.items():
|
|
398
|
+
field_type = field_def.get("type", "any")
|
|
399
|
+
description = field_def.get("description", "")
|
|
400
|
+
|
|
401
|
+
# Format based on type
|
|
402
|
+
if field_type == "array":
|
|
403
|
+
type_hint = "list"
|
|
404
|
+
elif field_type == "number":
|
|
405
|
+
type_hint = "number"
|
|
406
|
+
if "minimum" in field_def or "maximum" in field_def:
|
|
407
|
+
min_val = field_def.get("minimum", "")
|
|
408
|
+
max_val = field_def.get("maximum", "")
|
|
409
|
+
if min_val != "" and max_val != "":
|
|
410
|
+
type_hint = f"number ({min_val}-{max_val})"
|
|
411
|
+
elif field_type == "boolean":
|
|
412
|
+
type_hint = "yes/no"
|
|
413
|
+
else:
|
|
414
|
+
type_hint = field_type
|
|
398
415
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
field_line += f": {description}"
|
|
416
|
+
field_line = f"- {field_name}"
|
|
417
|
+
if type_hint and type_hint != "string":
|
|
418
|
+
field_line += f" ({type_hint})"
|
|
419
|
+
if description:
|
|
420
|
+
field_line += f": {description}"
|
|
405
421
|
|
|
406
|
-
|
|
422
|
+
lines.append(field_line)
|
|
407
423
|
|
|
408
424
|
lines.append("")
|
|
409
|
-
lines.append("
|
|
425
|
+
lines.append("⚠️ CRITICAL: Your response must be ONLY the conversational answer text.")
|
|
426
|
+
lines.append("Do NOT output field names like 'answer:' or 'diverge_output:' - just the response itself.")
|
|
410
427
|
|
|
411
428
|
return "\n".join(lines)
|
|
412
429
|
|
|
@@ -664,26 +681,26 @@ async def create_agent(
|
|
|
664
681
|
|
|
665
682
|
set_agent_resource_attributes(agent_schema=agent_schema)
|
|
666
683
|
|
|
667
|
-
# Extract schema metadata for search_rem tool description suffix
|
|
668
|
-
# This allows entity schemas to add context-specific notes to the search_rem tool
|
|
669
|
-
search_rem_suffix = None
|
|
670
|
-
if metadata:
|
|
671
|
-
# Check for default_search_table in metadata (set by entity schemas)
|
|
672
|
-
extra = agent_schema.get("json_schema_extra", {}) if agent_schema else {}
|
|
673
|
-
default_table = extra.get("default_search_table")
|
|
674
|
-
has_embeddings = extra.get("has_embeddings", False)
|
|
675
|
-
|
|
676
|
-
if default_table:
|
|
677
|
-
# Build description suffix for search_rem
|
|
678
|
-
search_rem_suffix = f"\n\nFor this schema, use `search_rem` to query `{default_table}`. "
|
|
679
|
-
if has_embeddings:
|
|
680
|
-
search_rem_suffix += f"SEARCH works well on {default_table} (has embeddings). "
|
|
681
|
-
search_rem_suffix += f"Example: `SEARCH \"your query\" FROM {default_table} LIMIT 10`"
|
|
682
|
-
|
|
683
684
|
# Add tools from MCP server (in-process, no subprocess)
|
|
684
685
|
# Track loaded MCP servers for resource resolution
|
|
685
686
|
loaded_mcp_server = None
|
|
686
687
|
|
|
688
|
+
# Build map of tool_name → schema description from agent schema tools section
|
|
689
|
+
# This allows agent-specific tool guidance to override/augment MCP tool descriptions
|
|
690
|
+
schema_tool_descriptions: dict[str, str] = {}
|
|
691
|
+
tool_configs = metadata.tools if metadata and hasattr(metadata, 'tools') else []
|
|
692
|
+
for tool_config in tool_configs:
|
|
693
|
+
if hasattr(tool_config, 'name'):
|
|
694
|
+
t_name = tool_config.name
|
|
695
|
+
t_desc = tool_config.description or ""
|
|
696
|
+
else:
|
|
697
|
+
t_name = tool_config.get("name", "")
|
|
698
|
+
t_desc = tool_config.get("description", "")
|
|
699
|
+
# Skip resource URIs (handled separately below)
|
|
700
|
+
if t_name and "://" not in t_name and t_desc:
|
|
701
|
+
schema_tool_descriptions[t_name] = t_desc
|
|
702
|
+
logger.debug(f"Schema tool description for '{t_name}': {len(t_desc)} chars")
|
|
703
|
+
|
|
687
704
|
for server_config in mcp_server_configs:
|
|
688
705
|
server_type = server_config.get("type")
|
|
689
706
|
server_id = server_config.get("id", "mcp-server")
|
|
@@ -708,8 +725,8 @@ async def create_agent(
|
|
|
708
725
|
mcp_tools_dict = await mcp_server.get_tools()
|
|
709
726
|
|
|
710
727
|
for tool_name, tool_func in mcp_tools_dict.items():
|
|
711
|
-
#
|
|
712
|
-
tool_suffix =
|
|
728
|
+
# Get schema description suffix if agent schema defines one for this tool
|
|
729
|
+
tool_suffix = schema_tool_descriptions.get(tool_name)
|
|
713
730
|
|
|
714
731
|
wrapped_tool = create_mcp_tool_wrapper(
|
|
715
732
|
tool_name,
|
|
@@ -718,7 +735,7 @@ async def create_agent(
|
|
|
718
735
|
description_suffix=tool_suffix,
|
|
719
736
|
)
|
|
720
737
|
tools.append(wrapped_tool)
|
|
721
|
-
logger.debug(f"Loaded MCP tool: {tool_name}" + (" (with schema
|
|
738
|
+
logger.debug(f"Loaded MCP tool: {tool_name}" + (" (with schema desc)" if tool_suffix else ""))
|
|
722
739
|
|
|
723
740
|
logger.info(f"Loaded {len(mcp_tools_dict)} tools from MCP server: {server_id} (in-process)")
|
|
724
741
|
|