@mastra/core
Version:
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.
91 lines (83 loc) • 2.88 kB
JavaScript
;
var chunkXDMQQZNX_cjs = require('./chunk-XDMQQZNX.cjs');
// src/relevance/cohere/index.ts
var CohereRelevanceScorer = class {
model;
apiKey;
constructor(model, apiKey) {
console.warn(
'CohereRelevanceScorer exported from @mastra/core is deprecated. Please import from "@mastra/rag" instead.'
);
this.apiKey = apiKey;
this.model = model;
}
async getRelevanceScore(query, text) {
const response = await fetch(`https://api.cohere.com/v2/rerank`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${this.apiKey}`
},
body: JSON.stringify({
query,
documents: [text],
model: this.model,
top_n: 1
})
});
if (!response.ok) {
throw new Error(`Cohere API error: ${response.status} ${await response.text()}`);
}
const data = await response.json();
const relevanceScore = data.results[0]?.relevance_score;
if (!relevanceScore) {
throw new Error("No relevance score found on Cohere response");
}
return relevanceScore;
}
};
// src/relevance/relevance-score-provider.ts
function createSimilarityPrompt(query, text) {
return `Rate the semantic similarity between the following the query and the text on a scale from 0 to 1 (decimals allowed), where 1 means exactly the same meaning and 0 means completely different:
Query: ${query}
Text: ${text}
Relevance score (0-1):`;
}
// src/relevance/mastra-agent/index.ts
var MastraAgentRelevanceScorer = class {
agent;
constructor(name, model) {
this.agent = new chunkXDMQQZNX_cjs.Agent({
name: `Relevance Scorer ${name}`,
instructions: `You are a specialized agent for evaluating the relevance of text to queries.
Your task is to rate how well a text passage answers a given query.
Output only a number between 0 and 1, where:
1.0 = Perfectly relevant, directly answers the query
0.0 = Completely irrelevant
Consider:
- Direct relevance to the question
- Completeness of information
- Quality and specificity
Always return just the number, no explanation.`,
model
});
}
async getRelevanceScore(query, text) {
const prompt = createSimilarityPrompt(query, text);
const model = await this.agent.getModel();
let response;
if (model.specificationVersion === "v2") {
const responseText = await this.agent.generate(prompt);
response = responseText.text;
} else {
const responseText = await this.agent.generateLegacy(prompt);
response = responseText.text;
}
return parseFloat(response);
}
};
exports.CohereRelevanceScorer = CohereRelevanceScorer;
exports.MastraAgentRelevanceScorer = MastraAgentRelevanceScorer;
exports.createSimilarityPrompt = createSimilarityPrompt;
//# sourceMappingURL=chunk-GZDIHQDK.cjs.map
//# sourceMappingURL=chunk-GZDIHQDK.cjs.map