@jackhua/mini-langchain
Version:
A lightweight TypeScript implementation of LangChain with cost optimization features
58 lines • 1.77 kB
JavaScript
;
/**
* Fake embeddings for testing
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.FakeEmbeddings = void 0;
const base_1 = require("./base");
/**
* Fake embeddings that generate deterministic vectors
*/
class FakeEmbeddings extends base_1.BaseEmbeddings {
constructor(size = 384) {
super();
this.size = size;
}
/**
* Embed a single query
*/
async embedQuery(text) {
return this.embed(text);
}
/**
* Embed multiple documents
*/
async embedDocuments(texts) {
return texts.map(text => this.embed(text));
}
/**
* Generate fake embedding from text
*/
embed(text) {
// Create deterministic embedding based on text
const vector = new Array(this.size);
// Use text length and character codes to generate values
const seed = text.length;
let hash = 0;
for (let i = 0; i < text.length; i++) {
hash = ((hash << 5) - hash) + text.charCodeAt(i);
hash = hash & hash; // Convert to 32-bit integer
}
// Generate normalized vector
for (let i = 0; i < this.size; i++) {
// Use hash and position to generate pseudo-random values
const value = Math.sin(hash * (i + 1) * 0.1) * Math.cos(seed * (i + 1) * 0.05);
vector[i] = value;
}
// Normalize to unit vector
const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
if (magnitude > 0) {
for (let i = 0; i < vector.length; i++) {
vector[i] /= magnitude;
}
}
return vector;
}
}
exports.FakeEmbeddings = FakeEmbeddings;
//# sourceMappingURL=fake.js.map