Skip to main content

pagent

pagent (English)

CI Coverage License: MIT

Language: 中文 | English · Docs · For agents · llms.txt

pagent is a small async Python library for an Agent + tools loop over OpenAI-compatible Chat Completions. Good for scripts, experiments, and teaching—transparent message history, your own tools.

Documentation

https://synclionpaw.github.io/pagent/ — install, quick start, tools, events, Wire, providers.

Install

Requires Python 3.11+.

pip

pip install pagent
pip install "pagent[search]"   # optional web_search tool

uv

uv is a fast Python package and project manager (official docs).

uv pip install pagent
uv pip install "pagent[search]"

# or in a uv-managed project
uv add pagent
uv add "pagent[search]"

uvx (terminal REPL)

export DEEPSEEK_API_KEY="your-key"
uvx pagent
uvx pagent --thread-id demo

conda

conda activate your-env
pip install pagent
pip install "pagent[search]"

Conda envs usually install PyPI packages with pip inside the activated environment. Check conda-forge if you prefer a conda package when available.

Quick start

import asyncio
import os

from pagent import Agent, LLM, Session, tool


@tool()
def get_weather(city: str) -> str:
    """Return a fake weather summary for the city."""
    return f"It's sunny in {city} today."


async def main() -> None:
    if not os.getenv("OPENAI_API_KEY"):
        raise SystemExit("Please set OPENAI_API_KEY first.")

    agent = Agent(
        llm=LLM("gpt-4o-mini"),
        session=Session("You are a concise assistant. Use tools when needed."),
        tools=[get_weather],
        max_turns=24,
    )

    result = await agent.run("What's the weather in Xiamen?")
    print(result.content)
    print(agent.stats)


asyncio.run(main())

run() returns RunEnd; use .content for the answer.

Streaming & events

One agent timeline — pick an API by consumer (not two different event systems):

API You get Best for
agent.run(prompt) Final RunEnd No streaming
agent.arun(prompt) Answer text str Simple typing effect in scripts
agent.arun_events(prompt) Python Event dataclasses In-process Python: CLI, services, match / types
agent.arun_wire(prompt) NDJSON lines (JSON-RPC 2.0) Cross-language / frontend: SSE, WebSocket, TS switch (method)

Wire serializes the same events as native Event; see docs/events.md and docs/wire.md.

Minimal event consumer (build your own UI or logs):

import asyncio

from pagent import (
    Agent,
    LLM,
    RunEnd,
    Session,
    TextDelta,
    ToolCallBegin,
    ToolResult,
)


async def main():
    agent = Agent(LLM("gpt-4o-mini"), Session("You are helpful."), tools=[])

    async for event in agent.arun_events("What is 2 + 2?"):
        if isinstance(event, TextDelta):
            print(event.text, end="", flush=True)
        elif isinstance(event, ToolCallBegin):
            print(f"\n[calling {event.name}]", flush=True)
        elif isinstance(event, ToolResult):
            print(f" {event.content}", flush=True)
        elif isinstance(event, RunEnd):
            print(f"\n\n(done, {event.content!r})")


asyncio.run(main())

Common events: TextDelta (answer stream), ReasoningDelta (model thinking, if supported), ToolCallBegin / ToolResult, RunEnd (final result with .content and .reasoning_content).

Full list: docs/events.md. Frontend / JSON: docs/wire.md — each line is {"jsonrpc":"2.0","method":"TextDelta","params":{...}}.

async for line in agent.arun_wire("Hello"):
    # send `line` over SSE / WebSocket (already ends with \n)
    ...

Runnable demos are grouped under examples/; start with examples/README.md.

Models & API keys

Class Env var
LLM("gpt-4o-mini") OPENAI_API_KEY
DeepSeek() DEEPSEEK_API_KEY
Ollama(...), Vllm, Sglang optional provider keys
from pagent import DeepSeek, Ollama

llm = DeepSeek("deepseek-v4-flash")
llm = Ollama("llama3.2")

Server must expose OpenAI-compatible /v1/chat/completions.

Examples

Command Description
uv run pagent Interactive pagentv4 terminal app
uv run python -m examples.pagentv4.thread_based.conversation_only Thread-based conversation persistence
uv run python -m examples.pagentv4.thread_based.code_runner CodeRunner with sandbox tools
uv run python -m examples.pagentv4.runner.return_types text / message / acp / event projections
uv run --with fastapi --with uvicorn python examples/wire_browser/server.py Wire NDJSON + browser UI

Guide: docs/reasoning.md. Full-stack wire demo: examples/wire_browser/.

export DEEPSEEK_API_KEY="your-key"
uv run python -m examples.pagentv4.thread_based.conversation_only

Optional built-in tools

from pagent import Agent, LLM, Session, web_search

agent = Agent(LLM("gpt-4o-mini"), Session("..."), tools=[web_search])

See clock, region in pagent.defaults.

Notes

  • Requires an OpenAI Chat Completions–compatible API.
  • A minimal embeddable loop—not a full coding-agent product with file edit/shell.
  • Development & internals: docs/development.md

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pagent-0.7.23.tar.gz (145.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pagent-0.7.23-py3-none-any.whl (190.7 kB view details)

Uploaded Python 3

File details

Details for the file pagent-0.7.23.tar.gz.

File metadata

  • Download URL: pagent-0.7.23.tar.gz
  • Upload date:
  • Size: 145.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pagent-0.7.23.tar.gz
Algorithm Hash digest
SHA256 cb064fe4777a4ff06d203ae05f472d183bc24ba2defdd1d684daab8f750f5763
MD5 9ea375472f2a488652c478805930ca05
BLAKE2b-256 1c9343bede092a610e0674aca3d208ce1847c185066a86c4eb1e9d9cab231e25

See more details on using hashes here.

Provenance

The following attestation bundles were made for pagent-0.7.23.tar.gz:

Publisher: publish.yml on SyncLionPaw/pagent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pagent-0.7.23-py3-none-any.whl.

File metadata

  • Download URL: pagent-0.7.23-py3-none-any.whl
  • Upload date:
  • Size: 190.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pagent-0.7.23-py3-none-any.whl
Algorithm Hash digest
SHA256 a9c62c43561a9482ceb5ed0b417ef1d40e91e52bea6fa0169c757c11722c20f8
MD5 b6ce58bfa595d13bb5c27a76cda36f19
BLAKE2b-256 78b41646c6fe96f2c93631e477becd582e18255bf6d57134b8f523a2c85d2de1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pagent-0.7.23-py3-none-any.whl:

Publisher: publish.yml on SyncLionPaw/pagent

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.7.30

2 files

0.7.24

2 files

This release

0.7.23 This release

2 files

0.7.22

2 files

0.7.20

2 files

0.7.12

2 files

0.7.10

2 files

0.7.8

2 files

0.7.7

2 files

0.7.5

2 files

0.6.1

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 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