@botonic/plugin-ai-agents 0.45.0 → 0.46.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/lib/cjs/agent-builder.d.ts +3 -0
  2. package/lib/cjs/agent-builder.js +7 -15
  3. package/lib/cjs/agent-builder.js.map +1 -1
  4. package/lib/cjs/bot-config-tools.d.ts +7 -0
  5. package/lib/cjs/bot-config-tools.js +19 -0
  6. package/lib/cjs/bot-config-tools.js.map +1 -0
  7. package/lib/cjs/constants.d.ts +2 -1
  8. package/lib/cjs/constants.js +3 -2
  9. package/lib/cjs/constants.js.map +1 -1
  10. package/lib/cjs/debug-logger.d.ts +2 -1
  11. package/lib/cjs/debug-logger.js +4 -14
  12. package/lib/cjs/debug-logger.js.map +1 -1
  13. package/lib/cjs/guardrails/input.d.ts +2 -1
  14. package/lib/cjs/guardrails/input.js +7 -2
  15. package/lib/cjs/guardrails/input.js.map +1 -1
  16. package/lib/cjs/hubtype-api-client.d.ts +2 -2
  17. package/lib/cjs/hubtype-api-client.js +4 -4
  18. package/lib/cjs/hubtype-api-client.js.map +1 -1
  19. package/lib/cjs/index.d.ts +4 -1
  20. package/lib/cjs/index.js +25 -12
  21. package/lib/cjs/index.js.map +1 -1
  22. package/lib/cjs/llm-config.d.ts +15 -0
  23. package/lib/cjs/llm-config.js +66 -0
  24. package/lib/cjs/llm-config.js.map +1 -0
  25. package/lib/cjs/runner.d.ts +3 -1
  26. package/lib/cjs/runner.js +13 -3
  27. package/lib/cjs/runner.js.map +1 -1
  28. package/lib/esm/agent-builder.d.ts +3 -0
  29. package/lib/esm/agent-builder.js +7 -15
  30. package/lib/esm/agent-builder.js.map +1 -1
  31. package/lib/esm/bot-config-tools.d.ts +7 -0
  32. package/lib/esm/bot-config-tools.js +19 -0
  33. package/lib/esm/bot-config-tools.js.map +1 -0
  34. package/lib/esm/constants.d.ts +2 -1
  35. package/lib/esm/constants.js +3 -2
  36. package/lib/esm/constants.js.map +1 -1
  37. package/lib/esm/debug-logger.d.ts +2 -1
  38. package/lib/esm/debug-logger.js +4 -14
  39. package/lib/esm/debug-logger.js.map +1 -1
  40. package/lib/esm/guardrails/input.d.ts +2 -1
  41. package/lib/esm/guardrails/input.js +7 -2
  42. package/lib/esm/guardrails/input.js.map +1 -1
  43. package/lib/esm/hubtype-api-client.d.ts +2 -2
  44. package/lib/esm/hubtype-api-client.js +4 -4
  45. package/lib/esm/hubtype-api-client.js.map +1 -1
  46. package/lib/esm/index.d.ts +4 -1
  47. package/lib/esm/index.js +25 -12
  48. package/lib/esm/index.js.map +1 -1
  49. package/lib/esm/llm-config.d.ts +15 -0
  50. package/lib/esm/llm-config.js +66 -0
  51. package/lib/esm/llm-config.js.map +1 -0
  52. package/lib/esm/runner.d.ts +3 -1
  53. package/lib/esm/runner.js +13 -3
  54. package/lib/esm/runner.js.map +1 -1
  55. package/package.json +4 -3
  56. package/src/agent-builder.ts +19 -19
  57. package/src/bot-config-tools.ts +21 -0
  58. package/src/constants.ts +3 -2
  59. package/src/debug-logger.ts +7 -27
  60. package/src/guardrails/input.ts +13 -4
  61. package/src/hubtype-api-client.ts +4 -4
  62. package/src/index.ts +45 -14
  63. package/src/llm-config.ts +96 -0
  64. package/src/runner.ts +24 -4
  65. package/lib/cjs/openai.d.ts +0 -1
  66. package/lib/cjs/openai.js +0 -39
  67. package/lib/cjs/openai.js.map +0 -1
  68. package/lib/esm/openai.d.ts +0 -1
  69. package/lib/esm/openai.js +0 -39
  70. package/lib/esm/openai.js.map +0 -1
  71. package/src/openai.ts +0 -49
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLMConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const agents_1 = require("@openai/agents");
6
+ const openai_1 = tslib_1.__importStar(require("openai"));
7
+ const constants_1 = require("./constants");
8
+ class LLMConfig {
9
+ constructor(maxRetries, timeout, modelName, verbosity) {
10
+ this.maxRetries = maxRetries;
11
+ this.timeout = timeout;
12
+ this.modelName = constants_1.OPENAI_PROVIDER === 'openai' ? constants_1.OPENAI_MODEL : modelName;
13
+ this.modelProvider = this.getModelProvider();
14
+ this.modelSettings = this.getModelSettings(modelName, verbosity);
15
+ }
16
+ getModelProvider() {
17
+ const client = this.getClient();
18
+ return new agents_1.OpenAIProvider({
19
+ openAIClient: client,
20
+ useResponses: false,
21
+ });
22
+ }
23
+ getClient() {
24
+ if (constants_1.OPENAI_PROVIDER === 'openai') {
25
+ return this.getOpenAIClient();
26
+ }
27
+ return this.getAzureClient();
28
+ }
29
+ getOpenAIClient() {
30
+ return new openai_1.default({
31
+ apiKey: constants_1.OPENAI_API_KEY,
32
+ timeout: this.timeout,
33
+ maxRetries: this.maxRetries,
34
+ dangerouslyAllowBrowser: !constants_1.isProd,
35
+ });
36
+ }
37
+ getAzureClient() {
38
+ return new openai_1.AzureOpenAI({
39
+ apiKey: constants_1.AZURE_OPENAI_API_KEY,
40
+ apiVersion: constants_1.AZURE_OPENAI_API_VERSION,
41
+ deployment: this.modelName,
42
+ baseURL: constants_1.AZURE_OPENAI_API_BASE,
43
+ timeout: this.timeout,
44
+ maxRetries: this.maxRetries,
45
+ dangerouslyAllowBrowser: !constants_1.isProd,
46
+ });
47
+ }
48
+ getModelSettings(model, verbosity) {
49
+ if (model.includes('gpt-5')) {
50
+ return {
51
+ reasoning: { effort: 'none' },
52
+ temperature: 1,
53
+ text: { verbosity },
54
+ };
55
+ }
56
+ if (model.includes('gpt-4')) {
57
+ return {
58
+ temperature: 0,
59
+ text: { verbosity },
60
+ };
61
+ }
62
+ throw new Error(`Unsupported model: ${model}`);
63
+ }
64
+ }
65
+ exports.LLMConfig = LLMConfig;
66
+ //# sourceMappingURL=llm-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-config.js","sourceRoot":"","sources":["../../src/llm-config.ts"],"names":[],"mappings":";;;;AACA,2CAIuB;AACvB,yDAA4C;AAC5C,2CAQoB;AAEpB,MAAa,SAAS;IAOpB,YACE,UAAkB,EAClB,OAAe,EACf,SAAiB,EACjB,SAAyB;QAEzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,SAAS,GAAG,2BAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,wBAAY,CAAC,CAAC,CAAC,SAAS,CAAA;QACxE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAClE,CAAC;IAEO,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,OAAO,IAAI,uBAAc,CAAC;YACxB,YAAY,EAAE,MAAM;YACpB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAA;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,2BAAe,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAA;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,EAAE,CAAA;IAC9B,CAAC;IAEO,eAAe;QACrB,OAAO,IAAI,gBAAM,CAAC;YAChB,MAAM,EAAE,0BAAc;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,uBAAuB,EAAE,CAAC,kBAAM;SACjC,CAAC,CAAA;IACJ,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,oBAAW,CAAC;YACrB,MAAM,EAAE,gCAAoB;YAC5B,UAAU,EAAE,oCAAwB;YACpC,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,OAAO,EAAE,iCAAqB;YAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,uBAAuB,EAAE,CAAC,kBAAM;SACjC,CAAC,CAAA;IACJ,CAAC;IAEO,gBAAgB,CACtB,KAAa,EACb,SAAyB;QAEzB,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC7B,WAAW,EAAE,CAAC;gBACd,IAAI,EAAE,EAAE,SAAS,EAAE;aACpB,CAAA;QACH,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,WAAW,EAAE,CAAC;gBACd,IAAI,EAAE,EAAE,SAAS,EAAE;aACpB,CAAA;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC;CACF;AA9ED,8BA8EC"}
@@ -1,10 +1,12 @@
1
1
  import type { ResolvedPlugins } from '@botonic/core';
