Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

ADK Perseus Context

Deterministic live context for Google ADK agents — compiled by Perseus and injected straight into your agent's system instruction.

Perseus is an open-source (MIT) context compiler. It resolves directives like @file, @search, and @memory into one deterministic, byte-stable context string at inference time — no retrieval index, no embeddings, no LLM round-trip. This package wires that compiler into ADK as a first-class extension point.

Perseus is not memory or RAG. It assembles context deterministically. For persistent cross-session agent memory, see the companion package adk-mimir-memory — Perseus and Mimir compose ("own your context" + "own your memory").

Why a context compiler?

Approach Index / embeddings LLM round-trip Output stability Coverage
Naive "dump everything" ❌ ❌ Stable Full, but bloated
RAG / vector retrieval ✅ required sometimes Varies per query Top-k (can miss facts)
Perseus compile ❌ none ❌ none Byte-identical Full, deterministic

The edge is determinism + full coverage at a fixed compiled size — the same inputs always produce the same context, with no retrieval tax. Less-but-better context is also a measurable quality win, not just a cost one.

Installation

pip install adk-perseus-context

Requires Python 3.10+, google-adk>=1.0.0, and perseus-ctx>=1.0.10 (the Context Adapter SDK). Both are pulled in automatically.

Quick start

Runner-wide (plugin)

Inject one context across every agent driven by a Runner:

from google.adk.agents import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from adk_perseus_context import PerseusContextPlugin

agent = Agent(name="assistant", model="gemini-flash-latest", instruction="Help the user.")

runner = Runner(
    agent=agent,
    app_name="my_app",
    session_service=InMemorySessionService(),
    plugins=[PerseusContextPlugin("context.perseus")],  # file path or inline @perseus source
)

Single agent (callback)

from google.adk.agents import Agent
from adk_perseus_context import perseus_before_model_callback

agent = Agent(
    name="assistant",
    model="gemini-flash-latest",
    instruction="Help the user.",
    before_model_callback=perseus_before_model_callback("context.perseus"),
)

Either way, the compiled Perseus context is appended to the request's system instruction (via ADK's LlmRequest.append_instructions) on every model call.

Per-session context

Override the source per session through session state — useful when each user or task needs a different workspace or directive set:

session = await runner.session_service.create_session(
    app_name="my_app",
    user_id="user",
    state={
        "_perseus_source": "@perseus\n@file AGENTS.md\n@memory deployment",
        "_perseus_workspace": "/path/to/project",
    },
)

State keys are exported as adk_perseus_context.STATE_SOURCE and STATE_WORKSPACE. A per-session source takes precedence over the static one.

Inline vs. file sources

source is either a path to a .perseus file or an inline source string that starts with @perseus:

PerseusContextPlugin("@perseus\n\nYou are a concise assistant. @file README.md")

For a file source, the workspace defaults to the file's directory so relative @include / @file paths resolve.

Fail-open by default

If Perseus is missing or a compile raises, the request proceeds without injected context and a warning is logged, so a context problem never takes your agent down. Pass fail_open=False to make such errors propagate instead.

How it works

                       before_model_callback
┌─────────────┐     ┌─────────────────────────┐     ┌──────────────┐
│  ADK Runner │ ──▶ │  PerseusContextPlugin    │ ──▶ │  LlmRequest  │
│  / Agent    │     │  perseus.compile_context │     │  system_     │
└─────────────┘     │  (deterministic, local)  │     │  instruction │
                    └─────────────────────────┘     └──────────────┘

The plugin/callback calls perseus.compile_context(source) — Perseus's Context Adapter SDK "resolve once" primitive — and appends the result to the system instruction. Perseus owns deterministic assembly; ADK owns orchestration.

Compose with Mimir

Perseus and Mimir are designed to compose: Mimir provides persistent, encrypted memory; Perseus pulls hot memory into a compiled context via @memory directives. Use adk-mimir-memory for the memory backend and this package for the context layer.

License

MIT — see Perseus for the backing context engine.

Release files for adk-perseus-context 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 adk-perseus-context 0.1.1
File Size Uploaded
adk_perseus_context-0.1.1.tar.gz 8.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for adk-perseus-context 0.1.1
File Interpreter ABI Platform
adk_perseus_context-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.0 kB

Release files / adk_perseus_context-0.1.1.tar.gz

Download URL adk_perseus_context-0.1.1.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
7915576005e118a43af5b0c6c38c66cbd35e5f255f1bbd4157ba61fa1ed02a62
BLAKE2b-256 checksum
How to use checksums
cc35b4aa230e52dd67310e305ad88b1a526a0969e12f0f796e8fc073c6fa2d8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 28, 2026.

Transparency log

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

Download URL adk_perseus_context-0.1.1-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fef9f6953433fae56b695851770968492714e754665dcbba389da1afa0660714
BLAKE2b-256 checksum
How to use checksums
3097990ec7a84dc963a49919e8031673f4b6ac902f0cfc92b81a5543c18e3edc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

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