remdb 0.3.219__tar.gz → 0.3.221__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/.kreuzberg/mime/939a167803029f56.msgpack +1 -0
- {remdb-0.3.219 → remdb-0.3.221}/PKG-INFO +1 -1
- {remdb-0.3.219 → remdb-0.3.221}/pyproject.toml +1 -1
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/mcp/tool_wrapper.py +2 -2
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/providers/pydantic_ai.py +1 -1
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/schema.py +2 -2
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/mcp_router/tools.py +42 -23
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/streaming.py +4 -45
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/rem.yaml +1 -1
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_agent_delegation_streaming.py +4 -1
- remdb-0.3.221/tests/integration/test_ask_agent_streaming.py +38 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/test_resource_tools.py +5 -5
- remdb-0.3.219/tests/integration/test_ask_agent_streaming.py +0 -279
- {remdb-0.3.219 → remdb-0.3.221}/.claude/archive/PUBLISH.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.claude/archive/QUICKSTART.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.claude/archive/publish.sh +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.claude/settings.local.json +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.dockerignore +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.env.example +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.experiments/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.experiments/RUN_ON_CLUSTER.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.experiments/TESTING_GUIDE.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.experiments/test-phoenix-integration.sh +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.githooks/pre-commit +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.githooks/pre-push +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.gitignore +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/039976f3b4dc7549.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/045e65492b634d11.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/07f5cd0e3fb1d287.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/08f4ae339838b804.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/0a64e58ae1289686.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/0b34bcd318001ead.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/0da06e67dd284834.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/0e200bfe2ea523f2.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/10b1925cb6007390.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/11c55125d2be1895.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/12dd62bbe8ee9b6a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/18f78825b8e302a8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/19a7ff44501eb3f9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/1c9cec1b6f266e8d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/1db0e7d4ac2443af.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/1f32d592b118d944.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/20db05a60f4c6ce3.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/220746359cef9884.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2279f944d9ee9966.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/23c2221c537a5fc7.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/24034098fd444b39.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/245d4933e8c1b195.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2470f3a5e2d1953b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/24acc2df261ae549.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/256e0b513c55383d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/26a8ed0cdfc0ccab.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/28e3c2bf25dfc659.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/295a37ef869b0a49.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2a6f58009e01ad65.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2ab7ae3b2e42644e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2b24548c2f91f8b9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2bb63e6235d19b40.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2c74a0f17cde1b0c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2d728912eb223a33.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2de80149b410a676.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/2e1001cbed04103c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/32d99ccf71d10a38.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/333c03f53d37ed0e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/3353ae12a176a9bd.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/34f1cfc7a58e8b0c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/3a11309ab5c2f4f1.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/3c5bd974fb83b573.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/3ca9da43dd834bca.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/3e9db2b8a87873c7.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/3ff1b430e0b510d5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/4035607526c8600d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/40f0415d564cb996.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/4388f8ee095c9ed8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/439f422b7f8dc467.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/452c56ffd625931f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/454e06d91c1f7da3.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/45ee850e300157c8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/45f79b5f90a07f0e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/487e56b12d123968.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/49be62bf170de12a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/4b3e165ec4ba87d0.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/505ff13d9ac8f006.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/51e81cbe7899e310.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/537dea93b57ffce5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/56a9f1cd9ec05384.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/56bf449feab17e6d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/57ab5fe18c74538b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/5a11f436d88e89cd.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/5b10dca1c6db6714.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/5bcfea3bfc53067c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/5eb63bbe412735a4.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/5ebca8549bb3ff2b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/5fef074c57dd118f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/60f343229f836ab6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6153f83bf3713b32.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6488134e7b6dd403.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/68e7b00767be2e16.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6afac5499ef0a938.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6bd93d4fd4cc3893.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6defbba8bfc76983.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6e37f5165f71513b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6e6c3d4ef7ca1300.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6f9130d5f4db8b28.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/6fc0d79c16c59de5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/774b8c209528323e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/78c509bc3a9d93c4.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/798017037907ab5f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/7a4fd9fd84ae6899.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/7b094993adee6e1a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/7b3e640c001c4894.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/7c3ad418912e7c09.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/7f630276be2a1503.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/80fd68e8a4ac6556.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/819aabcfdf1334af.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/81ea65c652232174.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/8225fe0751545bd9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/84c4f70ba7616566.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/856e8ba75c4d220e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/8cace0ec228b43d6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/8d1ecc30d7d58b41.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/8e2e4ab7c05925fa.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/8e89a980bc3b92d8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/8f6a9b01f15883f5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9091b9d61e026046.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/927a028cf723c70d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/94bda8f2cabc1358.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/95313ccec52beb53.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/954fee40bb61432b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9592cc24f2bf0d77.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/967396ed95832197.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9804f3b02bf98e83.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9936890e55f094f3.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/99405cab6cc35283.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/99e3da57a007bc59.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/99f1579d6a6790ad.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9a6b60a4833997e2.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9c265a028ee05977.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9f02e484a5feb3af.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/9fd81ffc0b3282f8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a0d60cff1e5950a6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a1da34b0466f625e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a2bcfb3e4cf75d71.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a3fd1a45a0ef02f1.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a72acced3b5f0c28.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a78fa3051259d29c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/a964045be65be2d2.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ac4f98ccc34fc6c0.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ae8bc0c15954a96a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/af05b5754cd245b5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/af28c894e94dc85c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b0a26c1396c336b2.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b2b5204d4dfab9dc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b2f8df0bdc713008.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b361fc308a3b9ab1.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b374846290238cd1.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b4b163b746d0aa53.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b68845f6e8da9be3.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b7e677bf8412e9bd.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/b99ba32d31caa65e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/bc02d7c24ec8eccc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/bc1a967be3c37e18.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/bc89d1801e46fb3c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/bce873a224061155.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/bdb1282b79539c3a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/bea4de84b22aebbc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c1f16f2de51197de.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c5f723dcb1ff4b6f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c6ca46f28d7798dd.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c6e2f4ede9282c2f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c761de11e901384a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c99399d1889fa84c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/c9fd297a955f2355.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ca9a80b78b7aa22c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/cb9503b8979b185d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/cbc6cfb0a51ab6bb.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/cc3bda1ed2e95150.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ceb98745ab5dbe70.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/d1df948b17e4d9fc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/d1e1e212112ab926.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/d4b766742cf2328a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/d93262cc2f01da93.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/d977ad06778acf8d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/da9376a352a900b8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/db2816895dd01979.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/db3a782c367dbe28.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/db825a17acae232c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/dc96bd8d8ad04ee4.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/dd1562878ff3c0f5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/de117be85702ebbc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/e3aafc52b94d322c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/e53a6e77d7808ee8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/e7dc452a2aae9b10.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/e8a4b78d213a80ec.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ebf2fcb04221173e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ebf527595602c7cc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ec70e75eec5d6198.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/ed6a8410124b956b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/f0fa2893c7713bc6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/f1801152a72fbdf0.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/f6624f69041cc763.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/f6fe984552a62891.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/f81bbef279fc5018.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/f975369ecf8cfe1b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/mime/fd21c48c0c429b77.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0354796dc060829e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/039f9af1f7851836.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/05e117af5b509bae.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0bc34e3949fbef01.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0ce495589c7221d3.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0dd1cda742544db1.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0eba31912f25f3eb.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0f2703145ac02172.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0fa09530ccf28805.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/0fd8e540615171e8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/101ff2c4997376a9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/12c490c06def9488.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/18257c152bba13a6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/1d4a6a418d2b6a64.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/1e61d3c782893a54.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/1fc92f87c93d4fd9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/2c9de54bccd13e11.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/2f3ea5c1badef128.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/32aa8c660cf91963.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/35111034d5ad26a6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/352eb0c7f720c196.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/3a2e224daffb8e3d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/3ee772a67521e170.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/401e93fa320273da.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/40d9b4294628036d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/44592db880e5ec3f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/45870b434cfe0c85.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/458943c95381e6de.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/4ca27bb3cae67ad6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/4e0d19bea7253cc8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/4f02317672f3198b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/56a98d6dbd85ebed.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/5d6b31c824d8741e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/5f75509e9ed27170.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/5fcfe11a675bac8b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/61b8b2fc9077f91a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/642c92672daf5c43.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/655ff32e6cd550bc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/65bc24178c843052.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/66cd62510980471d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/681c1dd84a2bdf26.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/6838fe47e511b2b8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/6a609539ed167213.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/74b6b71e76efb9c9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/75e719c76477d44f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/77e0e879c2c95195.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/7a15ef0ba4aa5660.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/7a9dd710389dde99.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/7b783286f80ab872.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/7d1298c12634bc16.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/7ddf2b8e4c6cb2e3.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/7fc2229fcb868522.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/85abdb138905726a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/884e41282eb896c5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/8a703994c30b19ea.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/8aca0021ebe63f8e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/8bc107890e1ab320.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/8c1a66ea86c98f76.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/8dd5ac3207b6ca3b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/8f898c00eea3a93b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/931cbc8a4cbebf70.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/932804c1aff4d044.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/94b151c44f8a3588.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/94ce2189385c970f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/94fa736d741d63be.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/95bd2009772c07fd.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/95f748fee80393ef.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/9b1e26a55ef34ee9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/9f3159c9912586db.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/a17c34748d867e85.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/a2ca0018b46feabd.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/a60b9031cf48ebba.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/a9be790d1f0ae7ec.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/ac4d6823c4034fe6.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/ad80625c2fe055e2.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/b102691e3c3e4cae.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/b34027c96f8daa30.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/b639b463e04459db.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/b7e540f21b7f0271.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/ba460ba22b61b3ac.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/ba7499ca4c58ff94.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/be2d027b571e9344.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c1fff30850bb8b6f.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c3889a8993fc490d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c51c4fa6e6b83f7e.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c57ca30ea53e2d68.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c64c433f4452d82a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c91739ca8dcc39ea.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c91d5e81eba0d3c9.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/c9fecad2b9f0357c.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/cb7fab9ab7b8c520.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/cbbaeea4c7d24156.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/cc7dd2a0003c03d8.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/ce64ddc6701623a7.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/d19b01ce83c8c71a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/d5aae4af1fe94a3a.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/d5c47dfe60be1592.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/d7eef627315eeab2.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/d81cb4d0b47db4ae.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/deed4c82c27e2b5d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/df1c0ed33adf634d.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/e1c2af52b798715b.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/e249b7de89e07bbc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/e6b6c0b80707ee08.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/e74d1c6e8e950e20.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/e9d2da361090c228.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/ec8c114b8a360379.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/f1772556a9442724.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/f4753f23f51fe441.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/f52c654a914ee356.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/f6187d9353655ff5.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/f766aa4cfdca2770.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/fabcc3a4db082252.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.kreuzberg/tables/fec2d3d5372c2bcc.msgpack +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/Activate.ps1 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/activate +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/activate-global-python-argcomplete +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/activate.csh +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/activate.fish +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/alembic +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/arize-phoenix +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/cyclopts +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/distro +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/docutils +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/dotenv +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/email_validator +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/f2py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/fastapi +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/fastavro +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/fastmcp +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/genai-prices +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/get_gprof +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/get_objgraph +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/griffe +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/hf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/httpx +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/hypercorn +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/inv +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/invoke +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/jp.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/jsonpath_ng +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/jsonschema +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/keyring +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/kreuzberg +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/logfire +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/mako-render +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/markdown-it +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/mcp +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/mpire-dashboard +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/normalizer +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/numpy-config +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/openai +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/opentelemetry-bootstrap +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/opentelemetry-instrument +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pai +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/phoenix +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pip +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pip3 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pip3.12 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pygmentize +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pyrsa-decrypt +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pyrsa-encrypt +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pyrsa-keygen +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pyrsa-priv2pub +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pyrsa-sign +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pyrsa-verify +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pystache +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/pystache-test +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/python +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/python-argcomplete-check-easy-install-script +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/python3 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/python3.12 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/register-python-argcomplete +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rem +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2html +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2html4 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2html5 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2latex +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2man +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2odt +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2pseudoxml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2s5 +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2xetex +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/rst2xml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/strawberry +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/tiny-agents +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/tqdm +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/undill +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/uvicorn +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/watchfiles +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/bin/websockets +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/.venv-test/pyvenv.cfg +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/Dockerfile +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/Tiltfile +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/alembic/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/alembic/env.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/alembic/script.py.mako +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/alembic.ini +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/dev-setup.sh +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/docker-compose.prebuilt.yml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/docker-compose.test.yml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/docker-compose.yml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/agents/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/agents/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/agents/agent_manager.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/agents/sse_simulator.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/context.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/context_builder.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/llm_provider_models.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/mcp/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/otel/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/otel/setup.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/providers/phoenix.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/query.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/query_helper.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/serialization.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/tools/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/agentic/tools/rem_tools.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/deps.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/main.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/mcp_router/prompts.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/mcp_router/resources.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/mcp_router/server.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/middleware/tracking.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/admin.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/auth.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/completions.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/json_utils.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/models.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/otel_utils.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/chat/sse_events.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/dev.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/feedback.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/messages.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/models.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/query.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/api/routers/shared_sessions.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/jwt.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/middleware.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/providers/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/providers/base.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/providers/email.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/providers/google.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/auth/providers/microsoft.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/ask.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/cluster.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/configure.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/db.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/dreaming.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/experiments.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/mcp.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/process.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/scaffold.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/schema.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/serve.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/commands/session.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/dreaming.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/cli/main.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/config.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/mcp_server.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/core/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/core/core_model.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/core/engram.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/core/experiment.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/core/inline_edge.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/core/rem_query.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/domain_resource.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/feedback.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/file.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/image_resource.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/message.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/moment.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/ontology.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/ontology_config.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/resource.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/schema.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/session.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/shared_session.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/subscriber.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/models/entities/user.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/py.typed +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/registry.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/core/agent-builder.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/core/moment-builder.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/core/rem-query-agent.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/core/resource-affinity-assessor.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/core/simple-assistant.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/core/user-profile-builder.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/contract-analyzer.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/contract-extractor.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/cv-parser.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/hello-world.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/query.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/simple.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/agents/examples/test.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/evaluators/hello-world/default.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/evaluators/rem/faithfulness.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/evaluators/rem/lookup-correctness.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/evaluators/rem/retrieval-precision.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/evaluators/rem/retrieval-recall.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/schemas/evaluators/rem/search-correctness.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/audio/INTEGRATION.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/audio/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/audio/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/audio/chunker.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/audio/transcriber.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/content/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/content/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/content/providers.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/content/service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/affinity_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/moment_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/ontology_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/user_model_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/dreaming/utils.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/email/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/email/service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/email/templates.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/embeddings/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/embeddings/api.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/embeddings/worker.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/examples.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/examples_paths.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/git_provider.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/local_provider.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/parsing-hooks-examples.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/paths.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/provider.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/s3_provider.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/fs/service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/git/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/git/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/git/service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/phoenix/EXPERIMENT_DESIGN.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/phoenix/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/phoenix/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/phoenix/client.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/phoenix/config.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/phoenix/prompt_labels.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/diff_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/migration_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/programmable_diff_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/pydantic_to_sqlalchemy.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/register_type.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/repository.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/schema_generator.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/postgres/sql_builder.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rate_limit.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/exceptions.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/executor.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/parser.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/queries.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/query.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/rem/service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/session/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/session/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/session/compression.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/session/pydantic_messages.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/session/reload.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/services/user_service.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/settings.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/background_indexes.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/migrations/001_install.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/migrations/002_install_models.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/migrations/003_optional_extensions.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/migrations/004_cache_system.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/migrations/005_schema_update.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/sql/migrations/migrate_session_id_to_uuid.sql +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/AGENTIC_CHUNKING.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/agentic_chunking.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/batch_ops.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/chunking.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/clip_embeddings.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/constants.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/date_utils.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/dict_utils.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/embeddings.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/examples/embeddings_example.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/examples/sql_types_example.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/files.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/markdown.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/mime_types.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/model_helpers.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/schema_loader.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/sql_paths.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/sql_types.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/user_id.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/utils/vision.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/db_listener.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/db_maintainer.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/dreaming.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/engram_processor.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/sqs_file_processor.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/src/rem/workers/unlogged_maintainer.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/test_resources.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/conftest.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/SUMMARY.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/generate_test_audio.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/test_hq_30s.wav +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/test_long_90s.wav +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/test_medium_10s.wav +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/test_short_3s.wav +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/audio/test_standard_30s.wav +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/annual_financial_report.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/consulting_agreement.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/nda_agreement.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/sample_business_plan.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/sample_invoice.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/sample_research_paper.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/sample_resume.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/pdf/service_contract.pdf +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/content-examples/test.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/CODE_REVIEW_FIXES.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/TEST_RESULTS.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/cli_verification.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/database-design.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/deep-learning-guide.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/ml-overview.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/python-best-practices.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/docs/test_summary.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/engrams/test-conversation.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/engrams/test-diary-entry.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/engrams/test-meeting-notes.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/engrams/test-observation.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/engrams/test-project-note.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/graph_seed.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/sample-architecture-doc.txt +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/sample_conversations.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/schemas/agents/query_agent.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/schemas/agents/summarization_agent.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/schemas/agents/test-cv-parser.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/schemas/agents/test_orchestrator.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/schemas/agents/test_responder.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/schemas/evaluators/accuracy_evaluator.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/001_sample_data.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/001_sample_data.yaml.bak +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/files/documents/api_spec.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/files/documents/meeting_notes.txt +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/files/engrams/personal_reflection.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/files/engrams/product_idea_voice_memo.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/files/engrams/team_standup_meeting.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/resources.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/shared_sessions_demo.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/test-user-data.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/test-user-data.yaml.bak +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/data/seed/users.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/conftest.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/helpers/README.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/helpers/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/helpers/seed_data.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/phoenix/run_complete_experiment.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/phoenix/run_hello_world_experiment.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/phoenix/test_connection.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/quick_delegation_test.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/rem-agent-eval-questions.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/rem-query-agent-tests.yaml +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/sample_data/dreaming/load_sample_data.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/sample_data/dreaming/resources/api_design_discussion.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/sample_data/dreaming/resources/database_migration_plan.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/sample_data/dreaming/resources/morning_standup_notes.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/sample_data/dreaming/resources/production_incident_postmortem.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/sample_data/dreaming/resources/quarterly_reflection.md +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/services/test_content_providers.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/services/test_schema_provider.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_actual_streaming_save.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_agent_end_to_end.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_agent_tool_invocation.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_agent_with_tools.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_api_endpoints.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_batch_upsert.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_completions_with_sessions.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_content_ingest_workflow.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_contract_extractor.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_dreaming_moments.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_dynamic_agents.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_early_stream_close.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_email_auth.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_embedding_worker.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_embeddings_e2e.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_git_provider.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_graph_traversal.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_mcp_server_loading.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_mcp_tool_loading.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_mcp_tools.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_mcp_tools_layer.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_messages_sessions_access.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_multi_agent.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_natural_language_to_rem.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_nested_agent_save.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_rem_query.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_rem_query_agent.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_rem_query_agent_structured.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_rem_query_evolution.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_rem_query_functions.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_rem_service_layer.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_schema_introspection.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_session_management.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_streaming_response.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_streaming_save.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_text_response_extraction.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_unlogged_maintainer.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_user_lookup_by_email.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_user_session_reloads.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_verify_setup.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/test_yaml_export.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/integration/validate_rem_agent_schema.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/scripts/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/scripts/demo_session_recovery.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/scripts/seed_sample_sessions.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/scripts/simple_session_demo.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/test_agent_manager.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/agents/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/agents/test_sse_simulator.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/providers/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/providers/test_pydantic_ai.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/test_schema.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/test_schema_integration.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/agentic/test_tool_description_suffix.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/api/__init__.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/api/test_feedback.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/api/test_models_endpoint.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/api/test_sessions_messages.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/api/test_sse_events.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/conftest.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/services/test_session_compression.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/test_admin_internal.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/test_api_key_auth.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/test_registry.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/test_session_cli.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/test_sql_security.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/tests/unit/utils/test_agentic_chunking.py +0 -0
- {remdb-0.3.219 → remdb-0.3.221}/walkthrough.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
��type�str�data�application/pdf�cached_at�A�Ua���H
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: remdb
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.221
|
|
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
|
|
@@ -116,7 +116,7 @@ def create_resource_tool(uri: str, usage: str = "", mcp_server: Any = None) -> T
|
|
|
116
116
|
the artificial MCP distinction between tools and resources.
|
|
117
117
|
|
|
118
118
|
Supports both:
|
|
119
|
-
- Concrete URIs: "rem://
|
|
119
|
+
- Concrete URIs: "rem://agents" -> tool with no parameters
|
|
120
120
|
- Template URIs: "patient-profile://field/{field_key}" -> tool with field_key parameter
|
|
121
121
|
|
|
122
122
|
Args:
|
|
@@ -131,7 +131,7 @@ def create_resource_tool(uri: str, usage: str = "", mcp_server: Any = None) -> T
|
|
|
131
131
|
|
|
132
132
|
Example:
|
|
133
133
|
# Concrete URI -> no-param tool
|
|
134
|
-
tool = create_resource_tool("rem://
|
|
134
|
+
tool = create_resource_tool("rem://agents", "List all agent schemas")
|
|
135
135
|
|
|
136
136
|
# Template URI -> parameterized tool
|
|
137
137
|
tool = create_resource_tool("patient-profile://field/{field_key}", "Get field definition", mcp_server=mcp)
|
|
@@ -732,7 +732,7 @@ async def create_agent(
|
|
|
732
732
|
# the artificial MCP distinction between tools and resources
|
|
733
733
|
#
|
|
734
734
|
# Supports both concrete and template URIs:
|
|
735
|
-
# - Concrete: "rem://
|
|
735
|
+
# - Concrete: "rem://agents" -> no-param tool
|
|
736
736
|
# - Template: "patient-profile://field/{field_key}" -> tool with field_key param
|
|
737
737
|
from ..mcp.tool_wrapper import create_resource_tool
|
|
738
738
|
|
|
@@ -79,7 +79,7 @@ class MCPResourceReference(BaseModel):
|
|
|
79
79
|
|
|
80
80
|
Example (exact URI):
|
|
81
81
|
{
|
|
82
|
-
"uri": "rem://
|
|
82
|
+
"uri": "rem://agents",
|
|
83
83
|
"name": "Agent Schemas",
|
|
84
84
|
"description": "List all available agent schemas"
|
|
85
85
|
}
|
|
@@ -96,7 +96,7 @@ class MCPResourceReference(BaseModel):
|
|
|
96
96
|
default=None,
|
|
97
97
|
description=(
|
|
98
98
|
"Exact resource URI or URI with query parameters. "
|
|
99
|
-
"Examples: 'rem://
|
|
99
|
+
"Examples: 'rem://agents', 'rem://resources?category=drug.*'"
|
|
100
100
|
)
|
|
101
101
|
)
|
|
102
102
|
|
|
@@ -594,15 +594,18 @@ async def read_resource(uri: str) -> dict[str, Any]:
|
|
|
594
594
|
**Available Resources:**
|
|
595
595
|
|
|
596
596
|
Agent Schemas:
|
|
597
|
-
• rem://
|
|
598
|
-
• rem://
|
|
599
|
-
|
|
597
|
+
• rem://agents - List all available agent schemas
|
|
598
|
+
• rem://agents/{agent_name} - Get specific agent schema
|
|
599
|
+
|
|
600
|
+
Documentation:
|
|
601
|
+
• rem://schema/entities - Entity schemas (Resource, Message, User, File, Moment)
|
|
602
|
+
• rem://schema/query-types - REM query type documentation
|
|
600
603
|
|
|
601
604
|
System Status:
|
|
602
605
|
• rem://status - System health and statistics
|
|
603
606
|
|
|
604
607
|
Args:
|
|
605
|
-
uri: Resource URI (e.g., "rem://
|
|
608
|
+
uri: Resource URI (e.g., "rem://agents", "rem://agents/ask_rem")
|
|
606
609
|
|
|
607
610
|
Returns:
|
|
608
611
|
Dict with:
|
|
@@ -611,14 +614,11 @@ async def read_resource(uri: str) -> dict[str, Any]:
|
|
|
611
614
|
- data: Resource data (format depends on resource type)
|
|
612
615
|
|
|
613
616
|
Examples:
|
|
614
|
-
# List all
|
|
615
|
-
read_resource(uri="rem://
|
|
616
|
-
|
|
617
|
-
# Get specific schema
|
|
618
|
-
read_resource(uri="rem://schema/ask_rem")
|
|
617
|
+
# List all agents
|
|
618
|
+
read_resource(uri="rem://agents")
|
|
619
619
|
|
|
620
|
-
# Get
|
|
621
|
-
read_resource(uri="rem://
|
|
620
|
+
# Get specific agent
|
|
621
|
+
read_resource(uri="rem://agents/ask_rem")
|
|
622
622
|
|
|
623
623
|
# Check system status
|
|
624
624
|
read_resource(uri="rem://status")
|
|
@@ -1385,8 +1385,10 @@ async def ask_agent(
|
|
|
1385
1385
|
logger.info(f"Invoking agent '{agent_name}' with prompt: {prompt[:100]}...")
|
|
1386
1386
|
|
|
1387
1387
|
# Check if we have an event sink for streaming
|
|
1388
|
-
|
|
1389
|
-
use_streaming =
|
|
1388
|
+
push_event = get_event_sink()
|
|
1389
|
+
use_streaming = push_event is not None
|
|
1390
|
+
|
|
1391
|
+
streamed_content = "" # Track if content was streamed
|
|
1390
1392
|
|
|
1391
1393
|
try:
|
|
1392
1394
|
# Set child context for nested tool calls
|
|
@@ -1412,12 +1414,12 @@ async def ask_agent(
|
|
|
1412
1414
|
if Agent.is_model_request_node(node):
|
|
1413
1415
|
async with node.stream(agent_run.ctx) as request_stream:
|
|
1414
1416
|
async for event in request_stream:
|
|
1415
|
-
# Proxy
|
|
1417
|
+
# Proxy part starts
|
|
1416
1418
|
if isinstance(event, PartStartEvent):
|
|
1417
1419
|
from pydantic_ai.messages import ToolCallPart, TextPart
|
|
1418
1420
|
if isinstance(event.part, ToolCallPart):
|
|
1419
1421
|
# Push tool start event to parent
|
|
1420
|
-
await push_event({
|
|
1422
|
+
await push_event.put({
|
|
1421
1423
|
"type": "child_tool_start",
|
|
1422
1424
|
"agent_name": agent_name,
|
|
1423
1425
|
"tool_name": event.part.tool_name,
|
|
@@ -1427,16 +1429,27 @@ async def ask_agent(
|
|
|
1427
1429
|
"tool_name": event.part.tool_name,
|
|
1428
1430
|
"index": event.index,
|
|
1429
1431
|
})
|
|
1430
|
-
|
|
1432
|
+
elif isinstance(event.part, TextPart):
|
|
1433
|
+
# TextPart may have initial content
|
|
1434
|
+
if event.part.content:
|
|
1435
|
+
accumulated_content.append(event.part.content)
|
|
1436
|
+
await push_event.put({
|
|
1437
|
+
"type": "child_content",
|
|
1438
|
+
"agent_name": agent_name,
|
|
1439
|
+
"content": event.part.content,
|
|
1440
|
+
})
|
|
1441
|
+
# Proxy text content deltas to parent for real-time streaming
|
|
1431
1442
|
elif isinstance(event, PartDeltaEvent):
|
|
1432
1443
|
if hasattr(event, 'delta') and hasattr(event.delta, 'content_delta'):
|
|
1433
1444
|
content = event.delta.content_delta
|
|
1434
1445
|
if content:
|
|
1435
1446
|
accumulated_content.append(content)
|
|
1436
|
-
#
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1447
|
+
# Push content chunk to parent for streaming
|
|
1448
|
+
await push_event.put({
|
|
1449
|
+
"type": "child_content",
|
|
1450
|
+
"agent_name": agent_name,
|
|
1451
|
+
"content": content,
|
|
1452
|
+
})
|
|
1440
1453
|
|
|
1441
1454
|
elif Agent.is_call_tools_node(node):
|
|
1442
1455
|
async with node.stream(agent_run.ctx) as tools_stream:
|
|
@@ -1444,7 +1457,7 @@ async def ask_agent(
|
|
|
1444
1457
|
if isinstance(tool_event, FunctionToolResultEvent):
|
|
1445
1458
|
result_content = tool_event.result.content if hasattr(tool_event.result, 'content') else tool_event.result
|
|
1446
1459
|
# Push tool result to parent
|
|
1447
|
-
await push_event({
|
|
1460
|
+
await push_event.put({
|
|
1448
1461
|
"type": "child_tool_result",
|
|
1449
1462
|
"agent_name": agent_name,
|
|
1450
1463
|
"result": result_content,
|
|
@@ -1482,14 +1495,20 @@ async def ask_agent(
|
|
|
1482
1495
|
|
|
1483
1496
|
logger.info(f"Agent '{agent_name}' completed successfully")
|
|
1484
1497
|
|
|
1485
|
-
|
|
1498
|
+
response = {
|
|
1486
1499
|
"status": "success",
|
|
1487
1500
|
"output": output,
|
|
1488
|
-
"text_response": str(result.output),
|
|
1489
1501
|
"agent_schema": agent_name,
|
|
1490
1502
|
"input_text": input_text,
|
|
1491
1503
|
}
|
|
1492
1504
|
|
|
1505
|
+
# Only include text_response if content was NOT streamed
|
|
1506
|
+
# When streaming, child_content events already delivered the content
|
|
1507
|
+
if not use_streaming or not streamed_content:
|
|
1508
|
+
response["text_response"] = str(result.output)
|
|
1509
|
+
|
|
1510
|
+
return response
|
|
1511
|
+
|
|
1493
1512
|
|
|
1494
1513
|
# =============================================================================
|
|
1495
1514
|
# Test/Debug Tools (for development only)
|
|
@@ -169,8 +169,6 @@ async def stream_openai_response(
|
|
|
169
169
|
responding_agent: str | None = None
|
|
170
170
|
# Track pending tool calls with full data for persistence
|
|
171
171
|
# Maps tool_id -> {"tool_name": str, "tool_id": str, "arguments": dict}
|
|
172
|
-
# Track accumulated content for child event streaming
|
|
173
|
-
accumulated_content: list[str] = []
|
|
174
172
|
pending_tool_data: dict[str, dict] = {}
|
|
175
173
|
|
|
176
174
|
# Import context functions for multi-agent support
|
|
@@ -468,7 +466,6 @@ async def stream_openai_response(
|
|
|
468
466
|
],
|
|
469
467
|
)
|
|
470
468
|
is_first_chunk = False
|
|
471
|
-
accumulated_content.append(content)
|
|
472
469
|
yield f"data: {content_chunk.model_dump_json()}\n\n"
|
|
473
470
|
elif event_type == "child_tool_result":
|
|
474
471
|
# Emit child tool completion
|
|
@@ -579,48 +576,10 @@ async def stream_openai_response(
|
|
|
579
576
|
del pending_tool_data[tool_id]
|
|
580
577
|
|
|
581
578
|
if not is_metadata_event:
|
|
582
|
-
#
|
|
583
|
-
#
|
|
584
|
-
#
|
|
585
|
-
#
|
|
586
|
-
# IMPORTANT: Only emit if we haven't already streamed via event sink!
|
|
587
|
-
# Child agents push child_content events during execution, which are
|
|
588
|
-
# already emitted above. Don't duplicate by emitting text_response again.
|
|
589
|
-
if isinstance(result_content, dict) and result_content.get("text_response"):
|
|
590
|
-
text_response = result_content["text_response"]
|
|
591
|
-
if text_response and str(text_response).strip():
|
|
592
|
-
# Skip if already streamed via child_content events
|
|
593
|
-
if accumulated_content:
|
|
594
|
-
logger.debug(
|
|
595
|
-
f"Skipping text_response from {tool_name} - already streamed "
|
|
596
|
-
f"{len(accumulated_content)} chunks via event sink"
|
|
597
|
-
)
|
|
598
|
-
else:
|
|
599
|
-
# No event sink streaming happened - emit the full text_response
|
|
600
|
-
text_content = str(text_response)
|
|
601
|
-
token_count += len(text_content.split())
|
|
602
|
-
|
|
603
|
-
# Emit as streamed content (OpenAI-compatible format)
|
|
604
|
-
content_chunk = ChatCompletionStreamResponse(
|
|
605
|
-
id=request_id,
|
|
606
|
-
created=created_at,
|
|
607
|
-
model=model,
|
|
608
|
-
choices=[
|
|
609
|
-
ChatCompletionStreamChoice(
|
|
610
|
-
index=0,
|
|
611
|
-
delta=ChatCompletionMessageDelta(
|
|
612
|
-
role="assistant" if is_first_chunk else None,
|
|
613
|
-
content=text_content,
|
|
614
|
-
),
|
|
615
|
-
finish_reason=None,
|
|
616
|
-
)
|
|
617
|
-
],
|
|
618
|
-
)
|
|
619
|
-
is_first_chunk = False
|
|
620
|
-
yield f"data: {content_chunk.model_dump_json()}\n\n"
|
|
621
|
-
logger.debug(
|
|
622
|
-
f"Streamed text_response from {tool_name} ({len(text_content)} chars)"
|
|
623
|
-
)
|
|
579
|
+
# NOTE: text_response fallback is DISABLED
|
|
580
|
+
# Child agents now stream content via child_content events (above)
|
|
581
|
+
# which provides real-time streaming. The text_response in tool
|
|
582
|
+
# result would duplicate that content, so we skip it entirely.
|
|
624
583
|
|
|
625
584
|
# Normal tool completion - emit ToolCallEvent
|
|
626
585
|
# For finalize_intake, send full result dict for frontend
|
|
@@ -124,7 +124,7 @@ json_schema_extra:
|
|
|
124
124
|
|
|
125
125
|
# Explicit resource declarations for reference data
|
|
126
126
|
resources:
|
|
127
|
-
- uri: rem://
|
|
127
|
+
- uri: rem://agents
|
|
128
128
|
name: Agent Schemas List
|
|
129
129
|
description: List all available agent schemas in the system
|
|
130
130
|
- uri: rem://status
|
|
@@ -185,7 +185,10 @@ async def test_child_agent_response_is_streamed(session_id):
|
|
|
185
185
|
if delta.get("content"):
|
|
186
186
|
print(f" [{i}] Content: {delta.get('content')[:50]}...")
|
|
187
187
|
elif "type" in event:
|
|
188
|
-
|
|
188
|
+
event_type = event.get('type')
|
|
189
|
+
print(f" [{i}] Event type: {event_type}")
|
|
190
|
+
if event_type == "error":
|
|
191
|
+
print(f" ERROR: {event.get('message', event)}")
|
|
189
192
|
|
|
190
193
|
# Verify we got content from the child agent
|
|
191
194
|
assert content, "No content was streamed"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Minimal test for ask_agent streaming."""
|
|
2
|
+
import asyncio
|
|
3
|
+
import pytest
|
|
4
|
+
from rem.agentic.context import AgentContext, agent_context_scope, set_event_sink
|
|
5
|
+
from rem.api.mcp_router.tools import ask_agent
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@pytest.mark.asyncio
|
|
9
|
+
@pytest.mark.llm
|
|
10
|
+
async def test_ask_agent_streams_child_content():
|
|
11
|
+
"""ask_agent should push child_content events to the queue."""
|
|
12
|
+
queue: asyncio.Queue = asyncio.Queue()
|
|
13
|
+
ctx = AgentContext(user_id="test", tenant_id="test", session_id="test", default_model="openai:gpt-4o-mini")
|
|
14
|
+
|
|
15
|
+
set_event_sink(queue)
|
|
16
|
+
try:
|
|
17
|
+
with agent_context_scope(ctx):
|
|
18
|
+
result = await ask_agent(agent_name="rem", input_text="Say: hello")
|
|
19
|
+
finally:
|
|
20
|
+
set_event_sink(None)
|
|
21
|
+
|
|
22
|
+
# Collect events
|
|
23
|
+
events = []
|
|
24
|
+
while not queue.empty():
|
|
25
|
+
events.append(await queue.get())
|
|
26
|
+
|
|
27
|
+
print(f"\nEvents: {len(events)}")
|
|
28
|
+
for e in events:
|
|
29
|
+
print(f" {e.get('type')}: {str(e)[:80]}")
|
|
30
|
+
print(f"\nResult: {result}")
|
|
31
|
+
|
|
32
|
+
# Must have child_content events
|
|
33
|
+
content_events = [e for e in events if e.get("type") == "child_content"]
|
|
34
|
+
assert len(content_events) > 0, f"No child_content events! Got: {events}"
|
|
35
|
+
|
|
36
|
+
# text_response should NOT be in result if content was streamed
|
|
37
|
+
if "text_response" in result:
|
|
38
|
+
print(f"\n⚠ text_response present (duplication source): {result['text_response'][:50]}...")
|
|
@@ -14,10 +14,10 @@ class TestCreateResourceTool:
|
|
|
14
14
|
|
|
15
15
|
def test_concrete_uri_creates_no_param_tool(self):
|
|
16
16
|
"""Concrete URIs become tools with no parameters."""
|
|
17
|
-
tool = create_resource_tool("rem://
|
|
17
|
+
tool = create_resource_tool("rem://agents", "List all agents")
|
|
18
18
|
|
|
19
|
-
assert tool.name == "
|
|
20
|
-
assert "List all
|
|
19
|
+
assert tool.name == "get_rem_agents"
|
|
20
|
+
assert "List all agents" in (tool.description or "")
|
|
21
21
|
|
|
22
22
|
def test_template_uri_creates_parameterized_tool(self):
|
|
23
23
|
"""Template URIs become tools with extracted parameters."""
|
|
@@ -95,12 +95,12 @@ class TestResourceToolExecution:
|
|
|
95
95
|
return_value={"schemas": ["agent1", "agent2"]}
|
|
96
96
|
)
|
|
97
97
|
|
|
98
|
-
tool = create_resource_tool("rem://
|
|
98
|
+
tool = create_resource_tool("rem://agents", "List agents")
|
|
99
99
|
|
|
100
100
|
# Get the wrapper function and call it
|
|
101
101
|
result = await tool.function()
|
|
102
102
|
|
|
103
|
-
mock_load.assert_called_once_with("rem://
|
|
103
|
+
mock_load.assert_called_once_with("rem://agents")
|
|
104
104
|
assert "agent1" in result
|
|
105
105
|
|
|
106
106
|
async def test_template_tool_substitutes_params(self, mocker):
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Real end-to-end test for ask_agent streaming at the controller level.
|
|
3
|
-
|
|
4
|
-
Tests that when an orchestrator agent delegates to a child via ask_agent:
|
|
5
|
-
1. Child agent events are streamed/bubbled up to the parent
|
|
6
|
-
2. All tool calls are saved to database
|
|
7
|
-
3. Assistant message is saved to database
|
|
8
|
-
|
|
9
|
-
NO MOCKING - uses real agents and real database.
|
|
10
|
-
|
|
11
|
-
Run with:
|
|
12
|
-
POSTGRES__CONNECTION_STRING="postgresql://rem:rem@localhost:5050/rem" \
|
|
13
|
-
uv run pytest tests/integration/test_ask_agent_streaming.py -v -s
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
import asyncio
|
|
17
|
-
import json
|
|
18
|
-
import uuid
|
|
19
|
-
import pytest
|
|
20
|
-
from pathlib import Path
|
|
21
|
-
|
|
22
|
-
# Mark these tests as requiring LLM calls - they can be skipped in pre-push hooks
|
|
23
|
-
# Also mark them as needing isolation due to nested async resource management
|
|
24
|
-
pytestmark = [
|
|
25
|
-
pytest.mark.llm, # Requires real LLM API calls
|
|
26
|
-
pytest.mark.asyncio, # Uses async/await
|
|
27
|
-
]
|
|
28
|
-
|
|
29
|
-
from rem.agentic.context import AgentContext
|
|
30
|
-
from rem.agentic.providers.pydantic_ai import create_agent
|
|
31
|
-
from rem.utils.schema_loader import load_agent_schema
|
|
32
|
-
from rem.api.routers.chat.streaming import stream_openai_response_with_save
|
|
33
|
-
from rem.services.session import SessionMessageStore
|
|
34
|
-
from rem.settings import settings
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# Path to test agent schemas
|
|
38
|
-
TEST_SCHEMAS_DIR = Path(__file__).parent.parent / "data" / "schemas" / "agents"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class TestAskAgentStreaming:
|
|
42
|
-
"""
|
|
43
|
-
Real end-to-end tests for ask_agent streaming.
|
|
44
|
-
|
|
45
|
-
Uses test_orchestrator (always calls ask_agent) and test_responder (simple responder).
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
@pytest.fixture
|
|
49
|
-
def session_id(self):
|
|
50
|
-
return str(uuid.uuid4())
|
|
51
|
-
|
|
52
|
-
@pytest.fixture
|
|
53
|
-
def user_id(self):
|
|
54
|
-
return str(uuid.uuid4())
|
|
55
|
-
|
|
56
|
-
@pytest.mark.asyncio
|
|
57
|
-
async def test_ask_agent_streams_and_saves(self, session_id, user_id):
|
|
58
|
-
"""
|
|
59
|
-
Test that ask_agent properly streams child content and saves all messages.
|
|
60
|
-
|
|
61
|
-
Expected flow:
|
|
62
|
-
1. Orchestrator calls ask_agent(agent_name="rem", input_text=...)
|
|
63
|
-
2. Child agent (rem) responds with text
|
|
64
|
-
3. Child's text is streamed as content chunks
|
|
65
|
-
4. Tool call (ask_agent) is saved to database
|
|
66
|
-
5. Assistant message (child's response) is saved to database
|
|
67
|
-
"""
|
|
68
|
-
if not settings.postgres.enabled:
|
|
69
|
-
pytest.skip("Postgres not enabled - set POSTGRES__CONNECTION_STRING")
|
|
70
|
-
|
|
71
|
-
# Load the test_orchestrator schema
|
|
72
|
-
schema_path = TEST_SCHEMAS_DIR / "test_orchestrator.yaml"
|
|
73
|
-
schema = load_agent_schema(str(schema_path))
|
|
74
|
-
assert schema is not None, "test_orchestrator schema not found"
|
|
75
|
-
|
|
76
|
-
# Use OpenAI model for testing
|
|
77
|
-
test_model = "openai:gpt-4.1"
|
|
78
|
-
|
|
79
|
-
# Create context
|
|
80
|
-
context = AgentContext(
|
|
81
|
-
user_id=user_id,
|
|
82
|
-
session_id=session_id,
|
|
83
|
-
tenant_id=user_id,
|
|
84
|
-
default_model=test_model,
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
# Create agent with OpenAI model
|
|
88
|
-
agent = await create_agent(context=context, agent_schema_override=schema, model_override=test_model)
|
|
89
|
-
|
|
90
|
-
# Collect streaming output
|
|
91
|
-
chunks = []
|
|
92
|
-
content_chunks = []
|
|
93
|
-
tool_events = []
|
|
94
|
-
|
|
95
|
-
# Use OpenAI model for testing (Anthropic has credit issues)
|
|
96
|
-
test_model = "openai:gpt-4.1"
|
|
97
|
-
|
|
98
|
-
async for chunk in stream_openai_response_with_save(
|
|
99
|
-
agent=agent,
|
|
100
|
-
prompt="Hello, please delegate this message",
|
|
101
|
-
model=test_model,
|
|
102
|
-
session_id=session_id,
|
|
103
|
-
user_id=user_id,
|
|
104
|
-
agent_context=context,
|
|
105
|
-
):
|
|
106
|
-
chunks.append(chunk)
|
|
107
|
-
|
|
108
|
-
# Parse chunk to categorize
|
|
109
|
-
if chunk.startswith("data: ") and not chunk.startswith("data: [DONE]"):
|
|
110
|
-
try:
|
|
111
|
-
data = json.loads(chunk[6:].strip())
|
|
112
|
-
if "choices" in data:
|
|
113
|
-
delta = data["choices"][0].get("delta", {})
|
|
114
|
-
content = delta.get("content")
|
|
115
|
-
if content:
|
|
116
|
-
content_chunks.append(content)
|
|
117
|
-
except json.JSONDecodeError:
|
|
118
|
-
pass
|
|
119
|
-
elif chunk.startswith("event: tool_call"):
|
|
120
|
-
tool_events.append(chunk)
|
|
121
|
-
|
|
122
|
-
# Print results for debugging
|
|
123
|
-
print(f"\n=== STREAMING RESULTS ===")
|
|
124
|
-
print(f"Total chunks: {len(chunks)}")
|
|
125
|
-
print(f"Content chunks: {len(content_chunks)}")
|
|
126
|
-
print(f"Tool events: {len(tool_events)}")
|
|
127
|
-
print(f"Streamed content: {''.join(content_chunks)[:200]}...")
|
|
128
|
-
|
|
129
|
-
# Load saved messages from database
|
|
130
|
-
store = SessionMessageStore(user_id=user_id)
|
|
131
|
-
messages = await store.load_session_messages(session_id=session_id, user_id=user_id)
|
|
132
|
-
|
|
133
|
-
print(f"\n=== SAVED MESSAGES ===")
|
|
134
|
-
for msg in messages:
|
|
135
|
-
role = msg.get("role", "?")
|
|
136
|
-
content = str(msg.get("content", ""))[:80]
|
|
137
|
-
tool_name = msg.get("tool_name", "")
|
|
138
|
-
print(f" {role}: {content}{'...' if len(str(msg.get('content', ''))) > 80 else ''} {f'[{tool_name}]' if tool_name else ''}")
|
|
139
|
-
|
|
140
|
-
# Categorize saved messages
|
|
141
|
-
tool_msgs = [m for m in messages if m.get("role") == "tool"]
|
|
142
|
-
assistant_msgs = [m for m in messages if m.get("role") == "assistant"]
|
|
143
|
-
ask_agent_tools = [m for m in tool_msgs if m.get("tool_name") == "ask_agent"]
|
|
144
|
-
|
|
145
|
-
print(f"\n=== SUMMARY ===")
|
|
146
|
-
print(f"Tool messages: {len(tool_msgs)}")
|
|
147
|
-
print(f"ask_agent tools: {len(ask_agent_tools)}")
|
|
148
|
-
print(f"Assistant messages: {len(assistant_msgs)}")
|
|
149
|
-
|
|
150
|
-
# ASSERTIONS
|
|
151
|
-
# 1. Content should have been streamed
|
|
152
|
-
assert len(content_chunks) > 0, "No content was streamed"
|
|
153
|
-
streamed_content = "".join(content_chunks)
|
|
154
|
-
assert len(streamed_content) > 0, "Streamed content is empty"
|
|
155
|
-
|
|
156
|
-
# 2. ask_agent tool call should be saved
|
|
157
|
-
assert len(ask_agent_tools) >= 1, f"Expected at least 1 ask_agent tool message, got {len(ask_agent_tools)}"
|
|
158
|
-
|
|
159
|
-
# 3. Assistant message should be saved
|
|
160
|
-
assert len(assistant_msgs) == 1, f"Expected 1 assistant message, got {len(assistant_msgs)}"
|
|
161
|
-
|
|
162
|
-
# 4. Assistant message should contain the streamed content
|
|
163
|
-
# Note: Saved content may be compressed/formatted differently
|
|
164
|
-
saved_content = assistant_msgs[0].get("content", "")
|
|
165
|
-
print(f"\n=== CONTENT COMPARISON ===")
|
|
166
|
-
print(f"Streamed length: {len(streamed_content)}")
|
|
167
|
-
print(f"Saved length: {len(saved_content)}")
|
|
168
|
-
print(f"Streamed first 100: {streamed_content[:100]}...")
|
|
169
|
-
print(f"Saved first 100: {saved_content[:100]}...")
|
|
170
|
-
# Check that they share common content (may differ due to formatting)
|
|
171
|
-
assert len(saved_content) > 0, "Saved content is empty"
|
|
172
|
-
# Relaxed check - just verify content is substantial
|
|
173
|
-
assert len(saved_content) > 50, f"Saved content too short: {len(saved_content)}"
|
|
174
|
-
|
|
175
|
-
print("\n✅ All assertions passed!")
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
@pytest.mark.asyncio
|
|
179
|
-
async def test_multi_turn_saves_all_assistant_messages(self, session_id, user_id):
|
|
180
|
-
"""
|
|
181
|
-
Test that multiple turns in the same session each save their own assistant message.
|
|
182
|
-
|
|
183
|
-
This catches bugs like accumulated_content not being properly scoped per-turn.
|
|
184
|
-
The bug would manifest as: turn 1 works, turn 2+ fails with NameError.
|
|
185
|
-
|
|
186
|
-
Expected: N turns -> N assistant messages saved to database.
|
|
187
|
-
"""
|
|
188
|
-
if not settings.postgres.enabled:
|
|
189
|
-
pytest.skip("Postgres not enabled - set POSTGRES__CONNECTION_STRING")
|
|
190
|
-
|
|
191
|
-
# Use a simple responder agent (no delegation) to isolate multi-turn streaming
|
|
192
|
-
schema_path = TEST_SCHEMAS_DIR / "test_responder.yaml"
|
|
193
|
-
schema = load_agent_schema(str(schema_path))
|
|
194
|
-
assert schema is not None, "test_responder schema not found"
|
|
195
|
-
|
|
196
|
-
test_model = "openai:gpt-4.1"
|
|
197
|
-
|
|
198
|
-
# Create context
|
|
199
|
-
context = AgentContext(
|
|
200
|
-
user_id=user_id,
|
|
201
|
-
session_id=session_id,
|
|
202
|
-
tenant_id=user_id,
|
|
203
|
-
default_model=test_model,
|
|
204
|
-
)
|
|
205
|
-
|
|
206
|
-
# Create agent
|
|
207
|
-
agent = await create_agent(context=context, agent_schema_override=schema, model_override=test_model)
|
|
208
|
-
|
|
209
|
-
# Run 3 turns - simple conversation
|
|
210
|
-
turn_prompts = [
|
|
211
|
-
"Hello, how are you?",
|
|
212
|
-
"Tell me something interesting",
|
|
213
|
-
"Thanks for chatting!",
|
|
214
|
-
]
|
|
215
|
-
|
|
216
|
-
for turn_num, prompt in enumerate(turn_prompts, 1):
|
|
217
|
-
print(f"\n=== TURN {turn_num}: {prompt[:50]}... ===")
|
|
218
|
-
|
|
219
|
-
chunks = []
|
|
220
|
-
async for chunk in stream_openai_response_with_save(
|
|
221
|
-
agent=agent,
|
|
222
|
-
prompt=prompt,
|
|
223
|
-
model=test_model,
|
|
224
|
-
session_id=session_id,
|
|
225
|
-
user_id=user_id,
|
|
226
|
-
agent_context=context,
|
|
227
|
-
):
|
|
228
|
-
chunks.append(chunk)
|
|
229
|
-
|
|
230
|
-
print(f"Turn {turn_num} completed: {len(chunks)} chunks")
|
|
231
|
-
|
|
232
|
-
# Verify no errors occurred (would manifest as fewer chunks or exception)
|
|
233
|
-
assert len(chunks) > 0, f"Turn {turn_num} produced no chunks"
|
|
234
|
-
|
|
235
|
-
# Load saved messages from database
|
|
236
|
-
store = SessionMessageStore(user_id=user_id)
|
|
237
|
-
messages = await store.load_session_messages(session_id=session_id, user_id=user_id)
|
|
238
|
-
|
|
239
|
-
# Categorize saved messages
|
|
240
|
-
assistant_msgs = [m for m in messages if m.get("role") == "assistant"]
|
|
241
|
-
|
|
242
|
-
print(f"\n=== MULTI-TURN RESULTS ===")
|
|
243
|
-
print(f"Total messages: {len(messages)}")
|
|
244
|
-
print(f"Assistant messages: {len(assistant_msgs)}")
|
|
245
|
-
|
|
246
|
-
for i, msg in enumerate(assistant_msgs):
|
|
247
|
-
content = str(msg.get("content", ""))[:60]
|
|
248
|
-
print(f" Assistant {i+1}: {content}...")
|
|
249
|
-
|
|
250
|
-
# CRITICAL ASSERTION: Each turn should save an assistant message
|
|
251
|
-
assert len(assistant_msgs) == len(turn_prompts), (
|
|
252
|
-
f"Expected {len(turn_prompts)} assistant messages for {len(turn_prompts)} turns, "
|
|
253
|
-
f"got {len(assistant_msgs)}. This indicates a per-turn scoping bug."
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
# Verify each assistant message has content
|
|
257
|
-
for i, msg in enumerate(assistant_msgs):
|
|
258
|
-
content = msg.get("content", "")
|
|
259
|
-
assert len(content) > 0, f"Assistant message {i+1} has no content"
|
|
260
|
-
|
|
261
|
-
print("\n✅ Multi-turn test passed!")
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
if __name__ == "__main__":
|
|
265
|
-
# Run directly for quick testing
|
|
266
|
-
async def main():
|
|
267
|
-
test = TestAskAgentStreaming()
|
|
268
|
-
session_id = str(uuid.uuid4())
|
|
269
|
-
user_id = str(uuid.uuid4())
|
|
270
|
-
|
|
271
|
-
print("Running test_ask_agent_streams_and_saves...")
|
|
272
|
-
await test.test_ask_agent_streams_and_saves(session_id, user_id)
|
|
273
|
-
|
|
274
|
-
print("\n" + "="*60)
|
|
275
|
-
print("Running test_multi_turn_saves_all_assistant_messages...")
|
|
276
|
-
session_id = str(uuid.uuid4()) # Fresh session
|
|
277
|
-
await test.test_multi_turn_saves_all_assistant_messages(session_id, user_id)
|
|
278
|
-
|
|
279
|
-
asyncio.run(main())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|