Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.latitude.so/llms.txt

Use this file to discover all available pages before exploring further.

Overview

This guide shows you how to integrate Latitude Telemetry into an application that uses Amazon Bedrock.
You’ll keep calling Bedrock exactly as you do today. Telemetry simply observes and enriches those calls.

Requirements

  • A Latitude account and API key
  • A Latitude project slug
  • A project that uses the AWS Bedrock SDK

Steps

1

Install

npm install @latitude-data/telemetry
2

Initialize and use

import { Latitude, capture } from "@latitude-data/telemetry"
import {
  BedrockRuntimeClient,
  InvokeModelCommand,
} from "@aws-sdk/client-bedrock-runtime"
import * as BedrockSDK from "@aws-sdk/client-bedrock-runtime"

const latitude = new Latitude({
  apiKey: process.env.LATITUDE_API_KEY!,
  project: process.env.LATITUDE_PROJECT_SLUG!,
  instrumentations: { bedrock: BedrockSDK },
})

await latitude.ready

const client = new BedrockRuntimeClient({ region: "us-east-1" })

await capture("generate-reply", async () => {
  const command = new InvokeModelCommand({
    modelId: "anthropic.claude-3-haiku-20240307-v1:0",
    contentType: "application/json",
    body: JSON.stringify({
      anthropic_version: "bedrock-2023-05-31",
      max_tokens: 1024,
      messages: [{ role: "user", content: "Hello" }],
    }),
  })
  const response = await client.send(command)
  return JSON.parse(new TextDecoder().decode(response.body))
})

await latitude.shutdown()

Streaming

When streaming, consume the stream inside capture() so the span covers the full operation:
import { InvokeModelWithResponseStreamCommand } from "@aws-sdk/client-bedrock-runtime"

await capture("stream-reply", async () => {
  const command = new InvokeModelWithResponseStreamCommand({
    modelId: "anthropic.claude-3-haiku-20240307-v1:0",
    contentType: "application/json",
    body: JSON.stringify({
      anthropic_version: "bedrock-2023-05-31",
      max_tokens: 1024,
      messages: [{ role: "user", content: input }],
    }),
  })
  const response = await client.send(command)

  for await (const event of response.body!) {
    if (event.chunk) {
      const data = JSON.parse(new TextDecoder().decode(event.chunk.bytes))
      if (data.type === "content_block_delta") {
        res.write(data.delta.text)
      }
    }
  }
  res.end()
})

Seeing Your Traces

Once connected, traces appear automatically in Latitude:
  1. Open your project in the Latitude dashboard
  2. Each execution shows input/output messages, model, token usage, latency, and errors

That’s It

No changes to your Bedrock calls: just initialize Latitude and your LLM calls are traced.