SillyTavern/src/openai-vectors.js

49 lines
1.3 KiB
JavaScript
Raw Normal View History

2023-09-08 12:57:27 +02:00
const fetch = require('node-fetch').default;
const { SECRET_KEYS, readSecret } = require('./secrets');
/**
* Gets the vector for the given text from OpenAI ada model
* @param {string} text - The text to get the vector for
* @returns {Promise<number[]>} - The vector for the text
*/
async function getOpenAIVector(text) {
const key = readSecret(SECRET_KEYS.OPENAI);
if (!key) {
console.log('No OpenAI key found');
throw new Error('No OpenAI key found');
}
const response = await fetch('https://api.openai.com/v1/embeddings', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${key}`,
},
body: JSON.stringify({
input: text,
model: 'text-embedding-ada-002',
})
});
if (!response.ok) {
2023-09-09 21:15:47 +02:00
const text = await response.text();
console.log('OpenAI request failed', response.statusText, text);
2023-09-08 12:57:27 +02:00
throw new Error('OpenAI request failed');
}
const data = await response.json();
const vector = data?.data[0]?.embedding;
if (!Array.isArray(vector)) {
console.log('OpenAI response was not an array');
throw new Error('OpenAI response was not an array');
}
return vector;
}
module.exports = {
getOpenAIVector,
};