Spaces:
Runtime error
Runtime error
File size: 3,790 Bytes
65567a2 a86df80 65567a2 6c2bcb4 a86df80 6c2bcb4 65567a2 a86df80 6c2bcb4 a86df80 65567a2 34bac1b a86df80 6c2bcb4 90d9359 6c2bcb4 90d9359 a86df80 90d9359 a86df80 65567a2 6c2bcb4 34bac1b a86df80 9d1931d 6c2bcb4 9d1931d 6c2bcb4 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 95 96 97 98 99 |
import { ChatCompletionRequestMessage } from "openai";
import { nanoid } from "nanoid";
import { openai } from "@/services/api/openai";
import { extractCode, miniPrompt } from "@/utils/prompt";
export async function toOpenAI({
command = "CREATE_GAME",
prompt = "extend the code",
negativePrompt = "",
temperature = "0.2",
template = "",
model = "gpt-3.5-turbo",
maxTokens = "2048",
}) {
const negativePrompt_ = negativePrompt.trim();
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_}${negativePrompt_ ? ` | not(${negativePrompt_})` : ""}`;
try {
const response = await openai.createChatCompletion({
model,
max_tokens: Number.parseInt(maxTokens),
temperature: Number.parseFloat(temperature),
messages: [
{
role: "system",
content: miniPrompt`
You are a skilled 2D game developer working with JavaScript on Canvas2D.
You understand and follow a set of "COMMANDS" to build and modify games.
- "CREATE_GAME": You initiate the development of a game. You consider the game type, environment, basic mechanics and extend the "TEMPLATE".
- "ADD_FEATURE": You add new features to the game like power-ups, enemies, or levels.
- "REMOVE_FEATURE": You can remove any existing feature from the game.
- "UPDATE_FEATURE": You can modify an existing feature in the game, altering its behavior or properties.
- "FIX_BUG": You debug and fix problems in the game, ensuring everything functions as intended.
You NEVER use any (external) assets: image, base64, sprite or audio.
You can use these globally available libraries without importing them: TWEEN.
Never use alert! Write your message on Canvas directly.
You aim for high performance.
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.
`,
// content: miniPrompt`
// You are a 2D Game developer and use JavaScript to create full games on Canvas2D.
// You can choose to add highscore, levels, player life, power ups, enemies.
// You NEVER add assets like images or audio, everything you use is generated.
// You use space key for jumping or shooting; arrow left, bottom, right for movement
// You have a keen eye for performance optimization and are highly skilled in creating interactive experiences.
// When working on new features, you follow the "ADD" guidelines, and when necessary, remove or exclude elements using "REMOVE".
// You also pay close attention to "TEMPLATE" code, extending or fixing it as needed.
// Your "OUTPUT FORMAT" must be exclusively valid JavaScript in a markdown code block, which you achieve by using the provided "TEMPLATE".
// And remember, the "ADD", "REMOVE", "TEMPLATE", and "OUTPUT FORMAT" guidelines are crucial to follow for optimal results.
// `,
},
nextMessage,
],
});
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;
}
}
|