Spaces:
Runtime error
Runtime error
File size: 2,684 Bytes
65567a2 a86df80 65567a2 6c2bcb4 2aa79c0 a86df80 6c2bcb4 65567a2 6c2bcb4 a86df80 65567a2 34bac1b a86df80 6c2bcb4 90d9359 6c2bcb4 90d9359 a86df80 90d9359 2aa79c0 a86df80 65567a2 2aa79c0 6c2bcb4 34bac1b a86df80 6c2bcb4 90d9359 6c2bcb4 90d9359 a86df80 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import { ChatCompletionRequestMessage } from "openai";
import { nanoid } from "nanoid";
import { openai } from "@/services/api/openai";
import { extractCode, miniPrompt } from "@/utils/prompt";
import {
COMMAND_ADD_FEATURE,
COMMAND_CREATE_GAME,
COMMAND_EXTEND_FEATURE,
COMMAND_FIX_BUG,
COMMAND_REMOVE_FEATURE,
} from "@/constants";
export async function toOpenAI({
command = "CREATE_GAME",
prompt = "extend the code",
temperature = "0.2",
template = "",
model = "gpt-3.5-turbo",
maxTokens = "2048",
}) {
const prompt_ = prompt.trim();
const nextMessage: ChatCompletionRequestMessage = {
role: "user",
content: miniPrompt`
"${command}": ${prompt_}. Return the full source code of the game.
TEMPLATE:
\`\`\`javascript
${template.trim().replace(/^\s+/gm, "").replace(/^\n+/g, "").replace(/\s+/, " ")}
\`\`\`
`,
};
const task = `${prompt_}`;
const messages: ChatCompletionRequestMessage[] = [
{
role: "system",
content: miniPrompt`
You are a skilled 2D game developer working with JavaScript on Canvas2D and aim for high performance
You understand and follow a set of "COMMANDS" to build games:
"${COMMAND_CREATE_GAME}": Initiate the development. Consider the game type, environment, basic mechanics and extend the "TEMPLATE"
"${COMMAND_ADD_FEATURE}": Add the new feature
"${COMMAND_REMOVE_FEATURE}": Remove the existing feature
"${COMMAND_EXTEND_FEATURE}": Modify an existing feature, altering its behavior or properties
"${COMMAND_FIX_BUG}": Debug and fix problems, ensuring everything functions as intended
NEVER use any external assets: image, base64, sprite or audio
You can use these libraries without importing them: TWEEN, Mousetrap
NEVER use alert! Write your message on Canvas directly
Your "OUTPUT FORMAT" must be valid JavaScript code within a markdown code block
It's crucial to follow these "COMMANDS" and "OUTPUT FORMAT" for the desired results
`,
},
nextMessage,
];
try {
const response = await openai.createChatCompletion({
model,
messages,
max_tokens: Number.parseInt(maxTokens),
temperature: Number.parseFloat(temperature),
});
const { message } = response.data.choices[0];
if (message) {
console.log("ORIGINAL OUTPUT");
console.log(message.content);
return {
...message,
content: extractCode(message.content).replace(
/(COMMANDS|CREATE_GAME|ADD_FEATURE|REMOVE_FEATURE|UPDATE_FEATURE|FIX_BUG|TEMPLATE|OUTPUT FORMAT).*\n/,
""
),
task,
id: nanoid(),
};
}
// Something broke
// ToDo: fix it :)
return {
content: "/* BROKEN */",
task,
id: nanoid(),
};
} catch (error) {
throw error;
}
}
|