Explicitly import Buffer. Specify jsdoc local extensions

This commit is contained in:
Cohee 2024-10-10 23:36:22 +03:00
parent d52b4fbbde
commit 1616e7e067
33 changed files with 93 additions and 77 deletions

View File

@ -4,7 +4,7 @@ import { getConfigValue } from './util.js';
/**
* Gets the headers for the Mancer API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getMancerHeaders(directories) {
@ -18,7 +18,7 @@ function getMancerHeaders(directories) {
/**
* Gets the headers for the TogetherAI API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getTogetherAIHeaders(directories) {
@ -31,7 +31,7 @@ function getTogetherAIHeaders(directories) {
/**
* Gets the headers for the InfermaticAI API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getInfermaticAIHeaders(directories) {
@ -44,7 +44,7 @@ function getInfermaticAIHeaders(directories) {
/**
* Gets the headers for the DreamGen API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getDreamGenHeaders(directories) {
@ -57,7 +57,7 @@ function getDreamGenHeaders(directories) {
/**
* Gets the headers for the OpenRouter API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getOpenRouterHeaders(directories) {
@ -69,7 +69,7 @@ function getOpenRouterHeaders(directories) {
/**
* Gets the headers for the vLLM API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getVllmHeaders(directories) {
@ -82,7 +82,7 @@ function getVllmHeaders(directories) {
/**
* Gets the headers for the Aphrodite API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getAphroditeHeaders(directories) {
@ -96,7 +96,7 @@ function getAphroditeHeaders(directories) {
/**
* Gets the headers for the Tabby API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getTabbyHeaders(directories) {
@ -110,7 +110,7 @@ function getTabbyHeaders(directories) {
/**
* Gets the headers for the LlamaCPP API.
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
* @returns {object} Headers for the request
*/
function getLlamaCppHeaders(directories) {
@ -123,7 +123,7 @@ function getLlamaCppHeaders(directories) {
/**
* Gets the headers for the Ooba API.
* @param {import('./users').UserDirectoryList} directories
* @param {import('./users.js').UserDirectoryList} directories
* @returns {object} Headers for the request
*/
function getOobaHeaders(directories) {
@ -136,7 +136,7 @@ function getOobaHeaders(directories) {
/**
* Gets the headers for the KoboldCpp API.
* @param {import('./users').UserDirectoryList} directories
* @param {import('./users.js').UserDirectoryList} directories
* @returns {object} Headers for the request
*/
function getKoboldCppHeaders(directories) {
@ -149,7 +149,7 @@ function getKoboldCppHeaders(directories) {
/**
* Gets the headers for the Featherless API.
* @param {import('./users').UserDirectoryList} directories
* @param {import('./users.js').UserDirectoryList} directories
* @returns {object} Headers for the request
*/
function getFeatherlessHeaders(directories) {
@ -161,7 +161,7 @@ function getFeatherlessHeaders(directories) {
/**
* Gets the headers for the HuggingFace API.
* @param {import('./users').UserDirectoryList} directories
* @param {import('./users.js').UserDirectoryList} directories
* @returns {object} Headers for the request
*/
function getHuggingFaceHeaders(directories) {
@ -197,7 +197,7 @@ export function setAdditionalHeaders(request, args, server) {
* @param {object} requestHeaders Request headers
* @param {string} type API type
* @param {string|null} server API server for new request
* @param {import('./users').UserDirectoryList} directories User directories
* @param {import('./users.js').UserDirectoryList} directories User directories
*/
export function setAdditionalHeadersByType(requestHeaders, type, server, directories) {
const headerGetters = {

View File

@ -1,4 +1,5 @@
import fs from 'node:fs';
import { Buffer } from 'node:buffer';
import encode from 'png-chunks-encode';
import extract from 'png-chunks-extract';

View File

@ -8,7 +8,7 @@ export const PUBLIC_DIRECTORIES = {
export const SETTINGS_FILE = 'settings.json';
/**
* @type {import('./users').UserDirectoryList}
* @type {import('./users.js').UserDirectoryList}
* @readonly
* @enum {string}
*/
@ -45,7 +45,7 @@ export const USER_DIRECTORY_TEMPLATE = Object.freeze({
});
/**
* @type {import('./users').User}
* @type {import('./users.js').User}
* @readonly
*/
export const DEFAULT_USER = Object.freeze({

View File

@ -79,7 +79,7 @@ function getFiles(dir, files = []) {
/**
* Ensure that the asset folders exist.
* @param {import('../users').UserDirectoryList} directories - The user's directories
* @param {import('../users.js').UserDirectoryList} directories - The user's directories
*/
function ensureFoldersExist(directories) {
const folderPath = path.join(directories.assets);

View File

@ -2,6 +2,7 @@ import * as path from 'node:path';
import * as fs from 'node:fs';
import { promises as fsPromises } from 'node:fs';
import * as readline from 'node:readline';
import { Buffer } from 'node:buffer';
import express from 'express';
import sanitize from 'sanitize-filename';
@ -188,7 +189,7 @@ const calculateDataSize = (data) => {
* processCharacter - Process a given character, read its data and calculate its statistics.
*
* @param {string} item The name of the character.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @return {Promise<object>} A Promise that resolves when the character processing is done.
*/
const processCharacter = async (item, directories) => {
@ -232,7 +233,7 @@ const processCharacter = async (item, directories) => {
/**
* Convert a character object to Spec V2 format.
* @param {object} jsonObject Character object
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {boolean} hoistDate Will set the chat and create_date fields to the current date if they are missing
* @returns {object} Character object in Spec V2 format
*/
@ -252,7 +253,7 @@ function getCharaCardV2(jsonObject, directories, hoistDate = true) {
/**
* Convert a character object to Spec V2 format.
* @param {object} char Character object
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {object} Character object in Spec V2 format
*/
function convertToV2(char, directories) {
@ -342,7 +343,7 @@ function readFromV2(char) {
/**
* Format character data to Spec V2 format.
* @param {object} data Character data
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns
*/
function charaFormatData(data, directories) {
@ -1081,7 +1082,7 @@ router.post('/chats', jsonParser, async function (request, response) {
/**
* Gets the name for the uploaded PNG file.
* @param {string} file File name
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {string} - The name for the uploaded PNG file
*/
function getPngName(file, directories) {

View File

@ -1,5 +1,6 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import { Buffer } from 'node:buffer';
import express from 'express';
import fetch from 'node-fetch';
@ -50,7 +51,7 @@ export const CONTENT_TYPES = {
/**
* Gets the default presets from the content directory.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {object[]} Array of default presets
*/
export function getDefaultPresets(directories) {
@ -97,7 +98,7 @@ export function getDefaultPresetFile(filename) {
/**
* Seeds content for a user.
* @param {ContentItem[]} contentIndex Content index
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {string[]} forceCategories List of categories to force check (even if content check is skipped)
* @returns {Promise<boolean>} Whether any content was added
*/
@ -156,7 +157,7 @@ async function seedContentForUser(contentIndex, directories, forceCategories) {
/**
* Checks for new content and seeds it for all users.
* @param {import('../users').UserDirectoryList[]} directoriesList List of user directories
* @param {import('../users.js').UserDirectoryList[]} directoriesList List of user directories
* @param {string[]} forceCategories List of categories to force check (even if content check is skipped)
* @returns {Promise<void>}
*/
@ -258,7 +259,7 @@ export function getContentOfType(type, format) {
/**
* Gets the target directory for the specified asset type.
* @param {ContentType} type Asset type
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {string | null} Target directory
*/
function getTargetByType(type, directories) {

View File

@ -1,5 +1,6 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import { Buffer } from 'node:buffer';
import express from 'express';
import sanitize from 'sanitize-filename';

View File

@ -1,4 +1,5 @@
import * as util from 'node:util';
import { Buffer } from 'node:buffer';
import fetch from 'node-fetch';
import express from 'express';

View File

@ -1,4 +1,5 @@
import * as fs from 'node:fs';
import { Buffer } from 'node:buffer';
import fetch from 'node-fetch';
import FormData from 'form-data';

View File

@ -11,7 +11,7 @@ import { jsonParser } from '../express-common.js';
/**
* Gets the folder and extension for the preset settings based on the API source ID.
* @param {string} apiId API source ID
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {object} Object containing the folder and extension for the preset settings
*/
function getPresetSettingsByAPI(apiId, directories) {

View File

@ -59,7 +59,7 @@ const EXPORTABLE_KEYS = [
/**
* Writes a secret to the secrets file
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {string} key Secret key
* @param {string} value Secret value
*/
@ -79,7 +79,7 @@ export function writeSecret(directories, key, value) {
/**
* Deletes a secret from the secrets file
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {string} key Secret key
* @returns
*/
@ -98,7 +98,7 @@ export function deleteSecret(directories, key) {
/**
* Reads a secret from the secrets file
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {string} key Secret key
* @returns {string} Secret value
*/
@ -116,7 +116,7 @@ export function readSecret(directories, key) {
/**
* Reads the secret state from the secrets file
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {object} Secret state
*/
export function readSecretState(directories) {
@ -139,7 +139,7 @@ export function readSecretState(directories) {
/**
* Reads all secrets from the secrets file
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @returns {Record<string, string> | undefined} Secrets
*/
export function getAllSecrets(directories) {

View File

@ -1,3 +1,4 @@
import { Buffer } from 'node:buffer';
import express from 'express';
import wavefile from 'wavefile';
import { jsonParser } from '../express-common.js';

View File

@ -11,7 +11,7 @@ import { jsonParser, urlencodedParser } from '../express-common.js';
/**
* Gets the path to the sprites folder for the provided character name
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string} name - The name of the character
* @param {boolean} isSubfolder - Whether the name contains a subfolder
* @returns {string | null} The path to the sprites folder. Null if the name is invalid.
@ -42,7 +42,7 @@ function getSpritesPath(directories, name, isSubfolder) {
* Imports base64 encoded sprites from RisuAI character data.
* The sprites are saved in the character's sprites folder.
* The additionalAssets and emotions are removed from the data.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {object} data RisuAI character data
* @returns {void}
*/

View File

@ -18,7 +18,7 @@ const pngFormat = getConfigValue('avatarThumbnailsPng', false);
/**
* Gets a path to thumbnail folder based on the type.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {'bg' | 'avatar'} type Thumbnail type
* @returns {string} Path to the thumbnails folder
*/
@ -39,7 +39,7 @@ function getThumbnailFolder(directories, type) {
/**
* Gets a path to the original images folder based on the type.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {'bg' | 'avatar'} type Thumbnail type
* @returns {string} Path to the original images folder
*/
@ -60,7 +60,7 @@ function getOriginalFolder(directories, type) {
/**
* Removes the generated thumbnail from the disk.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {'bg' | 'avatar'} type Type of the thumbnail
* @param {string} file Name of the file
*/
@ -77,7 +77,7 @@ export function invalidateThumbnail(directories, type, file) {
/**
* Generates a thumbnail for the given file.
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {'bg' | 'avatar'} type Type of the thumbnail
* @param {string} file Name of the file
* @returns

View File

@ -1,5 +1,6 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import { Buffer } from 'node:buffer';
import express from 'express';
import { sync as writeFileAtomicSync } from 'write-file-atomic';

View File

@ -1,5 +1,7 @@
import * as https from 'node:https';
import { createRequire } from 'node:module';
import { Buffer } from 'node:buffer';
import fetch from 'node-fetch';
import express from 'express';
import iconv from 'iconv-lite';

View File

@ -22,10 +22,10 @@ export const router = express.Router();
router.post('/get', requireAdminMiddleware, jsonParser, async (_request, response) => {
try {
/** @type {import('../users').User[]} */
/** @type {import('../users.js').User[]} */
const users = await storage.values(x => x.key.startsWith(KEY_PREFIX));
/** @type {Promise<import('../users').UserViewModel>[]} */
/** @type {Promise<import('../users.js').UserViewModel>[]} */
const viewModelPromises = users
.map(user => new Promise(resolve => {
getUserAvatar(user.handle).then(avatar =>
@ -62,7 +62,7 @@ router.post('/disable', requireAdminMiddleware, jsonParser, async (request, resp
return response.status(400).json({ error: 'Cannot disable yourself' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -86,7 +86,7 @@ router.post('/enable', requireAdminMiddleware, jsonParser, async (request, respo
return response.status(400).json({ error: 'Missing required fields' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -110,7 +110,7 @@ router.post('/promote', requireAdminMiddleware, jsonParser, async (request, resp
return response.status(400).json({ error: 'Missing required fields' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -139,7 +139,7 @@ router.post('/demote', requireAdminMiddleware, jsonParser, async (request, respo
return response.status(400).json({ error: 'Cannot demote yourself' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {

View File

@ -72,7 +72,7 @@ router.post('/change-avatar', jsonParser, async (request, response) => {
return response.status(400).json({ error: 'Invalid data URL' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -101,7 +101,7 @@ router.post('/change-password', jsonParser, async (request, response) => {
return response.status(403).json({ error: 'Unauthorized' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -189,7 +189,7 @@ router.post('/change-name', jsonParser, async (request, response) => {
return response.status(403).json({ error: 'Unauthorized' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {

View File

@ -26,10 +26,10 @@ router.post('/list', async (_request, response) => {
return response.sendStatus(204);
}
/** @type {import('../users').User[]} */
/** @type {import('../users.js').User[]} */
const users = await storage.values(x => x.key.startsWith(KEY_PREFIX));
/** @type {Promise<import('../users').UserViewModel>[]} */
/** @type {Promise<import('../users.js').UserViewModel>[]} */
const viewModelPromises = users
.filter(x => x.enabled)
.map(user => new Promise(async (resolve) => {
@ -63,7 +63,7 @@ router.post('/login', jsonParser, async (request, response) => {
const ip = getIpFromRequest(request);
await loginLimiter.consume(ip);
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -111,7 +111,7 @@ router.post('/recover-step1', jsonParser, async (request, response) => {
const ip = getIpFromRequest(request);
await recoverLimiter.consume(ip);
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
if (!user) {
@ -148,7 +148,7 @@ router.post('/recover-step2', jsonParser, async (request, response) => {
return response.status(400).json({ error: 'Missing required fields' });
}
/** @type {import('../users').User} */
/** @type {import('../users.js').User} */
const user = await storage.getItem(toKey(request.body.handle));
const ip = getIpFromRequest(request);

View File

@ -39,7 +39,7 @@ const SOURCES = [
* @param {Object} sourceSettings - Settings for the source, if it needs any
* @param {string} text - The text to get the vector for
* @param {boolean} isQuery - If the text is a query for embedding search
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[]>} - The vector for the text
*/
async function getVector(source, sourceSettings, text, isQuery, directories) {
@ -75,7 +75,7 @@ async function getVector(source, sourceSettings, text, isQuery, directories) {
* @param {Object} sourceSettings - Settings for the source, if it needs any
* @param {string[]} texts - The array of texts to get the vector for
* @param {boolean} isQuery - If the text is a query for embedding search
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
async function getBatchVector(source, sourceSettings, texts, isQuery, directories) {
@ -195,7 +195,7 @@ function getModelScope(sourceSettings) {
/**
* Gets the index for the vector collection
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string} collectionId - The collection ID
* @param {string} source - The source of the vector
* @param {object} sourceSettings - The model for the source
@ -215,7 +215,7 @@ async function getIndex(directories, collectionId, source, sourceSettings) {
/**
* Inserts items into the vector collection
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string} collectionId - The collection ID
* @param {string} source - The source of the vector
* @param {Object} sourceSettings - Settings for the source, if it needs any
@ -239,7 +239,7 @@ async function insertVectorItems(directories, collectionId, source, sourceSettin
/**
* Gets the hashes of the items in the vector collection
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string} collectionId - The collection ID
* @param {string} source - The source of the vector
* @param {Object} sourceSettings - Settings for the source, if it needs any
@ -256,7 +256,7 @@ async function getSavedHashes(directories, collectionId, source, sourceSettings)
/**
* Deletes items from the vector collection by hash
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string} collectionId - The collection ID
* @param {string} source - The source of the vector
* @param {Object} sourceSettings - Settings for the source, if it needs any
@ -277,7 +277,7 @@ async function deleteVectorItems(directories, collectionId, source, sourceSettin
/**
* Gets the hashes of the items in the vector collection that match the search text
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string} collectionId - The collection ID
* @param {string} source - The source of the vector
* @param {Object} sourceSettings - Settings for the source, if it needs any
@ -298,7 +298,7 @@ async function queryCollection(directories, collectionId, source, sourceSettings
/**
* Queries multiple collections for the given search queries. Returns the overall top K results.
* @param {import('../users').UserDirectoryList} directories - User directories
* @param {import('../users.js').UserDirectoryList} directories - User directories
* @param {string[]} collectionIds - The collection IDs to query
* @param {string} source - The source of the vector
* @param {Object} sourceSettings - Settings for the source, if it needs any

View File

@ -9,7 +9,7 @@ import { jsonParser, urlencodedParser } from '../express-common.js';
/**
* Reads a World Info file and returns its contents
* @param {import('../users').UserDirectoryList} directories User directories
* @param {import('../users.js').UserDirectoryList} directories User directories
* @param {string} worldInfoName Name of the World Info file
* @param {boolean} allowDummy If true, returns an empty object if the file doesn't exist
* @returns {object} World Info file contents

View File

@ -2,6 +2,7 @@
* When applied, this middleware will ensure the request contains the required header for basic authentication and only
* allow access to the endpoint after successful authentication.
*/
import { Buffer } from 'node:buffer';
import storage from 'node-persist';
import { getAllUserHandles, toKey, getPasswordHash } from '../users.js';
import { getConfig, getConfigValue } from '../util.js';

View File

@ -1,3 +1,5 @@
import { Buffer } from 'node:buffer';
/**
* Decodes a file name from Latin1 to UTF-8.
* @param {string} str Input string

View File

@ -1,5 +1,6 @@
import path from 'node:path';
import fs from 'node:fs';
import { Buffer } from 'node:buffer';
import { pipeline, env, RawImage, Pipeline } from 'sillytavern-transformers';
import { getConfigValue } from './util.js';

View File

@ -3,6 +3,7 @@ import * as path from 'node:path';
import * as fs from 'node:fs';
import * as crypto from 'node:crypto';
import * as os from 'node:os';
import { Buffer } from 'node:buffer';
// Express and other dependencies
import storage from 'node-persist';
@ -93,7 +94,7 @@ const STORAGE_KEYS = {
/**
* Ensures that the content directories exist.
* @returns {Promise<import('./users').UserDirectoryList[]>} - The list of user directories
* @returns {Promise<import('./users.js').UserDirectoryList[]>} - The list of user directories
*/
export async function ensurePublicDirectoriesExist() {
for (const dir of Object.values(PUBLIC_DIRECTORIES)) {
@ -116,7 +117,7 @@ export async function ensurePublicDirectoriesExist() {
/**
* Gets a list of all user directories.
* @returns {Promise<import('./users').UserDirectoryList[]>} - The list of user directories
* @returns {Promise<import('./users.js').UserDirectoryList[]>} - The list of user directories
*/
export async function getUserDirectoriesList() {
const userHandles = await getAllUserHandles();

View File

@ -3,6 +3,7 @@ import * as fs from 'node:fs';
import * as http2 from 'node:http2';
import { Readable } from 'node:stream';
import { createRequire } from 'node:module';
import { Buffer } from 'node:buffer';
import yaml from 'yaml';
import { sync as commandExistsSync } from 'command-exists';

View File

@ -5,7 +5,7 @@ import { SECRET_KEYS, readSecret } from '../endpoints/secrets.js';
* Gets the vector for the given text batch from an OpenAI compatible endpoint.
* @param {string[]} texts - The array of texts to get the vector for
* @param {boolean} isQuery - If the text is a query for embedding search
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @param {string} model - The model to use for the embedding
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
@ -51,7 +51,7 @@ export async function getCohereBatchVector(texts, isQuery, directories, model) {
* Gets the vector for the given text from an OpenAI compatible endpoint.
* @param {string} text - The text to get the vector for
* @param {boolean} isQuery - If the text is a query for embedding search
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @param {string} model - The model to use for the embedding
* @returns {Promise<number[]>} - The vector for the text
*/

View File

@ -6,7 +6,7 @@ import { TEXTGEN_TYPES } from '../constants.js';
* Gets the vector for the given text from LlamaCpp
* @param {string[]} texts - The array of texts to get the vectors for
* @param {string} apiUrl - The API URL
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
export async function getLlamaCppBatchVector(texts, apiUrl, directories) {
@ -47,7 +47,7 @@ export async function getLlamaCppBatchVector(texts, apiUrl, directories) {
* Gets the vector for the given text from LlamaCpp
* @param {string} text - The text to get the vector for
* @param {string} apiUrl - The API URL
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[]>} - The vector for the text
*/
export async function getLlamaCppVector(text, apiUrl, directories) {

View File

@ -5,7 +5,7 @@ const API_MAKERSUITE = 'https://generativelanguage.googleapis.com';
/**
* Gets the vector for the given text from gecko model
* @param {string[]} texts - The array of texts to get the vector for
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
export async function getMakerSuiteBatchVector(texts, directories) {
@ -16,7 +16,7 @@ export async function getMakerSuiteBatchVector(texts, directories) {
/**
* Gets the vector for the given text from Gemini API text-embedding-004 model
* @param {string} text - The text to get the vector for
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[]>} - The vector for the text
*/
export async function getMakerSuiteVector(text, directories) {

View File

@ -13,7 +13,7 @@ const SOURCES = {
* Gets the vector for the given text batch from an OpenAI compatible endpoint.
* @param {string[]} texts - The array of texts to get the vector for
* @param {string} source - The source of the vector
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
export async function getNomicAIBatchVector(texts, source, directories) {
@ -64,7 +64,7 @@ export async function getNomicAIBatchVector(texts, source, directories) {
* Gets the vector for the given text from an OpenAI compatible endpoint.
* @param {string} text - The text to get the vector for
* @param {string} source - The source of the vector
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[]>} - The vector for the text
*/
export async function getNomicAIVector(text, source, directories) {

View File

@ -8,7 +8,7 @@ import { TEXTGEN_TYPES } from '../constants.js';
* @param {string} apiUrl - The API URL
* @param {string} model - The model to use
* @param {boolean} keep - Keep the model loaded in memory
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
export async function getOllamaBatchVector(texts, apiUrl, model, keep, directories) {
@ -26,7 +26,7 @@ export async function getOllamaBatchVector(texts, apiUrl, model, keep, directori
* @param {string} apiUrl - The API URL
* @param {string} model - The model to use
* @param {boolean} keep - Keep the model loaded in memory
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[]>} - The vector for the text
*/
export async function getOllamaVector(text, apiUrl, model, keep, directories) {

View File

@ -23,7 +23,7 @@ const SOURCES = {
* Gets the vector for the given text batch from an OpenAI compatible endpoint.
* @param {string[]} texts - The array of texts to get the vector for
* @param {string} source - The source of the vector
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @param {string} model - The model to use for the embedding
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
@ -79,7 +79,7 @@ export async function getOpenAIBatchVector(texts, source, directories, model = '
* Gets the vector for the given text from an OpenAI compatible endpoint.
* @param {string} text - The text to get the vector for
* @param {string} source - The source of the vector
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @param {string} model - The model to use for the embedding
* @returns {Promise<number[]>} - The vector for the text
*/

View File

@ -7,7 +7,7 @@ import { TEXTGEN_TYPES } from '../constants.js';
* @param {string[]} texts - The array of texts to get the vectors for
* @param {string} apiUrl - The API URL
* @param {string} model - The model to use
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[][]>} - The array of vectors for the texts
*/
export async function getVllmBatchVector(texts, apiUrl, model, directories) {
@ -49,7 +49,7 @@ export async function getVllmBatchVector(texts, apiUrl, model, directories) {
* @param {string} text - The text to get the vector for
* @param {string} apiUrl - The API URL
* @param {string} model - The model to use
* @param {import('../users').UserDirectoryList} directories - The directories object for the user
* @param {import('../users.js').UserDirectoryList} directories - The directories object for the user
* @returns {Promise<number[]>} - The vector for the text
*/
export async function getVllmVector(text, apiUrl, model, directories) {