Golem SDK
Python SDK for creating Golem extensions. This includes adding new channels, providers, and other long-running processes.
Installation
This package is available on PyPI:
pip install golem-agent-sdk
Usage
Import as golem. Golem injects GOLEM_URL and GOLEM_TOKEN into the process. The wire protocol lives in Golem: docs/extensions.md.
The smallest extension registers, prints a line, and stays alive until it is stopped:
from golem import Extension
def hello(client, stop):
print("hello world")
stop.wait()
Extension.from_env("echo").task(hello).run()
Provider Extensions
A provider is a model backend. Golem calls your process for chat, structured output, and/or embeddings. Implement at least one of those methods; run() binds a loopback callback, registers, and heartbeats.
from golem import Extension, Message, Provider
class Echo(Provider):
def chat(self, model, messages, tools=None) -> Message:
return Message(role="assistant", content=messages[-1].content)
Extension.from_env("golem-echo").provider("echo", Echo()).run()
The id passed to provider() is the name used in Golem conf (default_model.provider or memory.embedding.provider). Override chat_structured or embed to advertise those routes. An embeddings-only class can omit chat:
class Embed(Provider):
def embed(self, model, texts):
return [[0.1] for _ in texts]
Extension.from_env("golem-embed").provider("local-embed", Embed()).run()
Channel Extensions
A channel feeds messages into Golem (Telegram, CLI, and so on). task() runs your loop; client.send() posts a turn and returns the assistant reply. capability() advertises the channel.
from golem import Extension
def cli(client, stop):
while not stop.is_set():
line = input("you: ").strip()
if not line:
continue
print(client.send("local", "cli", line))
(
Extension.from_env("golem-cli")
.capability({"kind": "channel", "id": "cli"})
.task(cli)
.run()
)
post_turn and stream_turn expose the same flow as SSE events (log, done, error).
Packaging Extensions
Ship the extension as a Python package. Golem takes the name and description from pyproject.toml, then runs the first [project.scripts] entry whose name matches the package:
[project]
name = "golem-openrouter"
description = "OpenRouter provider for Golem"
[project.scripts]
golem-openrouter = "golem_openrouter:main"
Development
Using uv is strongly recommended:
uv sync --dev
uv run pytest
Release files for golem-agent-sdk 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| golem_agent_sdk-0.1.1.tar.gz | 9.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| golem_agent_sdk-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.9 kB
Release files / golem_agent_sdk-0.1.1.tar.gz
| Download URL | golem_agent_sdk-0.1.1.tar.gz |
|---|---|
| Size | 9.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f8db9a78fd11df2645d4e1d5b4aa113b09611b791c80f3aa84e1202180de3872
|
|
BLAKE2b-256 checksum How to use checksums |
c2aa297c1d34a233c1e15325f96bf7a4a7e8c05e7b204a524374fa9e0b128dfd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / golem_agent_sdk-0.1.1-py3-none-any.whl
| Download URL | golem_agent_sdk-0.1.1-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
80d025dc457ee0ffcd77ae71bb6512975ba84f322e32cd448565f54661d24385
|
|
BLAKE2b-256 checksum How to use checksums |
e694e57e55e8c851b7c8c08db2876e808dc116e3c0b0bb9ad290175280dfaa47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|