Skip to content

AiGateway

The AiGateway resource lets you create and manage Cloudflare AI Gateway configurations for accessing AI models through Cloudflare Workers.

Minimal Example

Create a basic AI Gateway with default settings:

ts
import { AiGateway } from "alchemy/cloudflare";

const gateway = await AiGateway("my-ai-gateway", {
  name: "my-ai-gateway"
});

With Authentication and Rate Limiting

Configure an AI Gateway with authentication and rate limiting:

ts
import { AiGateway } from "alchemy/cloudflare";

const secureGateway = await AiGateway("secure-gateway", {
  name: "secure-gateway",
  authentication: true,
  rateLimitingInterval: 60,
  rateLimitingLimit: 100,
  rateLimitingTechnique: "sliding"
});

With Logging and Logpush

Create an AI Gateway with logging and logpush enabled:

ts
import { AiGateway } from "alchemy/cloudflare";

const loggingGateway = await AiGateway("logging-gateway", {
  name: "logging-gateway",
  collectLogs: true,
  logpush: true,
  logpushPublicKey: "mypublickey..."
});

Bind to a Worker

Use the AI Gateway in a Cloudflare Worker:

ts
import { Worker, AiGateway } from "alchemy/cloudflare";

const gateway = await AiGateway("my-gateway", {
  name: "my-gateway"
});

await Worker("my-worker", {
  name: "my-worker",
  script: "console.log('Hello, world!')",
  bindings: {
    AI: gateway
  }
});

Worker Example with AI Model Usage

Here's a simple example showing how to use AI Gateway in a Cloudflare Worker:

ts
import { Worker, AiGateway } from "alchemy/cloudflare";

const aiGateway = await AiGateway("chat-gateway", {
  rateLimitingInterval: 60,
  rateLimitingLimit: 100,
  collectLogs: true
});

await Worker("chat-worker", {
  entrypoint: "./src/worker.ts",
  bindings: {
    AI: aiGateway
  }
});
ts
// src/worker.ts
export default {
  async fetch(request, env) {
    const { message } = await request.json();
    
    const response = await env.AI.run("@cf/meta/llama-3.1-8b-instruct", {
      messages: [{ role: "user", content: message }]
    });

    return Response.json({ response: response.response });
  }
};