From 69efdb50856e6cee47848bce60a2d74534cce436 Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Sat, 8 Jul 2023 15:31:49 -0400 Subject: [PATCH] feat: format output differently depending on mechanism --- packages/core/src/human-feedback/cli.ts | 27 ++++++++++++-------- packages/core/src/human-feedback/dummy.ts | 4 +++ packages/core/src/human-feedback/feedback.ts | 8 +++--- packages/core/src/human-feedback/slack.ts | 4 +++ packages/core/src/human-feedback/twilio.ts | 4 +++ 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/packages/core/src/human-feedback/cli.ts b/packages/core/src/human-feedback/cli.ts index c402fc6..b0f6e37 100644 --- a/packages/core/src/human-feedback/cli.ts +++ b/packages/core/src/human-feedback/cli.ts @@ -2,6 +2,7 @@ import checkbox from '@inquirer/checkbox' import editor from '@inquirer/editor' import input from '@inquirer/input' import select from '@inquirer/select' +import { gray } from 'colorette' import { setTimeout } from 'timers/promises' import { BaseTask } from '@/task' @@ -87,17 +88,8 @@ export class HumanFeedbackMechanismCLI< return Promise.race([rejectError, promise]) } - protected async _edit(output: string): Promise { - return this._defaultAfterTimeout( - editor( - { - message: 'Edit the output:', - default: output - }, - INQUIRER_CONTEXT - ), - output - ) + protected _formatOutput(output: string): string { + return gray(output) } protected async _annotate(): Promise { @@ -113,6 +105,19 @@ export class HumanFeedbackMechanismCLI< ) } + protected async _edit(output: string): Promise { + return this._defaultAfterTimeout( + editor( + { + message: 'Edit the output:', + default: output + }, + INQUIRER_CONTEXT + ), + output + ) + } + protected async _select( response: TOutput ): Promise { diff --git a/packages/core/src/human-feedback/dummy.ts b/packages/core/src/human-feedback/dummy.ts index 2a4f549..a10cafb 100644 --- a/packages/core/src/human-feedback/dummy.ts +++ b/packages/core/src/human-feedback/dummy.ts @@ -14,6 +14,10 @@ export class HumanFeedbackMechanismDummy< return output[0] as any } + protected _formatOutput() { + return '' + } + protected async _multiselect( output: TOutput ): Promise { diff --git a/packages/core/src/human-feedback/feedback.ts b/packages/core/src/human-feedback/feedback.ts index 54253d3..edec96a 100644 --- a/packages/core/src/human-feedback/feedback.ts +++ b/packages/core/src/human-feedback/feedback.ts @@ -178,6 +178,8 @@ export abstract class HumanFeedbackMechanism< return this._task.outputSchema.parse(parsedOutput) } + protected abstract _formatOutput(output: string): string + public async interact(output: TOutput): Promise> { const stringified = JSON.stringify(output, null, 2) const taskDetails = `${this._task.nameForHuman} (ID: ${this._task.id})` @@ -186,9 +188,7 @@ export abstract class HumanFeedbackMechanism< const msg = [ taskDetails, outputLabel, - '```', - stringified, - '```', + this._formatOutput(stringified), 'What would you like to do?' ].join('\n') @@ -200,8 +200,8 @@ export abstract class HumanFeedbackMechanism< choices.push(HumanFeedbackUserActions.Select) } else { // Case: confirm - choices.push(HumanFeedbackUserActions.Accept) choices.push(HumanFeedbackUserActions.Decline) + choices.push(HumanFeedbackUserActions.Accept) } if (this._options.editing) { diff --git a/packages/core/src/human-feedback/slack.ts b/packages/core/src/human-feedback/slack.ts index b4ba411..6265616 100644 --- a/packages/core/src/human-feedback/slack.ts +++ b/packages/core/src/human-feedback/slack.ts @@ -28,6 +28,10 @@ export class HumanFeedbackMechanismSlack< this._slackClient = slackClient } + protected _formatOutput(output: string): string { + return ['```', output, '```'].join('\n') + } + protected async _annotate(): Promise { try { const annotation = await this._slackClient.sendAndWaitForReply({ diff --git a/packages/core/src/human-feedback/twilio.ts b/packages/core/src/human-feedback/twilio.ts index 9e8dc10..3d963a0 100644 --- a/packages/core/src/human-feedback/twilio.ts +++ b/packages/core/src/human-feedback/twilio.ts @@ -28,6 +28,10 @@ export class HumanFeedbackMechanismTwilio< this._twilioClient = twilioClient } + protected _formatOutput(output: string): string { + return output + } + protected async _annotate(): Promise { try { const annotation = await this._twilioClient.sendAndWaitForReply({