Unlisted
Back
Version 70
9/24/2024
async function server(request: Request): Promise<Response> {
const url = new URL(request.url);
if (request.method === "POST" && url.pathname === "/generate-training") {
const YOUTUBE_API_KEY = Deno.env.get("YOUTUBE_API_KEY");
if (!YOUTUBE_API_KEY) {
return new Response(JSON.stringify({ error: "YouTube API key is not set" }), {
status: 500,
headers: { "Content-Type": "application/json" },
});
}
const { OpenAI } = await import("https://esm.town/v/std/openai");
const openai = new OpenAI();
const { sport, skillLevel, ageGroup, groupSize, selectedTopics } = await request.json();
// ... [previous code for generating the prompt remains the same]
const completion = await openai.chat.completions.create({
messages: [{ role: "user", content: prompt }],
model: "gpt-4o-mini",
max_tokens: 1500,
});
let trainingPlan = marked(completion.choices[0].message.content);
// Extract video placeholders
const videoPlaceholders = trainingPlan.match(/\[VIDEO: .+?\]/g) || [];
// Fetch and embed YouTube videos
for (const placeholder of videoPlaceholders) {
const searchQuery = placeholder.replace('[VIDEO: ', '').replace(']', '');
try {
const videoId = await getYouTubeVideoId(searchQuery, sport, YOUTUBE_API_KEY);
if (videoId) {
coachcompanion-coachcompanionv2.web.val.run
Updated: September 24, 2024