Catalog PyPI
Back to packageRELEASE DETAILS

0.1.1

PyPI

adk-perseus-context

Deterministic live context for Google ADK agents — compiled by Perseus, injected as system instruction.

Published28 Jun 2026
Direct dependencies4
Transitive dependenciesNot calculated

README

Version 0.1.1 documentation

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?

ApproachIndex / embeddingsLLM round-tripOutput stabilityCoverage
Naive "dump everything"❌❌StableFull, but bloated
RAG / vector retrieval✅ requiredsometimesVaries per queryTop-k (can miss facts)
Perseus compile❌ none❌ noneByte-identicalFull, 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.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 4

Native requirements
4 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
google-adk
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
google-adk>=1.0.0runtime
perseus-ctx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
perseus-ctx>=1.0.10runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest; extra == "dev"runtime
pytest-asyncio
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest-asyncio; extra == "dev"runtime

Distribution files

2 collected
adk_perseus_context-0.1.1-py3-none-any.whl

bdist_wheel · 8.91 KB · Python py3

Source file
adk_perseus_context-0.1.1.tar.gz

sdist · 8.63 KB · Python source

Source file

Repository

PENDING
perseus-computing-llc/adk-perseus-context

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 19:37 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:baacf36a90d54807baafb440cb53e1648fff820f5f39c19fad4a3f3086da5a3b

Other collected versions

View all collected versions →