feat: allow disabling task tracking via terminal

old-agentic-v1^2
Philipp Burckhardt 2023-07-09 21:53:01 -04:00
rodzic a62c41afe1
commit 15a0c83cb9
2 zmienionych plików z 74 dodań i 6 usunięć

Wyświetl plik

@ -5,7 +5,7 @@ import { OpenAIClient } from 'openai-fetch'
import { SetOptional } from 'type-fest'
import * as types from './types'
import { TerminalTaskTracker } from './events'
import { DummyTaskTracker, TaskTracker, TerminalTaskTracker } from './events'
import { HumanFeedbackOptions, HumanFeedbackType } from './human-feedback'
import { HumanFeedbackMechanismCLI } from './human-feedback/cli'
import { OpenAIChatCompletion } from './llms/openai'
@ -16,7 +16,7 @@ import { defaultIDGeneratorFn, isFunction, isString } from './utils'
export class Agentic extends EventEmitter {
protected _ky: types.KyInstance
protected _logger: types.Logger
protected _taskTracker: TerminalTaskTracker
protected _taskTracker: TaskTracker
protected _openai?: types.openai.OpenAIClient
protected _anthropic?: types.anthropic.Anthropic
@ -31,17 +31,48 @@ export class Agentic extends EventEmitter {
constructor(
opts: {
/**
* OpenAI client instance to use (by default, a new `openai-fetch` client will be created.)
*/
openai?: types.openai.OpenAIClient
/**
* Anthropic client instance to use (by default, a new `@anthropic-ai/sdk` client will be created.)
*/
anthropic?: types.anthropic.Anthropic
/**
* Default values for LLM calls.
*/
modelDefaults?: Pick<
types.BaseLLMOptions,
'provider' | 'model' | 'modelParams' | 'timeoutMs' | 'retryConfig'
>
/**
* Default option values for when requesting human feedback.
*/
humanFeedbackDefaults?: HumanFeedbackOptions<HumanFeedbackType, any>
/**
* Function to generate a unique identifier for each task.
*/
idGeneratorFn?: types.IDGeneratorFunction
/**
* Logger instance to use for logging events of various severities.
*/
logger?: types.Logger
/**
* Ky instance to use for HTTP requests.
*/
ky?: types.KyInstance
taskTracker?: TerminalTaskTracker
/**
* A task tracker or `false` to disable. By default, tasks will be tracked via the terminal.
*/
taskTracker?: TaskTracker | false
} = {}
) {
super()
@ -58,7 +89,13 @@ export class Agentic extends EventEmitter {
this._ky = opts.ky ?? defaultKy
this._logger = opts.logger ?? defaultLogger
this._taskTracker = opts.taskTracker ?? new TerminalTaskTracker()
if (opts.taskTracker) {
this._taskTracker = opts.taskTracker
} else if (opts.taskTracker === false) {
this._taskTracker = new DummyTaskTracker()
} else {
this._taskTracker = new TerminalTaskTracker()
}
this._openaiModelDefaults = openaiModelDefaults(opts.modelDefaults || {})
@ -98,7 +135,7 @@ export class Agentic extends EventEmitter {
return this._humanFeedbackDefaults
}
public get taskTracker(): TerminalTaskTracker {
public get taskTracker(): TaskTracker {
return this._taskTracker
}

Wyświetl plik

@ -20,12 +20,42 @@ const RE_ANSI_ESCAPES = /^(\x1b\[[0-9;]*[ABCDHJK]|[\r\n])+$/ // cursor movement,
const originalStdoutWrite = process.stdout.write
const originalStderrWrite = process.stderr.write
export abstract class TaskTracker {
abstract start(): void
abstract close(): void
abstract pause(message?: string): void
abstract resume(): void
abstract addEvent<TInput, TOutput>(event: TaskEvent<TInput, TOutput>): void
abstract render(): void
}
export class DummyTaskTracker extends TaskTracker {
start(): void {
// Does nothing
}
close(): void {
// Does nothing
}
pause(): void {
// Does nothing
}
resume(): void {
// Does nothing
}
addEvent(): void {
// Does nothing
}
render(): void {
// Does nothing
}
}
export interface TerminalTaskTrackerOptions {
spinnerInterval?: number
inactivityInterval?: number
}
export class TerminalTaskTracker {
export class TerminalTaskTracker extends TaskTracker {
protected _tree = new TreeModel()
protected _root = this._tree.parse({ id: 'root' })
protected _interval: NodeJS.Timeout | null = null
@ -46,6 +76,7 @@ export class TerminalTaskTracker {
spinnerInterval = 150,
inactivityInterval = 2_000
}: TerminalTaskTrackerOptions = {}) {
super()
this._spinnerInterval = spinnerInterval
this._inactivityInterval = inactivityInterval