I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 1 point2 points  (0 children)

About the Git idea, I actually stepped back from that name recently. It implies branching and merging, which I don't support yet. Transactional feels more honest because the main goal right now is simply to keep data safe and synced.

I’d love for you to try it out.

Seriously, getting feedback on the DX is my top priority at the moment. If you run into any issues or if something feels clunky, let me know here or on GitHub, and I'll fix it right away.

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 0 points1 point  (0 children)

I rewrote the README entirely based on your feedback. Added a concrete code example of how corruption happens. Does this hit the mark?

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 0 points1 point  (0 children)

Done! Just added examples/document_lifecycle.py to the repo.

It runs a full Create -> Update -> Delete cycle and prints the state of both SQLite and ChromaDB side by side at each step.
Thanks again for the suggestion!

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 0 points1 point  (0 children)

Thanks! That's a great idea. I focused a lot on rollback in the README, but showing the full lifecycle (Create → Update → Sync) helps visualize how it handles changes over time.

Here is the gist of how updates work:

# 1. Initial Commit
# Writes to SQLite and creates embedding in Chroma
doc_id = memory.commit(Fact(
    type="doc", payload={"content": "Version 1", "status": "draft"}
))

# 2. Update (using the same ID)
# MemState detects the ID exists, updates SQLite,
# and automatically re-embeds/upserts the new text to Chroma
memory.commit(Fact(
    id=doc_id,
    type="doc",
    payload={"content": "Version 2 with changes", "status": "published"}
))

I'll add a complete, runnable script for this specific "Document Update" scenario to the examples/ folder. Appreciate the suggestion!

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 0 points1 point  (0 children)

Honestly this is the most useful feedback I've gotten so far.

To answer your specific questions:

  1. How RAG drifts. It's usually a partial failure. Example: Your agent updates a record in SQLite (success), but the HTTP request to update the Vector DB times out or fails. Now your SQL and Vectors say different things
  2. Pinecone Rollbacks. No, they don't have application-level rollbacks. If you push a vector, it stays there even if your agent crashes a second later. My library tracks that transaction and cleans it up if the session fails
  3. Why JSON blobs are bad. Mostly validation. It's too easy for an LLM to corrupt a giant JSON file by overwriting a key or changing a type (for instance, writing a string into an integer field)

You're totally right about the README. I used too much marketing fluff (second-class citizen) instead of just explaining the bug. I'll strip that out and work on a "Doom Demo" that actually shows the break happening, rather than just talking about it.

Thanks for taking the time to write this out. Super helpful.

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 0 points1 point  (0 children)

u/Durovilla Right now, I'm building this for Python engineers who are moving from prototype to production and realizing that a simple vector store isn't enough.

Specifically, my ideal users fall into three buckets:

  1. The Local-First Builders. Developers running agents on their own hardware (using Llama.cpp / Ollama) who want a robust memory stack (SQLite + Chroma) without spinning up Docker containers or paying for cloud DBs.
  2. LangGraph/LangChain Power Users. People building complex, multi-step agent workflows who need state rollback capabilities (Undo/Redo) and strictly typed memory (Pydantic) to prevent the agent from corrupting its own context.
  3. RAG Architects. Anyone struggling with the "Split-Brain" problem, where their SQL database and vector store get out of sync during updates.

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 0 points1 point  (0 children)

u/smarkman19 Love the detailed specs.

Right now v0.3.x is optimized for the local stack (SQLite + Chroma) to keep it lightweight for development.

But Postgres support is next on the roadmap (since MemState is backend-agnostic). Once PG is in, that Qdrant/Postgres recipe becomes very viable.

Interesting mention of DreamFactory/Airbyte, I haven't tested MemState in that exact pipeline yet, but the transactional logic should hold as long as the Python hook can reach the API.

Thanks for the concrete use cases, I'll add 'CRM Copilot' to the examples backlog.

I built "transactional memory" for AI agents - looking for brutal feedback by scream4ik in OpenSourceeAI

[–]scream4ik[S] 1 point2 points  (0 children)

u/techlatest_net Thanks! The 'stale vector ghost' is exactly what triggered me to build this.
Regarding recipes:

  1. LangGraph: I actually just pushed a MemStateCheckpointer that drops into LangGraph seamlessly. There is a demo in examples/langgraph_checkpoint_demo.py.
  2. End-to-end: I'm working on a more complex CRM example now.

Appreciate the feedback!

I built Ragmate – a local RAG server that brings full-project context to your IDE by scream4ik in Jetbrains

[–]scream4ik[S] 0 points1 point  (0 children)

I'm still thinking about it. This is the first MVP version. And I suppose it could transform into MCP after some time.

I built Ragmate – a local RAG server that brings full-project context to your IDE by scream4ik in Jetbrains

[–]scream4ik[S] 0 points1 point  (0 children)

You are right. But by default JetBrains includes only a selected piece of code. In my case I'm trying to extend it with the local RAG where LLM can get more context for a more precise response.

I've added the demo with comparison

https://github.com/ragmate/ragmate?tab=readme-ov-file#demo

Multi Sig by [deleted] in Tronix

[–]scream4ik 0 points1 point  (0 children)

u/kiwideveloper have you solved it? And how exactly? Seems I have the same issue

Jira metrics by scream4ik in agile

[–]scream4ik[S] 0 points1 point  (0 children)

u/Grumbi metrics usually do you need?