import { generateCode } from "./backend/generate-code";
import { createTables } from "./database/migrations";
import { createProject, getCode, getNextVersionNumber, insertVersion } from "./database/queries";
async function servePublicFile(path: string): Promise
{
const url = new URL("./public/" + path, import.meta.url);
const text = await (await fetch(url, {
headers: {
"User-Agent": "", // to transpile TS to JS
},
})).text();
const contentType = path.endsWith(".html") ? "text/html" : "text/javascript";
return new Response(text, {
headers: {
"Content-Type": contentType,
},
});
}
await createTables();
export default async function cerebras_coder(req: Request): Promise {
if (req.method === "POST") {
let { prompt, currentCode, versionHistory, projectId } = await req.json();
const { code, time, totalTokens } = await generateCode(prompt, currentCode);
// If no version history exists, create a new project
let versionNumber = 0;
if (!projectId) {
projectId = await createProject(prompt);
} else {
// get last version number for this project id
versionNumber = await getNextVersionNumber(projectId);
}
await insertVersion(projectId, versionNumber, prompt, code);
return new Response(
JSON.stringify({
code,
projectId,
versionNumber,
performance: {
tokensPerSecond: totalTokens / time,
totalTokens,
time,
},
}),
{
headers: { "Content-Type": "application/json" },
},
);
}
// output url in format /p/:project/v/:version
const url = new URL(req.url);
if (url.pathname.startsWith("/p/")) {
const [, , project, , version] = url.pathname.split("/");
const code = await getCode(project, version);
if (!code) {
return new Response("Not found", { status: 404 });
}
return new Response(code as string, {
headers: { "Content-Type": "text/html" },
});
}
if (url.pathname.startsWith("/public/")) {
return servePublicFile(url.pathname.replace("/public/", "./"));
}
return servePublicFile("index.html");
}
Comments
Post a Comment