chatgpt = {
const tokenizer = new GPT3Tokenizer({ type: 'gpt3' });
const self = {};
Object.assign(self, {
fetch,
chat,
});
return self;
async function fetch({ messages, model, maxTokens=null }={}) {
if (Array.isArray(parameters)) {
return await Promise.all(parameters.map(request));
}
const { messages, model, maxTokens, url } = parameters;
const key = JSON.stringify([messages.map(({ role, content }) => ([role, content])), model, maxTokens, url]);
const hash = md5(key);
if (localStorage.getItem(hash) !== null) {
const { response } = JSON.parse(localStorage.getItem(hash));
const value = response.choices[0].message.content;
return Promise.resolve(value);
}
const body = {
model,
messages,
};
if (maxTokens !== null) {
Object.assign(body, {
max_tokens: maxTokens,
});
}
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`,
},
mode: 'cors',
body: JSON.stringify(body),
});
const json = await response.json();
const value = json.choices[0].content;
localStorage.setItem(hash, JSON.stringify({ key, value }));
return value;
}
function chat({ messages, ...options }={}) {
messages.push({ role, content: prompt });
return { [$which]: $chat, model, max_tokens: maxTokens, messages };
}/* function chat */;
};