e115934061
Publish `@librechat/data-schemas` to NPM / pack (push) Failing after 8s
Publish `@librechat/client` to NPM / pack (push) Failing after 0s
GitNexus Index / index (push) Failing after 1s
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Has been skipped
Sync Helm Chart Tags / Sync chart tags (push) Failing after 2s
Publish `librechat-data-provider` to NPM / pack (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Failing after 0s
Sync Helm Chart Tags / Ignore non-main push (push) Has been skipped
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Failing after 1s
Publish `@librechat/client` to NPM / publish-npm (push) Has been cancelled
Publish `librechat-data-provider` to NPM / publish-npm (push) Has been cancelled
GitNexus Index / post-index (push) Has been cancelled
Publish `@librechat/data-schemas` to NPM / publish-npm (push) Has been cancelled
80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
const { Tool } = require('@librechat/agents/langchain/tools');
|
|
const { getEnvironmentVariable } = require('@librechat/agents/langchain/utils/env');
|
|
|
|
const googleSearchJsonSchema = {
|
|
type: 'object',
|
|
properties: {
|
|
query: {
|
|
type: 'string',
|
|
minLength: 1,
|
|
description: 'The search query string.',
|
|
},
|
|
max_results: {
|
|
type: 'integer',
|
|
minimum: 1,
|
|
maximum: 10,
|
|
description: 'The maximum number of search results to return. Defaults to 5.',
|
|
},
|
|
},
|
|
required: ['query'],
|
|
};
|
|
|
|
class GoogleSearchResults extends Tool {
|
|
static lc_name() {
|
|
return 'google';
|
|
}
|
|
|
|
static get jsonSchema() {
|
|
return googleSearchJsonSchema;
|
|
}
|
|
|
|
constructor(fields = {}) {
|
|
super(fields);
|
|
this.name = 'google';
|
|
this.envVarApiKey = 'GOOGLE_SEARCH_API_KEY';
|
|
this.envVarSearchEngineId = 'GOOGLE_CSE_ID';
|
|
this.override = fields.override ?? false;
|
|
this.apiKey = fields[this.envVarApiKey] ?? getEnvironmentVariable(this.envVarApiKey);
|
|
this.searchEngineId =
|
|
fields[this.envVarSearchEngineId] ?? getEnvironmentVariable(this.envVarSearchEngineId);
|
|
|
|
if (!this.override && (!this.apiKey || !this.searchEngineId)) {
|
|
throw new Error(
|
|
`Missing ${this.envVarApiKey} or ${this.envVarSearchEngineId} environment variable.`,
|
|
);
|
|
}
|
|
|
|
this.kwargs = fields?.kwargs ?? {};
|
|
this.name = 'google';
|
|
this.description =
|
|
'A search engine optimized for comprehensive, accurate, and trusted results. Useful for when you need to answer questions about current events.';
|
|
|
|
this.schema = googleSearchJsonSchema;
|
|
}
|
|
|
|
async _call(input) {
|
|
const { query, max_results = 5 } = input;
|
|
|
|
const response = await fetch(
|
|
`https://www.googleapis.com/customsearch/v1?key=${this.apiKey}&cx=${
|
|
this.searchEngineId
|
|
}&q=${encodeURIComponent(query)}&num=${max_results}`,
|
|
{
|
|
method: 'GET',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
},
|
|
);
|
|
|
|
const json = await response.json();
|
|
if (!response.ok) {
|
|
throw new Error(`Request failed with status ${response.status}: ${json.error.message}`);
|
|
}
|
|
|
|
return JSON.stringify(json);
|
|
}
|
|
}
|
|
|
|
module.exports = GoogleSearchResults;
|