How to Save a Graphify Query Result: Complete API and CLI Guide
Use graphify.ingest.save_query_result to persist query outcomes as memory documents, enabling downstream agents like reflect and watch to retrieve and analyze previous results.
When building pipelines with Graphify-Labs/graphify, persisting query outcomes is essential for multi-agent workflows. The save_query_result function in graphify/ingest.py provides the canonical mechanism to store question-answer pairs alongside metadata, making them discoverable for future retrieval and reflection.
Understanding the save_query_result API
The save_query_result function orchestrates four distinct operations to ensure reliable persistence of query results.
Input Validation
According to the source code in graphify/ingest.py, the function first validates that the question and answer parameters are present. It also verifies that any supplied source_nodes parameter is iterable, preventing runtime errors during downstream processing.
Memory Payload Composition
The function constructs a structured dictionary containing:
question– The original user promptanswer– The LLM-generated response or manually supplied stringoutcome– Classification value (useful,dead_end,great, etc.) defaulting to"useful"as verified intests/test_ingest.pysource_nodes– Optional list of contributing node IDsquery_type– Optional tag (e.g.,"path_query"or"semantic_query")- Automatic timestamps and provenance metadata
File Persistence and Indexing
The persistence layer generates a unique filename using a hash of the question/answer content, ensuring idempotency. The document writes as JSON or YAML to the specified memory directory (e.g., tmp_path / "memory"). After writing, Graphify updates its internal index (graphify.store) so that subsequent graphify query or graphify reflect commands can locate the result without filesystem scanning.
Programmatic Usage
Import save_query_result from graphify.ingest to save results within Python applications:
from pathlib import Path
from graphify.ingest import save_query_result
mem_dir = Path("/tmp/my-graphify-memory")
mem_dir.mkdir(parents=True, exist_ok=True)
doc_path = save_query_result(
question="How does attention work?",
answer="Attention lets the model focus on relevant tokens …",
mem=mem_dir,
outcome="useful", # optional – defaults to "useful"
source_nodes=["node-42", "node-87"],
query_type="semantic_query",
)
print(f"Saved result → {doc_path}")
This call creates a file similar to .../memory/0c23f4d5.json and immediately updates the store index.
Using the CLI
The Graphify CLI exposes identical functionality through the save-result command, forwarding arguments directly to the same underlying function:
graphify save-result \
--question "What is the capital of France?" \
--answer "Paris" \
--outcome useful \
--memory /home/user/.graphify/memory
This guarantees identical behavior between interactive CLI usage and programmatic Python consumption.
Retrieving Saved Results
Use the symmetrical load_query_result function to access persisted documents:
from graphify.ingest import load_query_result
doc = load_query_result(mem_dir / "0c23f4d5.json")
print(doc["answer"]) # → "Attention lets the model …"
The loader returns the complete memory payload, allowing agents to analyze previous outcomes or build cumulative knowledge bases.
Key Implementation Files
The save functionality spans several critical files in the repository:
graphify/ingest.py– Core implementation ofsave_query_resulthandling validation, payload construction, and file I/Otests/test_ingest.py– Test suite confirming correct behavior, outcome handling, and edge-case validationtests/test_reflect.py– Integration examples showing how thereflectcommand consumes saved resultsgraphify/cli.py– CLI entry point wiringsave-resultarguments to the core API
Summary
- Primary API:
graphify.ingest.save_query_resultvalidates inputs, builds structured payloads, and persists to hashed filenames - Storage format: JSON or YAML documents in a configurable memory directory with automatic index updates
- CLI equivalent:
graphify save-resultcommand mirrors the Python API exactly - Retrieval: Use
load_query_resultto access saved documents programmatically - Integration: Saved results feed directly into
graphify reflectandwatchagents for downstream analysis
Frequently Asked Questions
What file format does Graphify use to save query results?
Graphify writes memory documents as either JSON or YAML files, depending on configuration. The files reside in the memory directory you specify (e.g., /home/user/.graphify/memory) and contain complete query metadata including timestamps, source nodes, and outcome classifications.
How does Graphify ensure idempotency when saving results?
The system generates unique filenames by hashing the question and answer content. This deterministic approach prevents duplicate files when the same query result is saved multiple times, while the internal index in graphify.store maintains the latest reference.
Can I customize the memory directory location?
Yes. Both the save_query_result function and the CLI accept a mem or --memory parameter specifying the target directory. The function automatically creates the directory structure if it does not exist, making it safe to use ephemeral or persistent storage paths.
How do other agents access saved query results?
After persistence, Graphify updates its internal store index, enabling agents like reflect (demonstrated in tests/test_reflect.py) to locate results without scanning the filesystem. Agents can also use load_query_result with specific file paths to retrieve individual documents for analysis or enrichment.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →