UNPKG

il2cpp-dump-analyzer-mcp

Version:

Agentic RAG system for analyzing IL2CPP dump.cs files from Unity games

94 lines 3.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.IL2CPPEmbeddingManager = void 0; const documents_1 = require("@langchain/core/documents"); const xenova_embeddings_1 = require("./xenova-embeddings"); const dotenv_1 = __importDefault(require("dotenv")); // Load environment variables dotenv_1.default.config(); /** * Manages the creation and storage of embeddings for IL2CPP code chunks */ class IL2CPPEmbeddingManager { constructor() { // Initialize the embeddings model const modelName = process.env.EMBEDDING_MODEL || 'Xenova/all-MiniLM-L6-v2'; this.embeddings = new xenova_embeddings_1.XenovaEmbeddings(modelName); } /** * Convert code chunks to LangChain documents with embeddings * @param chunks Array of code chunks * @returns Array of documents with embeddings */ async createEmbeddings(chunks) { // Convert chunks to documents const documents = chunks.map(chunk => new documents_1.Document({ pageContent: chunk.text, metadata: chunk.metadata })); // Create embeddings for all documents await this.embeddings.embedDocuments(documents.map(doc => doc.pageContent)); return documents; } /** * Create an embedding for a query string * @param query Query string * @returns Embedding vector */ async createQueryEmbedding(query) { return this.embeddings.embedQuery(query); } /** * Find similar documents to a query * @param query Query string * @param documents Array of documents to search * @param k Number of results to return * @returns Array of documents with similarity scores */ async findSimilarDocuments(query, documents, k = 5) { const queryEmbedding = await this.createQueryEmbedding(query); const documentEmbeddings = await this.embeddings.embedDocuments(documents.map(doc => doc.pageContent)); // Calculate similarity scores const similarities = []; for (let i = 0; i < documents.length; i++) { const similarity = this.cosineSimilarity(queryEmbedding, documentEmbeddings[i]); similarities.push([documents[i], similarity]); } // Sort by similarity (descending) similarities.sort((a, b) => b[1] - a[1]); // Return top k results return similarities.slice(0, k); } /** * Calculate cosine similarity between two vectors * @param a First vector * @param b Second vector * @returns Cosine similarity score */ cosineSimilarity(a, b) { let dotProduct = 0; let normA = 0; let normB = 0; for (let i = 0; i < a.length; i++) { dotProduct += a[i] * b[i]; normA += a[i] * a[i]; normB += b[i] * b[i]; } if (normA === 0 || normB === 0) { return 0; } return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)); } /** * Get the dimensionality of the embeddings * @returns The number of dimensions in the embedding vectors */ getDimension() { return this.embeddings.getDimension(); } } exports.IL2CPPEmbeddingManager = IL2CPPEmbeddingManager; //# sourceMappingURL=embeddings.js.map