@aj-archipelago/cortex
Version:
Cortex is a GraphQL API for AI. It provides a simple, extensible interface for using AI services from OpenAI, Azure and others.
87 lines (71 loc) • 3 kB
JavaScript
import ModelPlugin from './modelPlugin.js';
import logger from '../../lib/logger.js';
import { config } from '../../config.js';
class AzureBingPlugin extends ModelPlugin {
constructor(pathway, model) {
super(pathway, model);
}
getRequestParameters(text, parameters = {}) {
const {
q, // Query string (takes precedence over text parameter)
responseFilter, // Comma-separated list of answer types to include/exclude
freshness, // 'day', 'week', 'month', or date range 'YYYY-MM-DD..YYYY-MM-DD'
answerCount, // Number of top answers to return
promote, // Comma-separated list of answer types to promote
count, // Number of webpages to return (default 10)
safeSearch = 'Moderate', // 'Off', 'Moderate', or 'Strict'
} = parameters;
const requestParameters = {
data: [],
params: {
q: q || text, // Use q if provided, otherwise fall back to text
}
};
// Add optional parameters if they exist
if (responseFilter) {
requestParameters.params.responseFilter = responseFilter;
}
if (freshness) {
requestParameters.params.freshness = freshness;
}
if (answerCount) {
requestParameters.params.answerCount = answerCount;
}
if (promote) {
requestParameters.params.promote = promote;
}
if (count) {
requestParameters.params.count = count;
}
requestParameters.params.safeSearch = safeSearch;
return requestParameters;
}
async execute(text, parameters, prompt, cortexRequest) {
if(!config.getEnv()["AZURE_BING_KEY"]){
throw new Error("AZURE_BING_KEY is not set in the environment variables!");
}
const requestParameters = this.getRequestParameters(text, parameters, prompt);
cortexRequest.data = requestParameters.data;
cortexRequest.params = requestParameters.params;
cortexRequest.method = 'GET';
// Step 1: Strip any existing endpoint after version number
cortexRequest.url = cortexRequest.url.replace(/\/v(\d+\.\d+)\/.*$/, '/v$1');
// Step 2: Add appropriate endpoint based on searchType
if (parameters.searchType === 'news') {
cortexRequest.url += '/news/search';
} else {
cortexRequest.url += '/search';
}
return this.executeRequest(cortexRequest);
}
parseResponse(data) {
return JSON.stringify(data);
}
// Override the logging function to display the request and response
logRequestData(data, responseData, prompt) {
//this.logAIRequestFinished();
logger.verbose(`${this.parseResponse(responseData)}`);
prompt && prompt.debugInfo && (prompt.debugInfo += `\n${JSON.stringify(data)}`);
}
}
export default AzureBingPlugin;