Skip to Content
3 Client Basics

Last Updated: 3/5/2026


Client Basics

Learn how to connect to a running Pie server and interact with inferlets.

Prerequisites

  • Pie server running (pie serve)
  • Client library installed

Python Client

Installation

pip install pie-client

Basic Usage

import asyncio from pie import PieClient async def main(): async with PieClient("ws://127.0.0.1:8080") as client: # Authenticate (required even if auth is disabled) await client.authenticate("username") # Launch an inferlet from the registry instance = await client.launch_instance_from_registry( "text-completion", ["--prompt", "Hello, world!"] ) # Receive output while True: event, message = await instance.recv() if event.name == "Stdout": print(message, end="", flush=True) elif event.name == "Completed": break elif event.name == "Exception": print(f"Error: {message}") break asyncio.run(main())

Sending Messages

For interactive inferlets:

async with PieClient("ws://127.0.0.1:8080") as client: await client.authenticate("username") instance = await client.launch_instance_from_registry("chat") # Send a message await instance.send("What is the capital of France?") # Receive response event, response = await instance.recv() print(response)

Upload Custom Inferlet

async with PieClient("ws://127.0.0.1:8080") as client: await client.authenticate("username") # Upload the Wasm binary with open("my_inferlet.wasm", "rb") as f: await client.upload_program(f.read()) # Get the program hash (blake3) import hashlib program_hash = "..." # Compute blake3 hash # Launch instance = await client.launch_instance(program_hash, ["--arg", "value"])

JavaScript Client

Installation

npm install @pie-project/client

Basic Usage

import { PieClient } from '@pie-project/client'; const client = new PieClient('ws://127.0.0.1:8080'); async function main() { await client.connect(); await client.authenticate('username'); const instance = await client.launchInstanceFromRegistry( 'text-completion', ['--prompt', 'Hello, world!'] ); while (true) { const { event, msg } = await instance.recv(); if (event === 'Stdout') { process.stdout.write(msg); } else if (event === 'Completed') { break; } else if (event === 'Exception') { console.error('Error:', msg); break; } } await client.close(); } main();

Sending Messages

const instance = await client.launchInstanceFromRegistry('chat'); // Send a message await instance.send('What is 2 + 2?'); // Receive response const { event, msg } = await instance.recv(); console.log(msg);

Event Types

Both clients receive events from inferlets:

EventDescription
MessageText message from the inferlet
StdoutStreaming stdout output
StderrStreaming stderr output
BlobBinary data
CompletedInferlet finished successfully
AbortedInferlet was aborted
ExceptionInferlet raised an exception
ServerErrorServer-side error
OutOfResourcesResource limit reached

Authentication

Pie supports public key authentication:

from pie import PieClient, ParsedPrivateKey key = ParsedPrivateKey.from_file("~/.ssh/id_ed25519") async with PieClient("ws://127.0.0.1:8080") as client: await client.authenticate("username", key)

For development with --no-auth:

await client.authenticate("any_username") # No key needed

Next Steps