kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
feat: allow disabling task tracking via terminal
rodzic
a62c41afe1
commit
15a0c83cb9
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue