donobu
Version:
Create browser automations with an LLM agent and replay them as Playwright scripts.
60 lines (59 loc) • 3.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AggregateExtractedStreetviewDataTool = void 0;
const Tool_1 = require("./Tool");
const ExtractGoogleStreetviewEntityDataTool_1 = require("./ExtractGoogleStreetviewEntityDataTool");
/**
* Ends the current flow by aggregating the data gathered by the ExtractGoogleStreetviewEntityDataTool
* and GoToGoogleMapsStreetViewTool classes (likely kicked off by SpecialFlowsApi#extractGoogleStreetviewEntityData.
* Note that there is special handling using the ExtractGoogleStreetviewEntityDataTool's
* "recommendedNextStepForStreetViewNavigator", and "isBusinessMatch" fields. Additionally, there is
* a check to see if GoToGoogleMapsStreetViewTool failed, since the entire flow is
* predicated on that step succeeding.
*/
class AggregateExtractedStreetviewDataTool extends Tool_1.Tool {
constructor() {
const extractTool = new ExtractGoogleStreetviewEntityDataTool_1.ExtractGoogleStreetviewEntityDataTool();
super(AggregateExtractedStreetviewDataTool.NAME, `Aggregate data extracted by the '${extractTool.name}' tool and end the flow.
IMPORTANT: Only business/entity data extracted via the '${extractTool.name}' tool is considered for this operation! Do NOT
call this tool until all the relevant business/entity data has been extracted via that tool! Note that you
need to call the '${extractTool.name}' for each unique street view!`, 'AggregateExtractedStreetviewDataToolCoreParameters', 'AggregateExtractedStreetviewDataToolGptParameters');
}
async call(context, _parameters) {
const resultMetadata = AggregateExtractedStreetviewDataTool.aggregateStreetviewData(context.invokedToolCalls, context.metadata);
return {
isSuccessful: true,
forLlm: 'Successfully aggregated the extracted street view data.',
metadata: resultMetadata,
};
}
static aggregateStreetviewData(invokedToolCalls, metadata) {
const extractBusinessDataTool = new ExtractGoogleStreetviewEntityDataTool_1.ExtractGoogleStreetviewEntityDataTool();
const accumulatedResults = invokedToolCalls
.filter((tc) => tc.toolName === extractBusinessDataTool.name)
.map((tc) => tc.outcome)
.filter((outcome) => outcome.metadata !== null)
.map((outcome) => outcome.metadata)
.filter((metadata) => metadata.businessSignage !== undefined)
.sort((a, b) => {
// Sort in reverse order (true values first)
return b.isBusinessMatch - a.isBusinessMatch;
})
.map((metadata) => {
const copy = { ...metadata };
delete copy.recommendedNextStepForStreetViewNavigator;
return copy;
});
metadata.nextState = 'SUCCESS';
return {
streetviews: accumulatedResults,
flowId: metadata.id,
};
}
async callFromGpt(context, parameters) {
return this.call(context, parameters);
}
}
exports.AggregateExtractedStreetviewDataTool = AggregateExtractedStreetviewDataTool;
AggregateExtractedStreetviewDataTool.NAME = 'aggregateExtractedStreetviewData';
//# sourceMappingURL=AggregateExtractedStreetviewDataTool.js.map