File size: 1,760 Bytes
65567a2
a86df80
2f65818
6c2bcb4
2f65818
a86df80
 
6c2bcb4
65567a2
6c2bcb4
a86df80
65567a2
 
2f65818
34bac1b
a86df80
 
2f65818
 
 
 
 
 
a86df80
 
 
6c2bcb4
90d9359
6c2bcb4
90d9359
 
 
a86df80
90d9359
2aa79c0
 
 
 
 
2f65818
2aa79c0
 
 
a86df80
 
2f65818
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
import { ChatCompletionRequestMessage } from "openai";
import { nanoid } from "nanoid";
import { createClient, openai } from "@/services/api/openai";
import { extractCode, miniPrompt } from "@/utils/prompt";
import { systemMessage } from "@/constants";

export async function toOpenAI({
	command = "CREATE_GAME",
	prompt = "extend the code",
	temperature = "0.2",
	template = "",
	model = "gpt-3.5-turbo",
	maxTokens = "2048",
	openAIAPIKey = "",
}) {
	const prompt_ = prompt.trim();

	let client = openai;

	if (openAIAPIKey !== "") {
		client = createClient(openAIAPIKey);
	}

	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`${systemMessage}`,
		},
		nextMessage,
	];

	try {
		const response = await client.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;
	}
}