From fbe0b901ef421d2cea9e8167427c54b3615799af Mon Sep 17 00:00:00 2001 From: Philipp Burckhardt Date: Sun, 9 Jul 2023 10:52:02 -0400 Subject: [PATCH] feat: allow setting model via env, rename opt to modelDefaults, and fix setting of retryConfig --- packages/core/src/agentic.ts | 17 +++-------------- packages/core/src/constants.ts | 1 - packages/core/src/llms/openai.ts | 7 +++++-- packages/core/src/model_defaults.ts | 24 ++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 17 deletions(-) create mode 100644 packages/core/src/model_defaults.ts diff --git a/packages/core/src/agentic.ts b/packages/core/src/agentic.ts index e543eb5..adb4512 100644 --- a/packages/core/src/agentic.ts +++ b/packages/core/src/agentic.ts @@ -3,12 +3,12 @@ import defaultKy from 'ky' import { SetOptional } from 'type-fest' import * as types from './types' -import { DEFAULT_OPENAI_MODEL } from './constants' import { TerminalTaskTracker } from './events' import { HumanFeedbackOptions, HumanFeedbackType } from './human-feedback' import { HumanFeedbackMechanismCLI } from './human-feedback/cli' import { OpenAIChatCompletion } from './llms/openai' import { defaultLogger } from './logger' +import { openaiModelDefaults } from './model_defaults' import { defaultIDGeneratorFn, isFunction, isString } from './utils' export class Agentic extends EventEmitter { @@ -30,7 +30,7 @@ export class Agentic extends EventEmitter { constructor(opts: { openai?: types.openai.OpenAIClient anthropic?: types.anthropic.Client - openaiModelDefaults?: Pick< + modelDefaults?: Pick< types.BaseLLMOptions, 'provider' | 'model' | 'modelParams' | 'timeoutMs' | 'retryConfig' > @@ -56,18 +56,7 @@ export class Agentic extends EventEmitter { this._logger = opts.logger ?? defaultLogger this._taskTracker = opts.taskTracker ?? new TerminalTaskTracker() - this._openaiModelDefaults = { - provider: 'openai', - model: DEFAULT_OPENAI_MODEL, - modelParams: {}, - timeoutMs: 2 * 60000, - retryConfig: { - retries: 2, - strategy: 'heal', - ...opts.openaiModelDefaults?.retryConfig - }, - ...opts.openaiModelDefaults - } + this._openaiModelDefaults = openaiModelDefaults(opts.modelDefaults || {}) // TODO // this._anthropicModelDefaults = {} diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 207c67d..ab016b8 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -1,4 +1,3 @@ -export const DEFAULT_OPENAI_MODEL = 'gpt-3.5-turbo' export const DEFAULT_ANTHROPIC_MODEL = 'claude-instant-v1' export const DEFAULT_BOT_NAME = 'Agentic Bot' export const SKIP_HOOKS = Symbol('SKIP_HOOKS') diff --git a/packages/core/src/llms/openai.ts b/packages/core/src/llms/openai.ts index 72f4a3d..473ec74 100644 --- a/packages/core/src/llms/openai.ts +++ b/packages/core/src/llms/openai.ts @@ -1,7 +1,7 @@ import type { SetOptional } from 'type-fest' import * as types from '@/types' -import { DEFAULT_OPENAI_MODEL } from '@/constants' +import { getEnv } from '@/env' import { BaseTask } from '@/task' import { BaseChatCompletion } from './chat' @@ -31,7 +31,10 @@ export class OpenAIChatCompletion< SetOptional, 'model'> > ) { - const model = options.modelParams?.model || DEFAULT_OPENAI_MODEL + const model = + options.modelParams?.model ?? + getEnv('OPENAI_MODEL') ?? + getEnv('OPENAI_DEFAULT_MODEL', 'gpt-3.5-turbo') super({ provider: 'openai', model, diff --git a/packages/core/src/model_defaults.ts b/packages/core/src/model_defaults.ts new file mode 100644 index 0000000..fe88177 --- /dev/null +++ b/packages/core/src/model_defaults.ts @@ -0,0 +1,24 @@ +import * as types from './types' +import { getEnv } from './env' + +export function openaiModelDefaults( + opts: Pick< + types.BaseLLMOptions, + 'provider' | 'model' | 'modelParams' | 'timeoutMs' | 'retryConfig' + > +) { + const { retryConfig, modelParams, ...rest } = opts + return { + provider: 'openai', + model: + getEnv('OPENAI_MODEL') ?? getEnv('OPENAI_DEFAULT_MODEL', 'gpt-3.5-turbo'), + modelParams: {}, + timeoutMs: 2 * 60000, + retryConfig: { + retries: 2, + strategy: 'heal', + ...retryConfig + }, + ...rest + } +}