Skip to main content

README.md

# pig_protocol

Shared, provider-neutral message types and OpenAI-compatible codecs for the
[`pig`](https://github.com/kasuboski/pig) agent ecosystem.

`pig_protocol` provides the protocol boundary used by `pig` and `pig_proxy`:

- normalized messages, tool calls, inference metadata, stop reasons, and errors
- request builders and response parsers for Chat Completions and Responses APIs
- authentication helpers for standard API keys and Codex OAuth tokens
- incremental Server-Sent Events parsing
- transport types for integrating custom HTTP clients

Most codecs and parsers are pure. Network access is isolated behind transport
functions, with a `gleam_httpc` implementation available when needed.

## Installation

Add the package to a Gleam project:

```sh
gleam add pig_protocol
```

## Usage

Build a Chat Completions request and parse its response:

```gleam
import pig_protocol/codec/chat
import pig_protocol/message

pub fn request_body() -> String {
  chat.build_request_body(
    messages: [
      message.System("You are a helpful assistant."),
      message.User("What is 7 plus 3?"),
    ],
    tools: [],
    model: "gpt-4o-mini",
  )
}

pub fn parse_response(body: String) {
  chat.parse_response(body)
}
```

The Responses API has the same pure request/response shape through
`pig_protocol/codec/responses`.

For direct HTTP calls, construct a `pig_protocol/transport.HttpRequest` and use
`pig_protocol/transport/httpc.transport`, or provide your own function matching
`pig_protocol/transport.Transport`.

## Modules

| Module | Purpose |
|---|---|
| `pig_protocol/message` | Unified conversation messages and tool calls |
| `pig_protocol/inference` | Provider response values and metadata |
| `pig_protocol/error` | Normalized provider errors |
| `pig_protocol/stop_reason` | Provider-neutral completion reasons |
| `pig_protocol/tool_definition` | JSON Schema-backed tool definitions |
| `pig_protocol/codec/chat` | Chat Completions request and response codecs |
| `pig_protocol/codec/responses` | Responses API and Codex codecs |
| `pig_protocol/sse` | Incremental SSE frame and event parsing |
| `pig_protocol/auth` | Standard API and Codex OAuth endpoint helpers |
| `pig_protocol/transport` | HTTP transport interfaces |
| `pig_protocol/transport/httpc` | `gleam_httpc` transport implementation |

## Development

From the repository root:

```sh
cd packages/pig_protocol
gleam test
gleam build --warnings-as-errors
```

Live integration tests are disabled by default. Run them through the repository's
integration task with the required provider credentials configured:

```sh
mise run test-integration-protocol
```

## License

Apache-2.0