UNPKG

mongodb-rag-core

Version:

Common elements used by MongoDB Chatbot Framework components.

136 lines (132 loc) 5.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tagifyMetadata = exports.classifyMongoDbMetadata = exports.classifyMongoDbProgrammingLanguageAndProduct = exports.classifyMongoDbTopic = exports.ClassifyMongoDbTopicSchema = exports.classifyMongoDbProduct = exports.ClassifyMongoDbProductSchema = exports.classifyMongoDbProgrammingLanguage = exports.ClassifyMongoDbProgrammingLanguageSchema = void 0; const zod_1 = require("zod"); const aiSdk_1 = require("mongodb-rag-core/aiSdk"); const products_1 = require("./products"); const programmingLanguages_1 = require("./programmingLanguages"); const topics_1 = require("./topics"); const braintrust_1 = require("braintrust"); const baseSystemPrompt = `You are an expert data labeler employed by MongoDB. You must label metadata based on the provided label categories:`; exports.ClassifyMongoDbProgrammingLanguageSchema = zod_1.z.object({ programmingLanguage: zod_1.z .enum(programmingLanguages_1.mongoDbProgrammingLanguageIds) .nullable() .describe("Most important programming language present in the content. If no programming language is present, set to `null`."), }); /** Classify metadata relevant to the MongoDB docs chatbot from a user message in the conversation. */ exports.classifyMongoDbProgrammingLanguage = (0, braintrust_1.wrapTraced)(async (model, data, maxRetries) => (await (0, aiSdk_1.generateObject)({ maxRetries, messages: [ { role: "system", content: `${baseSystemPrompt} ${programmingLanguages_1.mongoDbProgrammingLanguages.map((l) => ` - ${l.id}: ${l.name}`).join("\n")}`, }, { role: "user", content: data, }, ], model, schema: exports.ClassifyMongoDbProgrammingLanguageSchema, })).object.programmingLanguage, { name: "classifyMongoDbProgrammingLanguage", }); exports.ClassifyMongoDbProductSchema = zod_1.z.object({ mongoDbProduct: zod_1.z .enum(products_1.mongoDbProducts.map((p) => p.id)) .nullable() .describe(`Most important MongoDB product present in the content. If it is not clear what the product is, set to \`null\`.`), }); exports.classifyMongoDbProduct = (0, braintrust_1.wrapTraced)(async (model, data, maxRetries) => (await (0, aiSdk_1.generateObject)({ maxRetries, messages: [ { role: "system", content: `${baseSystemPrompt} ${products_1.mongoDbProducts .map((p) => ` - ${p.id}: **${p.name}**. ${p.description}`) .join("\n")} Keep in mind: 1. Include "Driver" if the user is asking about a programming language with a MongoDB driver. 2. If asking about MongoDB database but not specifying if Atlas/Server/Op Manager, etc, set to "MongoDB Server". 3. If not clear what product is being asked about, set to \`null\`.`, }, { role: "user", content: data, }, ], model, schema: exports.ClassifyMongoDbProductSchema, })).object.mongoDbProduct, { name: "classifyMongoDbProduct", }); exports.ClassifyMongoDbTopicSchema = zod_1.z.object({ topic: zod_1.z .enum(topics_1.mongoDbTopics.map((t) => t.id)) .nullable() .describe(`Most important MongoDB-related topic present in the content. If none of the listed topics are clearly present, set to \`null\`.`), }); exports.classifyMongoDbTopic = (0, braintrust_1.wrapTraced)(async (model, data, maxRetries) => (await (0, aiSdk_1.generateObject)({ maxRetries, messages: [ { role: "system", content: `${baseSystemPrompt} ${topics_1.mongoDbTopics .map((t) => ` - ${t.id}: **${t.name}**. ${t.description}`) .join("\n")}`, }, { role: "user", content: data, }, ], model, schema: exports.ClassifyMongoDbTopicSchema, })).object.topic, { name: "classifyMongoDbTopic", }); function nullOnErr() { return null; } exports.classifyMongoDbProgrammingLanguageAndProduct = (0, braintrust_1.wrapTraced)(async (model, data, maxRetries) => { const [programmingLanguage, product] = await Promise.all([ (0, exports.classifyMongoDbProgrammingLanguage)(model, data, maxRetries).catch(nullOnErr), (0, exports.classifyMongoDbProduct)(model, data, maxRetries).catch(nullOnErr), ]); return { programmingLanguage, product }; }, { name: "classifyMongoDbProgrammingLanguageAndProduct" }); exports.classifyMongoDbMetadata = (0, braintrust_1.wrapTraced)(async (model, data, maxRetries) => { const [programmingLanguage, product, topic] = await Promise.all([ (0, exports.classifyMongoDbProgrammingLanguage)(model, data, maxRetries).catch(nullOnErr), (0, exports.classifyMongoDbProduct)(model, data, maxRetries).catch(nullOnErr), (0, exports.classifyMongoDbTopic)(model, data, maxRetries).catch(nullOnErr), ]); return { programmingLanguage, product, topic, }; }, { name: "classifyMongoDbMetadata", }); // Type guard to check if a value is a non-null MongoDbTag function isMongoDbTag(value) { return value !== null; } /** Convert metadata to tags */ function tagifyMetadata(metadata) { return Object.values(metadata).filter(isMongoDbTag); } exports.tagifyMetadata = tagifyMetadata; //# sourceMappingURL=classifyMetadata.js.map