Skip to main content

TypeScript Client Setup

The AgentMark client is configured in agentmark.client.ts. It connects your prompts to AI models, tools, evaluations, and prompt loading. This file is auto-generated by npm create agentmark@latest — you can customize it after setup.

Choose Your Adapter

npm install @agentmark-ai/ai-sdk-v5-adapter @agentmark-ai/loader-api @ai-sdk/openai
agentmark.client.ts
import {
  createAgentMarkClient,
  VercelAIModelRegistry,
} from "@agentmark-ai/ai-sdk-v5-adapter";
import { ApiLoader } from "@agentmark-ai/loader-api";
import { openai } from "@ai-sdk/openai";

const loader =
  process.env.NODE_ENV === "development"
    ? ApiLoader.local({
        baseUrl: process.env.AGENTMARK_BASE_URL || "http://localhost:9418",
      })
    : ApiLoader.cloud({
        apiKey: process.env.AGENTMARK_API_KEY!,
        appId: process.env.AGENTMARK_APP_ID!,
      });

const modelRegistry = new VercelAIModelRegistry()
  .registerModels(["gpt-4o", "gpt-4o-mini"], (name) => openai(name))
  .registerModels(["dall-e-3"], (name) => openai.image(name))
  .registerModels(["tts-1-hd"], (name) => openai.speech(name));

export const client = createAgentMarkClient({
  loader,
  modelRegistry,
});
Use with Vercel AI SDK functions: generateText(), generateObject(), streamText(), streamObject().

Model Registry

Register models by name, mapping them to provider-specific constructors:
const modelRegistry = new VercelAIModelRegistry()
  // Text models
  .registerModels(["gpt-4o", "gpt-4o-mini"], (name) => openai(name))
  // Image models
  .registerModels(["dall-e-3"], (name) => openai.image(name))
  // Speech models
  .registerModels(["tts-1-hd"], (name) => openai.speech(name));
Model names in the registry must match the model_name in your prompt frontmatter.

Prompt Loading

The loader determines how prompts are fetched at runtime:
// Local — loads from dev server (development)
const loader = ApiLoader.local({
  baseUrl: "http://localhost:9418",
});

// Cloud — loads from AgentMark CDN (production)
const loader = ApiLoader.cloud({
  apiKey: process.env.AGENTMARK_API_KEY!,
  appId: process.env.AGENTMARK_APP_ID!,
});
Prompts are cached client-side with a 60-second TTL. Repeated calls to loadTextPrompt() within the TTL return the cached version without a network request.

Adding Tools

Pass tools to the client via the tools option:
import { tool } from "ai";
import { z } from "zod";

export const client = createAgentMarkClient({
  loader,
  modelRegistry,
  tools: {
    calculate: tool({
      description: "Performs arithmetic calculations",
      parameters: z.object({
        expression: z.string(),
      }),
      execute: async ({ expression }) => {
        return { result: Function(`"use strict"; return (${expression})`)() };
      },
    }),
  },
});
See Tools & Agents for more.

Full Reference

For all configuration options including evals, MCP servers, and advanced loader options, see Client Config.

Have Questions?

We’re here to help! Choose the best way to reach us: