import { OpenAI } from "openai";

// Define your JSON schema for a calendar event

const CalendarEventSchema = {

type: "object",

properties: {

name: { type: "string" },

date: { type: "string" },

participants: { type: "array", items: { type: "string" } },

},

required: ["name", "date", "participants"],

};

export default {

async fetch(request, env) {

const client = new OpenAI({

apiKey: env.OPENAI_API_KEY,

// Optional: use AI Gateway to bring logs, evals & caching to your AI requests

// https://developers.cloudflare.com/ai-gateway/usage/providers/openai/

// baseUrl: "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai"

});

const response = await client.chat.completions.create({

model: "gpt-4o-2024-08-06",

messages: [

{ role: "system", content: "Extract the event information." },

{

role: "user",

content: "Alice and Bob are going to a science fair on Friday.",

},

],

// Use the `response_format` option to request a structured JSON output

response_format: {

// Set json_schema and provide ra schema, or json_object and parse it yourself

type: "json_schema",

schema: CalendarEventSchema, // provide a schema

},

});

// This will be of type CalendarEventSchema

const event = response.choices[0].message.parsed;

return Response.json({

calendar_event: event,

});

},

};