• Townie
    AI
  • Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
xiaofei

xiaofei

untitled-6223

Public
Like
untitled-6223
Home
Code
3
README.md
new-file-3903.tsx
new-file-8848.tsx
Branches
1
Pull requests
Remixes
History
Environment variables
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
README.md
Code
/
README.md
Search
5/5/2025
README.md

import { OpenAI } from "https://esm.town/v/std/openai";

export default async function(req: Request): Promise { if (req.method === "OPTIONS") { return new Response(null, { headers: { "Access-Control-Allow-Origin": "", "Access-Control-Allow-Headers": "", }, status: 204, }); } const openai = new OpenAI();

try { var body = await req.json(); } catch (e) { var search = (new URL(req.url)).searchParams; body = { "messages": [{ "role": "user", "content": search.get("q") || "hello" }], "temperature": 0.5, "presence_penalty": 0, "frequency_penalty": 0, "top_p": 1, stream: true, model: "gpt-4-turbo", }; }

const stream = await openai.chat.completions.create(body);

if (!body.stream) { return new Response(JSON.stringify(body), { headers: { "Access-Control-Allow-Origin": "", "Access-Control-Allow-Headers": "", "Content-Type": "application/json; charset=UTF-8", }, }); } /* const { readable, writable } = new TransformStream(); const my_stream_writer = writable.getWriter(); var encoder = new TextEncoder(); (async () => { for await (const chunk of stream) { my_stream_writer.write(encoder.encode(chunk.choices[0]?.delta?.content || "")); } my_stream_writer.close(); })();*/

const { readable, writable } = new TransformStream(); const my_stream_writer = writable.getWriter(); var reader = stream.toReadableStream().getReader(); var totalText = ""; const decoder = new TextDecoder("utf-8", { stream: true }); var encoder = new TextEncoder(); (async () => { while (true) { const { done, value } = await reader.read(); if (done) break; totalText += decoder.decode(value, { stream: true }); var msgs = totalText.split("\n"); totalText = msgs.pop(); for (let i in msgs) { my_stream_writer.write(encoder.encode(data: ${msgs[i]}\n\n)); } await new Promise((r) => { setTimeout(r, 20); }); } my_stream_writer.close(); })();

return new Response(readable, { headers: { "Access-Control-Allow-Origin": "", "Access-Control-Allow-Headers": "", "Content-Type": "text/event-stream; charset=UTF-8", }, }); }

FeaturesVersion controlCode intelligenceCLI
Use cases
TeamsAI agentsSlackGTM
ExploreDocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.