PolyMarket MCP Server

by berlinbra
Verified
  • src
import { Embeddings } from "@langchain/core/embeddings"; import { pipeline, env } from '@xenova/transformers'; // Disable local model loading warning env.allowLocalModels = false; export class TransformersEmbeddings extends Embeddings { private model: any; private initialized: boolean = false; constructor() { super({}); } private async initModel() { if (!this.initialized) { this.model = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2', { quantized: false }); this.initialized = true; } } private async generateEmbedding(text: string): Promise<number[]> { await this.initModel(); const output = await this.model(text, { pooling: 'mean', normalize: true }); return Array.from(output.data) as number[]; } async embedQuery(text: string): Promise<number[]> { return this.generateEmbedding(text); } async embedDocuments(texts: string[]): Promise<number[][]> { const embeddings: number[][] = []; for (const text of texts) { const embedding = await this.generateEmbedding(text); embeddings.push(embedding); } return embeddings; } } // For storing pre-computed embeddings export class CustomEmbeddings extends Embeddings { private vectors: number[][] = []; private queryVector: number[] | null = null; constructor(vectors: number[][], queryVector?: number[]) { super({}); this.vectors = vectors; this.queryVector = queryVector || null; } async embedQuery(_text: string): Promise<number[]> { if (!this.queryVector) { throw new Error("No query vector provided"); } return this.queryVector; } async embedDocuments(_texts: string[]): Promise<number[][]> { return this.vectors; } }