Current collected state Current
Observed since 20 Oct, 23:18 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agentsdk-py
A lightweight Python SDK for building AI agents with tools, memory, and multi-agent pipelines — powered by Groq
A lightweight Python SDK for building AI agents with tool use, multi-agent graphs, persistence, and tracing.
pip install agentsdk # core
pip install agentsdk[otel] # + OpenTelemetry tracing
pip install agentsdk[dev] # + pytest / dotenv
import asyncio, os
from agentsdk import Agent, AgentConfig, GroqProvider
agent = Agent(
config=AgentConfig(
name="MyAgent",
system_prompt="You are a helpful assistant.",
),
llm=GroqProvider(api_key=os.environ["GROQ_API_KEY"]),
)
async def main():
result = await agent.run("What is the capital of France?")
print(result.output)
asyncio.run(main())
from agentsdk import tool, ToolRegistry, Agent, AgentConfig, GroqProvider
@tool
async def add(a: int, b: int) -> str:
"""Add two integers."""
return str(a + b)
registry = ToolRegistry()
registry.register(add)
agent = Agent(config=AgentConfig(name="Calc", system_prompt="Use tools."),
llm=GroqProvider(...), registry=registry)
from agentsdk import AgentNode, Edge, AgentGraph, GraphRunner
graph = AgentGraph()
graph.add_node(AgentNode("researcher", researcher_agent))
graph.add_node(AgentNode("writer", writer_agent))
graph.add_edge(Edge("researcher", "writer", data_map={"output": "input"}))
graph.set_entry("researcher"); graph.set_exit("writer")
result = await GraphRunner(graph).run({"input": "Explain black holes"})
from agentsdk import FileCheckpointStore, SessionManager, Agent
store = FileCheckpointStore(base_dir=".agentsdk/checkpoints")
session_mgr = SessionManager(store=store, agent_name="MyAgent")
agent = Agent(config=..., llm=..., session_manager=session_mgr)
# History is saved and reloaded automatically across runs:
await agent.run("My favourite language is Python.", session_id="user-001")
await agent.run("What language did I mention?", session_id="user-001")
# Fork a session to branch an agent run:
forked = await session_mgr.fork("user-001", "user-001-branch")
agentsdk[otel])from agentsdk.observability import SDKTracer, TracedLLMProvider, TracedAgent, print_trace
tracer = SDKTracer(service_name="myapp")
traced_llm = TracedLLMProvider(provider=GroqProvider(...), tracer=tracer)
agent = TracedAgent(config=..., llm=traced_llm, tracer=tracer)
result, ctx = await agent.run("Summarise the last quarter earnings.")
print_trace(ctx)
# ╔══ Trace: MyAgent ══════════════════════
# ║ Session : (none)
# ║ Trace ID : 6744d6eca33853c5bba0...
# ║ Duration : 3680ms
# ║ LLM calls : 2
# ║ Tool calls : 1
# ║ Tokens : 1292 in / 36 out
# ╚═════════════════════════════════════════
# Scaffold a new agent project
scaffold-agent new myproject
# Interactive REPL against any agent file
scaffold-agent run myproject/agents/main.py
# Inspect a saved checkpoint
scaffold-agent trace .agentsdk/checkpoints/MyAgent/user-001.json
# List all sessions for an agent
scaffold-agent list-sessions MyAgent
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.0 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27 | runtime |
aiofilesEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | aiofiles>=23.0 | runtime |
groqEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | groq>=0.9 | runtime |
typerEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | typer>=0.12 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | rich>=13.0 | runtime |
opentelemetry-apiEnvironment{
"extras": "",
"marker": "extra == \"otel\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-api>=1.24; extra == "otel" | runtime |
opentelemetry-sdkEnvironment{
"extras": "",
"marker": "extra == \"otel\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-sdk>=1.24; extra == "otel" | runtime |
chromadbEnvironment{
"extras": "",
"marker": "extra == \"rag\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | chromadb>=0.5; extra == "rag" | runtime |
sentence-transformersEnvironment{
"extras": "",
"marker": "extra == \"rag\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sentence-transformers>=3.0; extra == "rag" | runtime |
pypdfEnvironment{
"extras": "",
"marker": "extra == \"rag\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pypdf>=4.0; extra == "rag" | runtime |
PyGithubEnvironment{
"extras": "",
"marker": "extra == \"github\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | PyGithub>=2.0; extra == "github" | runtime |
beautifulsoup4Environment{
"extras": "",
"marker": "extra == \"scraping\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | beautifulsoup4>=4.12; extra == "scraping" | runtime |
aiosqliteEnvironment{
"extras": "",
"marker": "extra == \"sql\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | aiosqlite>=0.20; extra == "sql" | runtime |
asyncpgEnvironment{
"extras": "",
"marker": "extra == \"sql\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | asyncpg>=0.29; extra == "sql" | runtime |
beautifulsoup4Environment{
"extras": "",
"marker": "extra == \"all-tools\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | beautifulsoup4>=4.12; extra == "all-tools" | runtime |
aiosqliteEnvironment{
"extras": "",
"marker": "extra == \"all-tools\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | aiosqlite>=0.20; extra == "all-tools" | runtime |
asyncpgEnvironment{
"extras": "",
"marker": "extra == \"all-tools\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | asyncpg>=0.29; extra == "all-tools" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0; extra == "dev" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.23; extra == "dev" | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-dotenv>=1.0; extra == "dev" | runtime |
bdist_wheel · 55.62 KB · Python py3
sdist · 51.07 KB · Python source
Observed since 20 Oct, 23:18 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:6ba6903ecf3032a2e2b1ae7e8a70e78bdade6726100a553d62e5d89be6874a60