Skip to main content

dspy-goodmem

PyPI Python License

GoodMem integration for DSPy.

GoodMem is a self-hosted RAG system which handles the full retrieval pipeline: ingestion, chunking, embedding, storage, hybrid search, reranking, and summarization. This package wraps it for DSPy so you can:

  • Plug GoodMemRM into any DSPy pipeline through the standard dspy.Retrieve interface.
  • Hand GoodMem's full memory lifecycle to a dspy.ReAct agent as callable tools.
  • Use GoodMemClient directly when you want control over the REST API.

Install

pip install dspy-goodmem

A running GoodMem server is required. See the Quick Start for deployment instructions.

Retriever usage

import dspy
from dspy_goodmem import GoodMemRM

dspy.configure(lm=dspy.LM("openai/gpt-5-mini"))

rm = GoodMemRM(
    space_ids=["<your-space-uuid>"],
    api_key="gm_...",
    base_url="https://localhost:8080",
    k=3,
    verify_ssl=False,  # localhost self-signed cert; remove for a server with a valid TLS cert
)

class RAG(dspy.Module):
    def __init__(self, retriever):
        super().__init__()
        self.retriever = retriever
        self.respond = dspy.ChainOfThought("context, question -> response")

    def forward(self, question):
        passages = self.retriever(question)
        context = "\n\n".join(p["long_text"] for p in passages)
        return self.respond(context=context, question=question)

rag = RAG(retriever=rm)
print(rag(question="Summarize what's in the knowledge base.").response)

Agent usage

make_goodmem_tools returns 11 plain callables covering every GoodMem operation: full CRUD for spaces, create/list/get/delete for memories, plus semantic retrieval and embedder discovery. Wrap them in dspy.Tool and a dspy.ReAct agent can manage its own memory end to end instead of only reading from it.

import dspy
from dspy_goodmem import GoodMemClient, make_goodmem_tools

dspy.configure(lm=dspy.LM("openai/gpt-5-mini"))

client = GoodMemClient(
    api_key="gm_...",
    base_url="https://localhost:8080",
    verify_ssl=False,  # localhost self-signed cert; remove for a server with a valid TLS cert
)
tools = [dspy.Tool(fn) for fn in make_goodmem_tools(client)]

agent = dspy.ReAct("task -> result", tools=tools)
agent(task="Remember that the user prefers Python over Java, then recall their language preferences.")

What's exported

Export Purpose
GoodMemRM dspy.Retrieve subclass. Returns dotdict({"long_text": ...}) passages.
GoodMemClient HTTP wrapper around the GoodMem REST API.
make_goodmem_tools Factory that produces typed callables for dspy.Tool and dspy.ReAct.

Examples

Two end-to-end scripts live in examples/:

  • rag_pipeline_example.py runs GoodMemRM through ChainOfThought and scores the pipeline with SemanticF1.
  • react_agent_example.py exercises the ReAct tools across four scenarios: multi-turn conversation, cross-agent persistence, metadata-tagged filtering, and trajectory inspection.

Both scripts load a .env file at the repo root if python-dotenv is installed (pip install dspy-goodmem[examples]). Otherwise they read environment variables directly.

export OPENAI_API_KEY="sk-..."
export GOODMEM_API_KEY="gm_..."
export GOODMEM_BASE_URL="https://localhost:8080"

python examples/rag_pipeline_example.py
python examples/react_agent_example.py

Why GoodMem

GoodMem does the heavy lifting server side, so you don't ship an embedding pipeline with your DSPy app:

  • Supports OpenAI, Voyage, Cohere, vLLM, TEI, and Llama.cpp as embedders, including fully local models.
  • Hybrid search combining dense and sparse embedders, with configurable weights per space.
  • Per-space chunking config: size, overlap, separators.
  • Native ingestion for plain text, PDFs, Word documents, images, spreadsheets, and other formats.
  • Metadata filters with JSONPath extraction, regex, and date ranges.
  • Reranking and auto-summary pipelines configurable per request.
  • Deep Research mode runs multiple iterative search rounds with query refinement for complex and open-ended topics.

Everything runs on your own infrastructure, so documents and queries never leave your network.

Development

pip install -e ".[dev]"
pytest tests/ -v

63 mocked unit tests cover the client, retriever, and tool factory. No live server required.

License

MIT. See LICENSE.

Metadata

Release files for dspy-goodmem 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dspy-goodmem 0.1.1
File Size Uploaded
dspy_goodmem-0.1.1.tar.gz 29.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dspy-goodmem 0.1.1
File Interpreter ABI Platform
dspy_goodmem-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 46.4 kB

Release files / dspy_goodmem-0.1.1.tar.gz

Download URL dspy_goodmem-0.1.1.tar.gz
Size 29.9 kB
Tags Source
SHA-256 checksum
How to use checksums
795bec089025ee73a2cd73421c33940388e55363737cc2221a8bfff18d25a9e3
BLAKE2b-256 checksum
How to use checksums
3ec5f7f61099cb35ec6f91bc52025bbb3bd301620e4f1198312d18494bb3b25f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / dspy_goodmem-0.1.1-py3-none-any.whl

Download URL dspy_goodmem-0.1.1-py3-none-any.whl
Size 16.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76fb439a5ec1c40a8e154753f6bdc69a1f85ad9ba19f93af863f8cc4e1af39b4
BLAKE2b-256 checksum
How to use checksums
a11cf63773aaf0a2c6c1f506c599f228364f452e12f409ce1c64a3b396034cbd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page