diff --git a/ai-engineering/observe/axiom-ai-sdk-instrumentation.mdx b/ai-engineering/observe/axiom-ai-sdk-instrumentation.mdx index ebf8ba1e..07158ade 100644 --- a/ai-engineering/observe/axiom-ai-sdk-instrumentation.mdx +++ b/ai-engineering/observe/axiom-ai-sdk-instrumentation.mdx @@ -21,9 +21,9 @@ Follow the procedure in [Quickstart](/ai-engineering/quickstart) to set up Axiom ## Instrument AI SDK calls -Axiom AI SDK provides helper functions for Vercel’s [AI SDK](https://ai-sdk.dev/docs) to wrap your existing AI model client. +Axiom AI SDK provides helper functions for [Vercel AI SDK](https://ai-sdk.dev/docs) to wrap your existing AI model client. The `wrapAISDKModel` function takes an existing AI model object and returns an instrumented version that automatically generates trace data for every call. -The `wrapAISDKModel` function takes an existing AI model object and returns an instrumented version that automatically generates trace data for every call. +Choose one of the following common Vercel AI SDK providers. For the full list of providers, see the [Vercel documentation](https://ai-sdk.dev/providers/ai-sdk-providers). @@ -124,13 +124,41 @@ The `wrapAISDKModel` function takes an existing AI model object and returns an i +To instrument calls without a Vercel AI SDK provider, use the generic Vercel AI Gateway provider. + + + +To instrument calls without a Vercel AI SDK provider, use the generic Vercel AI Gateway provider. For more information, see the [Vercel documentation](https://ai-sdk.dev/providers/ai-sdk-providers/ai-gateway). + +1. Run the following in your terminal to install the Vercel AI SDK: + + ```sh + npm i ai + ``` + +1. Create the file `src/shared/openai.ts` with the following content: + + ```ts /src/shared/openai.ts + import { createGateway } from 'ai'; + import { wrapAISDKModel } from 'axiom'; + + const gateway = createGateway({ + apiKey: process.env.OPENAI_API_KEY, + }); + + // Wrap the model to enable automatic tracing + export const gpt4o = wrapAISDKModel(gateway('openai/gpt-4o')); + ``` + + + The rest of the page explains how to work with OpenAI. The process is similar for other LLMs. ## Add context The `withSpan` function allows you to add crucial business context to your traces. It creates a parent span around your LLM call and attaches metadata about the `capability` and `step` that you execute. -```typescript /src/app/page.tsx +```ts /src/app/page.tsx import { withSpan } from 'axiom/ai'; import { generateText } from 'ai'; import { gpt4o } from '@/shared/openai'; @@ -164,7 +192,7 @@ For many AI capabilities, the LLM call is only part of the story. If your capabi The `wrapTool` helper takes your tool’s name and its definition and returns an instrumented version. This wrapper creates a dedicated child span for every tool execution, capturing its arguments, output, and any errors. -```typescript /src/app/generate-text/page.tsx +```ts /src/app/generate-text/page.tsx import { tool } from 'ai'; import { z } from 'zod'; import { wrapTool } from 'axiom/ai'; @@ -202,7 +230,7 @@ const { text, toolResults } = await generateText({ Example of how all three instrumentation functions work together in a single, real-world example: -```typescript /src/app/page.tsx expandable +```ts /src/app/page.tsx expandable import { withSpan, wrapAISDKModel, wrapTool } from 'axiom/ai'; import { generateText, tool } from 'ai'; import { createOpenAI } from '@ai-sdk/openai';