@iucteam/lot-agents
Version:
Agents for lot agentic framework
76 lines • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Wikipedia = void 0;
const tslib_1 = require("tslib");
const lot_1 = require("@iucteam/lot");
const wikipedia_1 = tslib_1.__importDefault(require("wikipedia"));
const zod_1 = require("zod");
const zod_to_json_schema_1 = tslib_1.__importDefault(require("zod-to-json-schema"));
const NoOpBrain_1 = require("../../brains/NoOpBrain");
const Validator_1 = require("../../decorators/Validator");
const Validators_1 = require("../../Validators");
class Wikipedia extends lot_1.Sensor {
constructor(config, brain = new NoOpBrain_1.NoOpBrain()) {
super(config.name, config.description, brain);
}
async detect(task) {
const inputs = task.getTaskInputs();
const action = inputs.action;
if (action === 'search') {
if (inputs.query === undefined) {
throw new Error('search action requires that a query is defined, unable to continue with Wikipedia tool');
}
lot_1.Logger.trace('Wikipedia tool is being executed for action [%s] and query [%s]', action, inputs.query);
const result = await wikipedia_1.default.search(inputs.query);
const answers = [];
for (let index = 0; index < result.results.length; index++) {
const res = result.results[index];
const page = await wikipedia_1.default.page(res.title);
const content = await page.content();
const instruction = new lot_1.Instruction(lot_1.SimpleRequirement.from(content), new lot_1.Context(), {}, this.getExpectation(), this.getDescriptor());
const thought = await this.brain.evaluate(instruction);
answers.push(new lot_1.Inference(thought.getContent(), 1).addSources([page.fullurl]));
}
return answers;
}
else if (action === 'accessPage') {
if (inputs.page === undefined) {
throw new Error('accessPage action requires that a page is defined, unable to continue with Wikipedia tool');
}
lot_1.Logger.trace('Wikipedia tool is being executed for action [%s] and page [%s]', action, inputs.page);
const page = await wikipedia_1.default.page(inputs.page);
const content = await page.content();
const instruction = new lot_1.Instruction(lot_1.SimpleRequirement.from(content), new lot_1.Context(), {}, this.getExpectation(), this.getDescriptor());
const thought = await this.brain.evaluate(instruction);
return [new lot_1.Inference(thought.getContent(), 1).addSources([page.fullurl])];
}
throw new Error(`requested to execute and unknown action ${action}`);
}
getSchema() {
return JSON.stringify((0, zod_to_json_schema_1.default)(zod_1.z.object({
action: zod_1.z.string().describe('the action to take, valid actions are: search, accessPage. Must be provided'),
query: zod_1.z.string().describe('the search query, must be provided only if the action is parameter is set to search'),
page: zod_1.z.string().describe('the page to access, must be provided only if the action is parameter is set to accessPage')
})));
}
getAgentCapabilities() {
return [];
}
}
exports.Wikipedia = Wikipedia;
tslib_1.__decorate([
(0, Validator_1.Validator)({
validator: Validators_1.definedTaskInputValidator,
message: 'task inputs must be defined for Wikipedia sensor'
}),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [lot_1.Task]),
tslib_1.__metadata("design:returntype", Promise)
], Wikipedia.prototype, "detect", null);
tslib_1.__decorate([
(0, lot_1.Cacheable)({ key: 'httpGetSchema', ttl: Infinity }),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", []),
tslib_1.__metadata("design:returntype", String)
], Wikipedia.prototype, "getSchema", null);
//# sourceMappingURL=Wikipedia.js.map