pendra
v0.3.0
Published
Official TypeScript SDK for the Pendra LLM inference API
Maintainers
Readme
Pendra TypeScript SDK
Official TypeScript/JavaScript SDK for the Pendra LLM inference API. Mirrors the OpenAI SDK interface for easy migration.
Requires Node.js 18+ (uses native fetch). Zero runtime dependencies.
Installation
npm install pendraQuick Start
import Pendra from 'pendra';
const client = new Pendra({
apiKey: 'pdr_sk_...', // or set PENDRA_API_KEY env var
});
const response = await client.chat.completions.create({
model: 'llama3.2',
messages: [{ role: 'user', content: 'Hello!' }],
});
console.log(response.choices[0].message.content);Streaming
const stream = await client.chat.completions.create({
model: 'llama3.2',
messages: [{ role: 'user', content: 'Write a poem' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}List Models
const models = await client.models.list();
models.forEach((m) => console.log(m.id));Image Generation
Generate images from a text prompt. Returns base64-encoded PNGs by default.
import { writeFileSync } from 'node:fs';
const response = await client.images.generations.create({
model: 'x/z-image-turbo',
prompt: 'A red London double-decker bus at sunset',
size: '1024x1024',
});
const b64 = response.data[0].b64_json;
if (b64) {
writeFileSync('bus.png', Buffer.from(b64, 'base64'));
}Image generation is non-streaming — the response is returned as a single JSON payload once the worker finishes.
Configuration
| Option | Env var | Default |
| --------- | ---------------- | -------------------------- |
| apiKey | PENDRA_API_KEY | — |
| baseURL | — | https://api.pendra.ai |
| timeout | — | 120000 (ms) |
Migrating from OpenAI
- import OpenAI from 'openai';
- const client = new OpenAI({ apiKey: '...' });
+ import Pendra from 'pendra';
+ const client = new Pendra({ apiKey: 'pdr_sk_...' });
// Everything else stays the same
const res = await client.chat.completions.create({
model: 'llama3.2',
messages: [{ role: 'user', content: 'Hi' }],
});Error Handling
import { AuthenticationError, RateLimitError, APIStatusError } from 'pendra';
try {
await client.chat.completions.create({ ... });
} catch (err) {
if (err instanceof AuthenticationError) {
console.error('Bad API key');
} else if (err instanceof RateLimitError) {
console.error('Slow down');
} else if (err instanceof APIStatusError) {
console.error(`API error ${err.status}: ${err.message}`);
}
}Self-Hosted Workers
Run inference on your own GPUs with a single command. Your prompts and completions never leave your infrastructure.
curl -fsSL https://get.pendra.ai/worker | bashSee the Workers documentation for full setup instructions.
Licence
Apache-2.0
