getEndpoint: async()

in src/lib/server/embeddingModels.ts [52:87]


	getEndpoint: async (): Promise<EmbeddingEndpoint> => {
		if (!m.endpoints) {
			return embeddingEndpointTransformersJS({
				type: "transformersjs",
				weight: 1,
				model: m,
			});
		}

		const totalWeight = sum(m.endpoints.map((e) => e.weight));

		let random = Math.random() * totalWeight;

		for (const endpoint of m.endpoints) {
			if (random < endpoint.weight) {
				const args = { ...endpoint, model: m };

				switch (args.type) {
					case "tei":
						return embeddingEndpoints.tei(args);
					case "transformersjs":
						return embeddingEndpoints.transformersjs(args);
					case "openai":
						return embeddingEndpoints.openai(args);
					case "hfapi":
						return embeddingEndpoints.hfapi(args);
					default:
						throw new Error(`Unknown endpoint type: ${args}`);
				}
			}

			random -= endpoint.weight;
		}

		throw new Error(`Failed to select embedding endpoint`);
	},