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 { SetOptional } from 'type-fest'
|
||||||
|
|
||||||
import * as types from './types'
|
import * as types from './types'
|
||||||
import { TerminalTaskTracker } from './events'
|
import { DummyTaskTracker, TaskTracker, TerminalTaskTracker } from './events'
|
||||||
import { HumanFeedbackOptions, HumanFeedbackType } from './human-feedback'
|
import { HumanFeedbackOptions, HumanFeedbackType } from './human-feedback'
|
||||||
import { HumanFeedbackMechanismCLI } from './human-feedback/cli'
|
import { HumanFeedbackMechanismCLI } from './human-feedback/cli'
|
||||||
import { OpenAIChatCompletion } from './llms/openai'
|
import { OpenAIChatCompletion } from './llms/openai'
|
||||||
|
@ -16,7 +16,7 @@ import { defaultIDGeneratorFn, isFunction, isString } from './utils'
|
||||||
export class Agentic extends EventEmitter {
|
export class Agentic extends EventEmitter {
|
||||||
protected _ky: types.KyInstance
|
protected _ky: types.KyInstance
|
||||||
protected _logger: types.Logger
|
protected _logger: types.Logger
|
||||||
protected _taskTracker: TerminalTaskTracker
|
protected _taskTracker: TaskTracker
|
||||||
|
|
||||||
protected _openai?: types.openai.OpenAIClient
|
protected _openai?: types.openai.OpenAIClient
|
||||||
protected _anthropic?: types.anthropic.Anthropic
|
protected _anthropic?: types.anthropic.Anthropic
|
||||||
|
@ -31,17 +31,48 @@ export class Agentic extends EventEmitter {
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
opts: {
|
opts: {
|
||||||
|
/**
|
||||||
|
* OpenAI client instance to use (by default, a new `openai-fetch` client will be created.)
|
||||||
|
*/
|
||||||
openai?: types.openai.OpenAIClient
|
openai?: types.openai.OpenAIClient
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Anthropic client instance to use (by default, a new `@anthropic-ai/sdk` client will be created.)
|
||||||
|
*/
|
||||||
anthropic?: types.anthropic.Anthropic
|
anthropic?: types.anthropic.Anthropic
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default values for LLM calls.
|
||||||
|
*/
|
||||||
modelDefaults?: Pick<
|
modelDefaults?: Pick<
|
||||||
types.BaseLLMOptions,
|
types.BaseLLMOptions,
|
||||||
'provider' | 'model' | 'modelParams' | 'timeoutMs' | 'retryConfig'
|
'provider' | 'model' | 'modelParams' | 'timeoutMs' | 'retryConfig'
|
||||||
>
|
>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default option values for when requesting human feedback.
|
||||||
|
*/
|
||||||
humanFeedbackDefaults?: HumanFeedbackOptions<HumanFeedbackType, any>
|
humanFeedbackDefaults?: HumanFeedbackOptions<HumanFeedbackType, any>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to generate a unique identifier for each task.
|
||||||
|
*/
|
||||||
idGeneratorFn?: types.IDGeneratorFunction
|
idGeneratorFn?: types.IDGeneratorFunction
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logger instance to use for logging events of various severities.
|
||||||
|
*/
|
||||||
logger?: types.Logger
|
logger?: types.Logger
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ky instance to use for HTTP requests.
|
||||||
|
*/
|
||||||
ky?: types.KyInstance
|
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()
|
super()
|
||||||
|
@ -58,7 +89,13 @@ export class Agentic extends EventEmitter {
|
||||||
|
|
||||||
this._ky = opts.ky ?? defaultKy
|
this._ky = opts.ky ?? defaultKy
|
||||||
this._logger = opts.logger ?? defaultLogger
|
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 || {})
|
this._openaiModelDefaults = openaiModelDefaults(opts.modelDefaults || {})
|
||||||
|
|
||||||
|
@ -98,7 +135,7 @@ export class Agentic extends EventEmitter {
|
||||||
return this._humanFeedbackDefaults
|
return this._humanFeedbackDefaults
|
||||||
}
|
}
|
||||||
|
|
||||||
public get taskTracker(): TerminalTaskTracker {
|
public get taskTracker(): TaskTracker {
|
||||||
return this._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 originalStdoutWrite = process.stdout.write
|
||||||
const originalStderrWrite = process.stderr.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 {
|
export interface TerminalTaskTrackerOptions {
|
||||||
spinnerInterval?: number
|
spinnerInterval?: number
|
||||||
inactivityInterval?: number
|
inactivityInterval?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TerminalTaskTracker {
|
export class TerminalTaskTracker extends TaskTracker {
|
||||||
protected _tree = new TreeModel()
|
protected _tree = new TreeModel()
|
||||||
protected _root = this._tree.parse({ id: 'root' })
|
protected _root = this._tree.parse({ id: 'root' })
|
||||||
protected _interval: NodeJS.Timeout | null = null
|
protected _interval: NodeJS.Timeout | null = null
|
||||||
|
@ -46,6 +76,7 @@ export class TerminalTaskTracker {
|
||||||
spinnerInterval = 150,
|
spinnerInterval = 150,
|
||||||
inactivityInterval = 2_000
|
inactivityInterval = 2_000
|
||||||
}: TerminalTaskTrackerOptions = {}) {
|
}: TerminalTaskTrackerOptions = {}) {
|
||||||
|
super()
|
||||||
this._spinnerInterval = spinnerInterval
|
this._spinnerInterval = spinnerInterval
|
||||||
this._inactivityInterval = inactivityInterval
|
this._inactivityInterval = inactivityInterval
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue