Initialization & the core calls

Install the SDK, call init once, then use the two calls you'll reach for everywhere: get to fetch a prompt by name, and compile to fill its variables locally.

Two calls carry the whole workflow: get fetches a prompt by name and hands you the entire thing, and compile fills its variables locally and returns a ready-to-send payload. Everything else is configuration. This page gets you from install to a real provider call.

Install

npm install trodo-node
pip install trodo-python

Initialize once

Call init once at startup with your site id. Every prompt method lives on the singleton afterward — you don't pass credentials again.

import trodo from 'trodo-node';

trodo.init({
  siteId: process.env.TRODO_SITE_ID!,
  // apiBase: 'https://sdkapi.trodo.ai',  // default
  // timeout: 5000,
  // retries: 2,
  // debug: false,
});
import trodo

trodo.init(
    site_id=os.environ["TRODO_SITE_ID"],
    # api_base="https://sdkapi.trodo.ai",  # default
    # timeout=5000,
    # retries=2,
    # debug=False,
)
OptionDefaultNotes
siteId / site_idRequired. Identifies and authenticates your team.
apiBase / api_basehttps://sdkapi.trodo.aiOverride to point at a self-hosted or staging API.
timeout5000Default per-request timeout in ms.
retries2Default network retries before falling back.
debugfalseLog resolution and cache decisions.

get — fetch the whole prompt

get resolves a prompt by name and returns a ManagedPrompt: its messages (still holding {{vars}}), model config, tools, output format, and variable declarations. By default it follows the production label; pin a specific label or version when you need to.

const prompt = await trodo.prompts.get('refund-agent');
// prompt.messages, prompt.model, prompt.tools, prompt.response_format, prompt.variables
prompt = trodo.get_prompt("refund-agent")
# prompt.messages, prompt.model, prompt.tools, prompt.response_format, prompt.variables

See Version control for label and version resolution, and Caching & availability for the fallback and TTL options that keep this call resilient.

compile — fill the variables locally

compile runs locally, with no network call. It renders only the messages — filling every {{var}} and injecting any placeholder message-lists — and passes model, tools, and response_format through unchanged. It returns a CompiledPrompt of { messages, model, tools, response_format }.

const { messages, model, tools, response_format } = prompt.compile({
  company: 'Acme',
  question: 'where is my order?',
});
compiled = prompt.compile(
    company="Acme",
    question="where is my order?",
)
# compiled.messages, compiled.model, compiled.tools, compiled.response_format

A missing value is never an error — it renders the variable's declared default, or empty. Passing a variable the prompt does not declare throws CompileError, listing every offending key, before any model call. See Variables & templating.

End to end

Init, fetch, compile, and hand the result to your provider. The model config is a versioned recommendation — read model.model and pass it to your client yourself.

import trodo from 'trodo-node';
import OpenAI from 'openai';

trodo.init({ siteId: process.env.TRODO_SITE_ID! });
const openai = new OpenAI();

const prompt = await trodo.prompts.get('refund-agent');

const { messages, model } = prompt.compile({
  company: 'Acme',
  question: 'where is my order?',
});

const answer = await openai.chat.completions.create({
  model: model.model ?? 'gpt-4o',
  temperature: model.temperature ?? 0.2,
  messages,
});
import os, trodo
from openai import OpenAI

trodo.init(site_id=os.environ["TRODO_SITE_ID"])
openai = OpenAI()

prompt = trodo.get_prompt("refund-agent")

compiled = prompt.compile(
    company="Acme",
    question="where is my order?",
)

answer = openai.chat.completions.create(
    model=compiled.model.get("model", "gpt-4o"),
    temperature=compiled.model.get("temperature", 0.2),
    messages=compiled.messages,
)

compile() never calls a model. It renders messages and returns the stored model / tools / response_format for you to pass to your provider — it's a versioned recommendation, not a hosted call.

Two more calls

list returns lightweight summaries of every prompt on your team — { name, description, version, labels, updatedAt } — with no message content. It returns [] on error rather than throwing, so it's safe to call on a dashboard route.

const prompts = await trodo.prompts.list();
prompts = trodo.list_prompts()

renderTemplate exposes the same rendering engine compile uses, standalone — for reusing the exact production rendering on a string you already have. It's strict by default (an unknown variable raises); pass strict: false / strict=False to render unknowns as empty.

import { renderTemplate } from 'trodo-node';

renderTemplate('Hi {{name}}', { name: 'Ada' });        // 'Hi Ada'
renderTemplate('Hi {{name}}', {}, { strict: false });   // 'Hi '
from trodo import render_template

render_template("Hi {{name}}", name="Ada")        # 'Hi Ada'
render_template("Hi {{name}}", strict=False)       # 'Hi '

Where to go next

On this page