khulnasoft's picture
Upload 24 files
8e20687 verified
import endent from 'endent';
import {
createParser,
ParsedEvent,
ReconnectInterval,
} from 'eventsource-parser';
const createPrompt = (
inputLanguage: string,
outputLanguage: string,
inputCode: string,
) => {
if (inputLanguage === 'Natural Language') {
return endent`
You are an expert programmer in all programming languages. Translate the natural language to "${outputLanguage}" code. Do not include \`\`\`.
Example translating from natural language to JavaScript:
Natural language:
Print the numbers 0 to 9.
JavaScript code:
for (let i = 0; i < 10; i++) {
console.log(i);
}
Natural language:
${inputCode}
${outputLanguage} code (no \`\`\`):
`;
} else if (outputLanguage === 'Natural Language') {
return endent`
You are an expert programmer in all programming languages. Translate the "${inputLanguage}" code to natural language in plain English that the average adult could understand. Respond as bullet points starting with -.
Example translating from JavaScript to natural language:
JavaScript code:
for (let i = 0; i < 10; i++) {
console.log(i);
}
Natural language:
Print the numbers 0 to 9.
${inputLanguage} code:
${inputCode}
Natural language:
`;
} else {
return endent`
You are an expert programmer in all programming languages. Translate the "${inputLanguage}" code to "${outputLanguage}" code. Do not include \`\`\`.
Example translating from JavaScript to Python:
JavaScript code:
for (let i = 0; i < 10; i++) {
console.log(i);
}
Python code:
for i in range(10):
print(i)
${inputLanguage} code:
${inputCode}
${outputLanguage} code (no \`\`\`):
`;
}
};
export const OpenAIStream = async (
inputLanguage: string,
outputLanguage: string,
inputCode: string,
model: string,
key: string,
) => {
const prompt = createPrompt(inputLanguage, outputLanguage, inputCode);
const system = { role: 'system', content: prompt };
const res = await fetch(`https://api.openai.com/v1/chat/completions`, {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${key || process.env.OPENAI_API_KEY}`,
},
method: 'POST',
body: JSON.stringify({
model,
messages: [system],
temperature: 0,
stream: true,
}),
});
const encoder = new TextEncoder();
const decoder = new TextDecoder();
if (res.status !== 200) {
const statusText = res.statusText;
const result = await res.body?.getReader().read();
throw new Error(
`OpenAI API returned an error: ${
decoder.decode(result?.value) || statusText
}`,
);
}
const stream = new ReadableStream({
async start(controller) {
const onParse = (event: ParsedEvent | ReconnectInterval) => {
if (event.type === 'event') {
const data = event.data;
if (data === '[DONE]') {
controller.close();
return;
}
try {
const json = JSON.parse(data);
const text = json.choices[0].delta.content;
const queue = encoder.encode(text);
controller.enqueue(queue);
} catch (e) {
controller.error(e);
}
}
};
const parser = createParser(onParse);
for await (const chunk of res.body as any) {
parser.feed(decoder.decode(chunk));
}
},
});
return stream;
};