2
2
  import type { DebugLogger } from './debug-logger';
3
+ import type { LLMConfig } from './llm-config';
3
4
  import type { AgenticInputMessage, AIAgent, Context, RunResult } from './types';
4
5
  export declare class AIAgentRunner<TPlugins extends ResolvedPlugins = ResolvedPlugins, TExtraData = any> {
5
6
  private agent;
6
7
  private logger;
7
- constructor(agent: AIAgent<TPlugins, TExtraData>, logger: DebugLogger);
8
+ private llmConfig;
9
+ constructor(agent: AIAgent<TPlugins, TExtraData>, openAiClient: LLMConfig, logger: DebugLogger);
8
10
  run(messages: AgenticInputMessage[], context: Context<TPlugins, TExtraData>): Promise<RunResult>;
9
11
  private getToolsExecuted;
10
12
  private getToolResultsByCallId;
package/lib/esm/runner.js CHANGED
@@ -2,18 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AIAgentRunner = void 0;
4
4
  const agents_1 = require("@openai/agents");
5
+ const constants_1 = require("./constants");
5
6
  const tools_1 = require("./tools");
6
7
  class AIAgentRunner {
7
- constructor(agent, logger) {
8
+ constructor(agent, openAiClient, logger) {
8
9
  this.agent = agent;
10
+ this.llmConfig = openAiClient;
9
11
  this.logger = logger;
10
12
  }
11
13
  async run(messages, context) {
12
14
  const startTime = Date.now();
13
- this.logger.logRunnerStart();
15
+ this.logger.logRunnerStart(this.llmConfig.modelName, this.llmConfig.modelSettings);
14
16
  try {
17
+ const modelProvider = this.llmConfig.modelProvider;
18
+ const modelSettings = this.llmConfig.modelSettings;
19
+ const hasRetrieveKnowledge = this.agent.tools.includes(tools_1.retrieveKnowledge);
20
+ if (hasRetrieveKnowledge && constants_1.OPENAI_PROVIDER === 'azure') {
21
+ modelSettings.toolChoice = tools_1.retrieveKnowledge.name;
22
+ }
15
23
  const runner = new agents_1.Runner({
16
- modelSettings: { temperature: 0 },
24
+ modelSettings,
25
+ modelProvider,
26
+ tracingDisabled: true,
17
27
  });
18
28
  // Type assertion to bypass strict type checking - the actual return type from runner.run()
19
29
  // doesn't perfectly match our interface, but the properties we access are compatible
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/plugin-ai-agents",
3
- "version": "0.45.0",
3
+ "version": "0.46.0-alpha.0",
4
4
  "main": "./lib/cjs/index.js",
5
5
  "module": "./lib/esm/index.js",
6
6
  "description": "Use AI Agents to generate your contents",
@@ -14,12 +14,13 @@
14
14
  "format": "biome format --write src/ tests/"
15
15
  },
16
16
  "dependencies": {
17
- "@botonic/core": "^0.45.0",
17
+ "@botonic/core": "^0.46.0-alpha.0",
18
18
  "@openai/agents": "^0.3.9",
19
19
  "axios": "^1.13.6",
20
20
  "openai": "^6.0.0",
21
21
  "uuid": "^10.0.0",
22
- "zod": "3.25.76"
22
+ "zod": "3.25.76",
23
+ "zod-to-json-schema": "^3.25.1"
23
24
  },
24
25
  "devDependencies": {
25
26
  "@types/uuid": "^10.0.0"
@@ -3,12 +3,12 @@ import {
3
3
  Agent,
4
4
  type AgentOutputType,
5
5
  type InputGuardrail,
6
- type ModelSettings,
7
6
  } from '@openai/agents'
8
7
 
9
- import { OPENAI_MODEL, OPENAI_PROVIDER } from './constants'
8
+ import { OPENAI_PROVIDER } from './constants'
10
9
  import type { DebugLogger } from './debug-logger'
11
10
  import { createInputGuardrail } from './guardrails'
11
+ import type { LLMConfig } from './llm-config'
12
12
  import { OutputSchema } from './structured-output'
13
13
  import { mandatoryTools, retrieveKnowledge } from './tools'
14
14
  import type { AIAgent, Context, GuardrailRule, Tool } from './types'
@@ -24,6 +24,7 @@ interface AIAgentBuilderOptions<
24
24
  contactInfo: ContactInfo[]
25
25
  inputGuardrailRules: GuardrailRule[]
26
26
  sourceIds: string[]
27
+ llmConfig: LLMConfig
27
28
  logger: DebugLogger
28
29
  }
29
30
 
@@ -35,6 +36,7 @@ export class AIAgentBuilder<
35
36
  private instructions: string
36
37
  private tools: Tool<TPlugins, TExtraData>[]
37
38
  private inputGuardrails: InputGuardrail[]
39
+ public llmConfig: LLMConfig
38
40
  private logger: DebugLogger
39
41
 
40
42
  constructor(options: AIAgentBuilderOptions<TPlugins, TExtraData>) {
@@ -46,35 +48,34 @@ export class AIAgentBuilder<
46
48
  )
47
49
  this.tools = this.addHubtypeTools(options.tools, options.sourceIds)
48
50
  this.inputGuardrails = []
51
+ this.llmConfig = options.llmConfig
49
52
  this.logger = options.logger
50
53
  if (options.inputGuardrailRules.length > 0) {
51
- const inputGuardrail = createInputGuardrail(options.inputGuardrailRules)
54
+ const inputGuardrail = createInputGuardrail(
55
+ options.inputGuardrailRules,
56
+ options.llmConfig
57
+ )
52
58
  this.inputGuardrails.push(inputGuardrail)
53
59
  }
54
60
  }
55
61
 
56
62
  build(): AIAgent<TPlugins, TExtraData> {
57
- const modelSettings: ModelSettings = {} as ModelSettings
58
- if (OPENAI_PROVIDER === 'openai') {
59
- modelSettings.reasoning = { effort: 'none' }
60
- modelSettings.text = { verbosity: 'medium' }
61
- }
62
-
63
- const hasRetrieveKnowledge = this.tools.includes(retrieveKnowledge)
64
- if (hasRetrieveKnowledge && OPENAI_PROVIDER === 'azure') {
65
- modelSettings.toolChoice = retrieveKnowledge.name
66
- }
67
-
68
63
  // When using standard OpenAI API, we need to specify the model
69
64
  // Azure OpenAI uses deployment name instead
70
- const model = OPENAI_PROVIDER === 'openai' ? OPENAI_MODEL : undefined
65
+
66
+ const model = this.llmConfig.modelName
67
+ const hasRetrieveKnowledge = this.tools.includes(retrieveKnowledge)
71
68
 
72
69
  this.logger.logModelSettings({
73
70
  provider: OPENAI_PROVIDER,
74
71
  model,
75
- reasoning: modelSettings.reasoning as { effort: string } | undefined,
76
- text: modelSettings.text as { verbosity: string } | undefined,
77
- toolChoice: modelSettings.toolChoice as string | undefined,
72
+ reasoning: this.llmConfig.modelSettings.reasoning as
73
+ | { effort: string }
74
+ | undefined,
75
+ text: this.llmConfig.modelSettings.text as
76
+ | { verbosity: string }
77
+ | undefined,
78
+ toolChoice: this.llmConfig.modelSettings.toolChoice as string | undefined,
78
79
  hasRetrieveKnowledge,
79
80
  })
80
81
 
@@ -89,7 +90,6 @@ export class AIAgentBuilder<
89
90
  outputType: OutputSchema,
90
91
  inputGuardrails: this.inputGuardrails,
91
92
  outputGuardrails: [],
92
- modelSettings,
93
93
  })
94
94
  }
95
95
 
@@ -0,0 +1,21 @@
1
+ import type { ToolConfigJSON } from '@botonic/core'
2
+ import { zodToJsonSchema } from 'zod-to-json-schema'
3
+
4
+ import type { CustomTool } from './types'
5
+
6
+ /**
7
+ * Maps custom AI agent tools to the format expected by bot config (e.g. for flow-builder).
8
+ * Converts each tool's Zod schema to JSON Schema so it can be serialized in the config.
9
+ */
10
+ export function getToolsForBotConfig(
11
+ customTools: CustomTool[]
12
+ ): ToolConfigJSON[] {
13
+ return customTools.map(tool => ({
14
+ name: tool.name,
15
+ description: tool.description,
16
+ // Cast to avoid TS "Type instantiation is excessively deep" with zodToJsonSchema + ZodSchema
17
+ schema: zodToJsonSchema(tool.schema as never, {
18
+ $refStrategy: 'none',
19
+ }) as ToolConfigJSON['schema'],
20
+ }))
21
+ }
package/src/constants.ts CHANGED
@@ -10,11 +10,12 @@ export const OPENAI_PROVIDER: 'openai' | 'azure' =
10
10
  // Azure OpenAI Configuration
11
11
  export const AZURE_OPENAI_API_KEY = process.env.AZURE_OPENAI_API_KEY // pragma: allowlist secret
12
12
  export const AZURE_OPENAI_API_BASE = process.env.AZURE_OPENAI_API_BASE
13
- export const AZURE_OPENAI_API_DEPLOYMENT_NAME =
14
- process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME || 'gpt-41-mini_p1'
15
13
  export const AZURE_OPENAI_API_VERSION =
16
14
  process.env.AZURE_OPENAI_API_VERSION || '2025-01-01-preview'
17
15
 
18
16
  export const isProd = process.env.NODE_ENV === 'production'
19
17
 
20
18
  export const MAX_MEMORY_LENGTH = 25
19
+
20
+ export const DEFAULT_TIMEOUT_16_SECONDS = 16000
21
+ export const DEFAULT_MAX_RETRIES = 2
@@ -1,12 +1,6 @@
1
1
  import type { AiAgentArgs, ToolExecution } from '@botonic/core'
2
-
3
- import {
4
- AZURE_OPENAI_API_BASE,
5
- AZURE_OPENAI_API_DEPLOYMENT_NAME,
6
- MAX_MEMORY_LENGTH,
7
- OPENAI_MODEL,
8
- OPENAI_PROVIDER,
9
- } from './constants'
2
+ import type { ModelSettings } from '@openai/agents'
3
+ import { MAX_MEMORY_LENGTH, OPENAI_PROVIDER } from './constants'
10
4
  import type { AgenticInputMessage, MemoryOptions, RunResult } from './types'
11
5
 
12
6
  const PREFIX = '[BotonicPluginAiAgents]'
@@ -36,7 +30,7 @@ export interface DebugLogger {
36
30
  messages: AgenticInputMessage[]
37
31
  ): void
38
32
  logModelSettings(settings: ModelSettingsInfo): void
39
- logRunnerStart(): void
33
+ logRunnerStart(model: string, modelSettings: ModelSettings): void
40
34
  logRunResult(runResult: RunResult, startTime: number): void
41
35
  logGuardrailTriggered(): void
42
36
  logRunnerError(startTime: number, error: unknown): void
@@ -44,25 +38,9 @@ export interface DebugLogger {
44
38
  }
45
39
 
46
40
  class EnabledDebugLogger implements DebugLogger {
47
- private getModelInfo(): { model: string; apiBase: string } {
48
- const model =
49
- OPENAI_PROVIDER === 'azure'
50
- ? AZURE_OPENAI_API_DEPLOYMENT_NAME
51
- : OPENAI_MODEL
52
- const apiBase =
53
- OPENAI_PROVIDER === 'azure' && AZURE_OPENAI_API_BASE
54
- ? AZURE_OPENAI_API_BASE
55
- : 'OpenAI API'
56
- return { model, apiBase }
57
- }
58
-
59
41
  logInitialConfig(config: DebugLoggerConfig): void {
60
- const { model, apiBase } = this.getModelInfo()
61
-
62
42
  console.log(`${PREFIX} === Plugin Initialization ===`)
63
43
  console.log(`${PREFIX} Provider: ${OPENAI_PROVIDER}`)
64
- console.log(`${PREFIX} Model/Deployment: ${model}`)
65
- console.log(`${PREFIX} API Base: ${apiBase}`)
66
44
  console.log(
67
45
  `${PREFIX} Message History API Version: ${config.messageHistoryApiVersion}`
68
46
  )
@@ -117,8 +95,10 @@ class EnabledDebugLogger implements DebugLogger {
117
95
  console.log(`${PREFIX} === End Model Settings ===`)
118
96
  }
119
97
 
120
- logRunnerStart(): void {
98
+ logRunnerStart(model: string, modelSettings: ModelSettings): void {
121
99
  console.log(`${PREFIX} === Runner Execution Start ===`)
100
+ console.log(`${PREFIX} Model: ${model}`)
101
+ console.log(`${PREFIX} Model Settings: ${JSON.stringify(modelSettings)}`)
122
102
  }
123
103
 
124
104
  logRunResult(runResult: RunResult, startTime: number): void {
@@ -174,7 +154,7 @@ class DisabledDebugLogger implements DebugLogger {
174
154
  logInitialConfig(): void {}
175
155
  logAgentDebugInfo(): void {}
176
156
  logModelSettings(): void {}
177
- logRunnerStart(): void {}
157
+ logRunnerStart(_model: string, _modelSettings: ModelSettings): void {}
178
158
  logRunResult(): void {}
179
159
  logGuardrailTriggered(): void {}
180
160
  logRunnerError(): void {}
@@ -1,14 +1,17 @@
1
1
  import {
2
2
  Agent,
3
3
  type InputGuardrail,
4
- run,
4
+ Runner,
5
5
  type UserMessageItem,
6
6
  } from '@openai/agents'
7
7
  import { z } from 'zod'
8
-
8
+ import type { LLMConfig } from '../llm-config'
9
9
  import type { GuardrailRule } from '../types'
10
10
 
11
- export function createInputGuardrail(rules: GuardrailRule[]): InputGuardrail {
11
+ export function createInputGuardrail(
12
+ rules: GuardrailRule[],
13
+ llmConfig: LLMConfig
14
+ ): InputGuardrail {
12
15
  const outputType = z.object(
13
16
  Object.fromEntries(
14
17
  rules.map(rule => [rule.name, z.boolean().describe(rule.description)])
@@ -26,7 +29,13 @@ export function createInputGuardrail(rules: GuardrailRule[]): InputGuardrail {
26
29
  name: 'InputGuardrail',
27
30
  execute: async ({ input, context }) => {
28
31
  const lastMessage = input[input.length - 1] as UserMessageItem
29
- const result = await run(agent, [lastMessage], { context })
32
+ const runner = new Runner({
33
+ modelSettings: llmConfig.modelSettings,
34
+ modelProvider: llmConfig.modelProvider,
35
+ tracingDisabled: true,
36
+ })
37
+ const result = await runner.run(agent, [lastMessage], { context })
38
+
30
39
  const finalOutput = result.finalOutput as Record<string, boolean>
31
40
  if (finalOutput === undefined) {
32
41
  throw new Error('Guardrail agent failed to produce output')
@@ -131,7 +131,7 @@ export class HubtypeApiClient {
131
131
  }
132
132
 
133
133
  async getMessages(
134
- request: BotContext,
134
+ botContext: BotContext,
135
135
  maxMemoryLength: number
136
136
  ): Promise<AgenticInputMessage[]> {
137
137
  const url = `${HUBTYPE_API_URL}/external/v1/ai/agent/message_history/`
@@ -140,7 +140,7 @@ export class HubtypeApiClient {
140
140
  Authorization: `Bearer ${this.authToken}`,
141
141
  }
142
142
  const params = {
143
- last_message_id: request.input.message_id,
143
+ last_message_id: botContext.input.message_id,
144
144
  num_messages: maxMemoryLength,
145
145
  }
146
146
 
@@ -158,7 +158,7 @@ export class HubtypeApiClient {
158
158
  }
159
159
 
160
160
  async getMessagesV2(
161
- request: BotContext,
161
+ botContext: BotContext,
162
162
  options: GetMessagesV2Options = {}
163
163
  ): Promise<GetMessagesV2Result> {
164
164
  const url = `${HUBTYPE_API_URL}/external/v2/ai/agent/message_history/`
@@ -167,7 +167,7 @@ export class HubtypeApiClient {
167
167
  Authorization: `Bearer ${this.authToken}`,
168
168
  }
169
169
  const params: MessageHistoryV2Params = {
170
- last_message_id: request.input.message_id,
170
+ last_message_id: botContext.input.message_id,
171
171
  ...(options.maxMessages !== undefined && {
172
172
  max_messages: options.maxMessages,
173
173
  }),
package/src/index.ts CHANGED
@@ -7,10 +7,15 @@ import type {
7
7
  import { tool } from '@openai/agents'
8
8
 
9
9
  import { AIAgentBuilder } from './agent-builder'
10
- import { isProd, MAX_MEMORY_LENGTH } from './constants'
10
+ import {
11
+ DEFAULT_MAX_RETRIES,
12
+ DEFAULT_TIMEOUT_16_SECONDS,
13
+ isProd,
14
+ MAX_MEMORY_LENGTH,
15
+ } from './constants'
11
16
  import { createDebugLogger, type DebugLogger } from './debug-logger'
12
17
  import { HubtypeApiClient } from './hubtype-api-client'
13
- import { setUpOpenAI } from './openai'
18
+ import { LLMConfig } from './llm-config'
14
19
  import { AIAgentRunner } from './runner'
15
20
  import type {
16
21
  AgenticInputMessage,
@@ -32,11 +37,11 @@ export default class BotonicPluginAiAgents<
32
37
  private readonly messageHistoryApiVersion: MessageHistoryApiVersion
33
38
  private readonly memory: MemoryOptions
34
39
  private readonly logger: DebugLogger
40
+ private readonly timeout: number
41
+ private readonly maxRetries: number
35
42
  public toolDefinitions: CustomTool<TPlugins, TExtraData>[] = []
36
43
 
37
44
  constructor(options?: PluginAiAgentOptions<TPlugins, TExtraData>) {
38
- setUpOpenAI(options?.maxRetries, options?.timeout)
39
-
40
45
  if (options?.messageHistoryApiVersion === 'v1' && options?.memory) {
41
46
  throw new Error(
42
47
  'Cannot use memory when messageHistoryApiVersion is "v1". ' +
@@ -48,6 +53,8 @@ export default class BotonicPluginAiAgents<
48
53
  this.toolDefinitions = options?.customTools || []
49
54
  this.messageHistoryApiVersion = options?.messageHistoryApiVersion ?? 'v2'
50
55
  this.memory = options?.memory ?? {}
56
+ this.timeout = options?.timeout ?? DEFAULT_TIMEOUT_16_SECONDS
57
+ this.maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES
51
58
  this.logger = createDebugLogger(options?.enableDebug ?? false)
52
59
 
53
60
  this.logger.logInitialConfig({
@@ -64,34 +71,51 @@ export default class BotonicPluginAiAgents<
64
71
  }
65
72
 
66
73
  async getInference(
67
- request: BotContext<TPlugins, TExtraData>,
74
+ botContext: BotContext<TPlugins, TExtraData>,
68
75
  aiAgentArgs: AiAgentArgs
69
76
  ): Promise<InferenceResponse> {
70
77
  try {
71
- const authToken = isProd ? request.session._access_token : this.authToken
78
+ const authToken = isProd
79
+ ? botContext.session._access_token
80
+ : this.authToken
72
81
  if (!authToken) {
73
82
  throw new Error('Auth token is required')
74
83
  }
75
84
 
85
+ // Create client for OpenAI/Azure OpenAI
86
+ const llmConfig = new LLMConfig(
87
+ this.maxRetries,
88
+ this.timeout,
89
+ aiAgentArgs.model,
90
+ aiAgentArgs.verbosity
91
+ )
92
+
93
+ // Build tools
76
94
  const tools = this.buildTools(
77
95
  aiAgentArgs.activeTools?.map(tool => tool.name) || []
78
96
  )
97
+
98
+ // Build agent
79
99
  const agent = new AIAgentBuilder<TPlugins, TExtraData>({
80
100
  name: aiAgentArgs.name,
81
101
  instructions: aiAgentArgs.instructions,
82
102
  tools: tools,
83
- contactInfo: request.session.user.contact_info || [],
103
+ contactInfo: botContext.session.user.contact_info || [],
84
104
  inputGuardrailRules: aiAgentArgs.inputGuardrailRules || [],
85
105
  sourceIds: aiAgentArgs.sourceIds || [],
86
- campaignsContext: request.input.context?.campaigns_v2,
106
+ campaignsContext: botContext.input.context?.campaigns_v2,
87
107
  logger: this.logger,
108
+ llmConfig,
88
109
  }).build()
89
110
 
111
+ // Get messages
90
112
  const messages = await this.getMessages(
91
- request,
113
+ botContext,
92
114
  authToken,
93
115
  MAX_MEMORY_LENGTH
94
116
  )
117
+
118
+ // Build context
95
119
  const context: Context<TPlugins, TExtraData> = {
96
120
  authToken,
97
121
  sourceIds: aiAgentArgs.sourceIds || [],
@@ -101,16 +125,22 @@ export default class BotonicPluginAiAgents<
101
125
  chunksIds: [],
102
126
  chunkTexts: [],
103
127
  },
104
- request,
128
+ request: botContext,
105
129
  }
106
130
 
131
+ // Log agent debug info
107
132
  this.logger.logAgentDebugInfo(
108
133
  aiAgentArgs,
109
134
  tools.map(t => t.name),
110
135
  messages
111
136
  )
112
137
 
113
- const runner = new AIAgentRunner<TPlugins, TExtraData>(agent, this.logger)
138
+ // Run agent
139
+ const runner = new AIAgentRunner<TPlugins, TExtraData>(
140
+ agent,
141
+ llmConfig,
142
+ this.logger
143
+ )
114
144
  return await runner.run(messages, context)
115
145
  } catch (error) {
116
146
  console.error('error plugin returns undefined', error)
@@ -127,7 +157,7 @@ export default class BotonicPluginAiAgents<
127
157
  }
128
158
 
129
159
  private async getMessages(
130
- request: BotContext,
160
+ botContext: BotContext,
131
161
  authToken: string,
132
162
  memoryLength: number
133
163
  ): Promise<AgenticInputMessage[]> {
@@ -138,11 +168,11 @@ export default class BotonicPluginAiAgents<
138
168
  }
139
169
 
140
170
  if (this.messageHistoryApiVersion === 'v1') {
141
- return await hubtypeClient.getMessages(request, memoryLength)
171
+ return await hubtypeClient.getMessages(botContext, memoryLength)
142
172
  }
143
173
 
144
174
  // Default to V2
145
- const result = await hubtypeClient.getMessagesV2(request, {
175
+ const result = await hubtypeClient.getMessagesV2(botContext, {
146
176
  maxMessages: this.memory.maxMessages ?? memoryLength,
147
177
  includeToolCalls: this.memory.includeToolCalls ?? true,
148
178
  maxFullToolResults: this.memory.maxFullToolResults ?? 1,
@@ -166,4 +196,5 @@ export default class BotonicPluginAiAgents<
166
196
  }
167
197
  }
168
198
 
199
+ export * from './bot-config-tools'
169
200
  export * from './types'