Framework-agnostic bridge between agent adapters and the Astropods messaging service
Project description
astropods-adapter-core
Framework-agnostic bridge between Python agents and the Astropods messaging service.
Installation
pip install astropods-adapter-core
Requires Python 3.10+.
Usage
If you're using a supported framework, use the pre-built adapter package instead (e.g. astropods-adapter-langchain). Use this package directly to connect a custom or unsupported framework.
Create a class with name, stream, and get_config, then call serve():
from astropods_adapter_core import StreamHooks, StreamOptions, serve
class MyAdapter:
name = "My Agent"
async def stream(self, prompt: str, hooks: StreamHooks, options: StreamOptions) -> None:
try:
hooks.on_chunk("Hello!")
hooks.on_finish()
except Exception as e:
hooks.on_error(e)
def get_config(self) -> dict:
return {"system_prompt": "You are a helpful assistant.", "tools": []}
serve(MyAdapter())
serve() blocks until SIGINT or SIGTERM. Under ast dev, GRPC_SERVER_ADDR is injected automatically.
API
AgentAdapter protocol
| Member | Description |
|---|---|
name: str |
Display name used in logs and registration |
async stream(prompt, hooks, options) |
Stream a response, invoking hooks as the agent progresses |
get_config() -> dict |
Return {"system_prompt": str, "tools": [...]} for playground display |
StreamHooks
Call these inside stream() as the agent produces output:
| Method | When to call |
|---|---|
on_chunk(text) |
Each text token or fragment from the LLM |
on_status_update({"status": "..."}) |
Agent state change — valid values: THINKING, SEARCHING, GENERATING, PROCESSING, ANALYZING, CUSTOM |
on_finish() |
Response complete — call exactly once per request |
on_error(exception) |
Error occurred — call instead of on_finish |
For CUSTOM status, include "custom_message" in the dict:
hooks.on_status_update({"status": "CUSTOM", "custom_message": "Fetching data..."})
StreamOptions
Per-request context passed to stream():
| Field | Description |
|---|---|
conversation_id |
Stable ID for the conversation thread |
user_id |
ID of the user who sent the message |
serve(adapter, options?)
Connects the adapter to the messaging service and blocks until shutdown.
from astropods_adapter_core import ServeOptions, serve
# Override the gRPC address (default: GRPC_SERVER_ADDR env var or localhost:9090)
serve(adapter, ServeOptions(server_address="astro-messaging:9090"))
MessagingBridge
serve() is a thin wrapper around MessagingBridge. Use it directly if you need lifecycle control:
import asyncio
from astropods_adapter_core import MessagingBridge
bridge = MessagingBridge(adapter)
asyncio.run(bridge.start())
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file astropods_adapter_core-0.3.0.tar.gz.
File metadata
- Download URL: astropods_adapter_core-0.3.0.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e5bbad1654ac2295fe70d06fc8938297025c6d3cbd18ef1ed77b5afb8eed05b
|
|
| MD5 |
d6f0f5cb5197b7e90931025df0f1841f
|
|
| BLAKE2b-256 |
f4f42257064aeb23c3739709516e17dabd0f4742a5e822e2bbcc44c47680561e
|
Provenance
The following attestation bundles were made for astropods_adapter_core-0.3.0.tar.gz:
Publisher:
publish-pypi-core.yml on astropods/adapters
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
astropods_adapter_core-0.3.0.tar.gz -
Subject digest:
9e5bbad1654ac2295fe70d06fc8938297025c6d3cbd18ef1ed77b5afb8eed05b - Sigstore transparency entry: 1328727106
- Sigstore integration time:
-
Permalink:
astropods/adapters@47fcd2fbcd1f97fc20684fe2e93c9c42bc4a6b6f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/astropods
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi-core.yml@47fcd2fbcd1f97fc20684fe2e93c9c42bc4a6b6f -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file astropods_adapter_core-0.3.0-py3-none-any.whl.
File metadata
- Download URL: astropods_adapter_core-0.3.0-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
385bff9995caa0d9752ff7776c8514702e0fbd8f22f6d2623fece94c80309034
|
|
| MD5 |
f8a28d9c2acf9725a11e4f520a14e666
|
|
| BLAKE2b-256 |
89c2408f83923cd981f99f2dadf47b3b4d999fbc935267e0c9057dba0aa75139
|
Provenance
The following attestation bundles were made for astropods_adapter_core-0.3.0-py3-none-any.whl:
Publisher:
publish-pypi-core.yml on astropods/adapters
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
astropods_adapter_core-0.3.0-py3-none-any.whl -
Subject digest:
385bff9995caa0d9752ff7776c8514702e0fbd8f22f6d2623fece94c80309034 - Sigstore transparency entry: 1328727166
- Sigstore integration time:
-
Permalink:
astropods/adapters@47fcd2fbcd1f97fc20684fe2e93c9c42bc4a6b6f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/astropods
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi-core.yml@47fcd2fbcd1f97fc20684fe2e93c9c42bc4a6b6f -
Trigger Event:
workflow_dispatch
-
Statement type: