1- import { LDLogger } from '@launchdarkly/js-server-sdk-common' ;
2-
31import { LDAIConfigTracker } from './LDAIConfigTracker' ;
42import {
53 LDAIAgentConfig ,
@@ -98,20 +96,19 @@ export class LDAIConfigUtils {
9896 key : string ,
9997 flagValue : LDAIConfigFlagValue ,
10098 trackerFactory : ( ) => LDAIConfigTracker ,
101- logger ?: LDLogger ,
10299 ) : LDAIConfigKind {
103100 // Determine the actual mode from flag value
104101 // eslint-disable-next-line no-underscore-dangle
105102 const flagValueMode = flagValue . _ldMeta ?. mode ;
106103
107104 switch ( flagValueMode ) {
108105 case 'agent' :
109- return this . toAgentConfig ( key , flagValue , trackerFactory , logger ) ;
106+ return this . toAgentConfig ( key , flagValue , trackerFactory ) ;
110107 case 'judge' :
111108 return this . toJudgeConfig ( key , flagValue , trackerFactory ) ;
112109 case 'completion' :
113110 default :
114- return this . toCompletionConfig ( key , flagValue , trackerFactory , logger ) ;
111+ return this . toCompletionConfig ( key , flagValue , trackerFactory ) ;
115112 }
116113 }
117114
@@ -146,70 +143,26 @@ export class LDAIConfigUtils {
146143 }
147144 }
148145
149- private static _parseToolsMap (
150- toolsMap : { [ key : string ] : unknown } ,
151- logger : LDLogger | undefined ,
152- ) : { [ toolName : string ] : LDTool } {
153- const result : { [ toolName : string ] : LDTool } = { } ;
154- for ( const [ toolName , toolValue ] of Object . entries ( toolsMap ) ) {
155- if ( toolValue === null || typeof toolValue !== 'object' || Array . isArray ( toolValue ) ) {
156- logger ?. warn ( `LaunchDarkly AI: Skipping tool "${ toolName } ": expected an object` ) ;
157- continue ;
158- }
159- const toolObj = toolValue as { [ key : string ] : unknown } ;
160- result [ toolName ] = {
161- name : typeof toolObj [ 'name' ] === 'string' ? toolObj [ 'name' ] : toolName ,
162- description :
163- typeof toolObj [ 'description' ] === 'string' ? toolObj [ 'description' ] : undefined ,
164- type : typeof toolObj [ 'type' ] === 'string' ? toolObj [ 'type' ] : undefined ,
165- parameters :
166- toolObj [ 'parameters' ] !== null &&
167- typeof toolObj [ 'parameters' ] === 'object' &&
168- ! Array . isArray ( toolObj [ 'parameters' ] )
169- ? ( toolObj [ 'parameters' ] as LDTool [ 'parameters' ] )
170- : undefined ,
171- customParameters :
172- toolObj [ 'customParameters' ] !== null &&
173- typeof toolObj [ 'customParameters' ] === 'object' &&
174- ! Array . isArray ( toolObj [ 'customParameters' ] )
175- ? ( toolObj [ 'customParameters' ] as LDTool [ 'customParameters' ] )
176- : undefined ,
177- } ;
178- }
179- return result ;
180- }
181-
182146 private static _resolveTools (
183147 flagValue : LDAIConfigFlagValue ,
184- logger ?: LDLogger ,
185148 ) : { [ toolName : string ] : LDTool } | undefined {
186149 if ( flagValue . tools !== undefined ) {
187- if (
188- flagValue . tools === null ||
189- typeof flagValue . tools !== 'object' ||
190- Array . isArray ( flagValue . tools )
191- ) {
192- logger ?. warn (
193- `LaunchDarkly AI: Skipping tools: expected an object, got ${ Array . isArray ( flagValue . tools ) ? 'array' : typeof flagValue . tools } ` ,
194- ) ;
195- return undefined ;
196- }
197- const parsed = this . _parseToolsMap ( flagValue . tools as { [ key : string ] : unknown } , logger ) ;
198- return Object . keys ( parsed ) . length > 0 ? parsed : undefined ;
150+ return flagValue . tools as { [ toolName : string ] : LDTool } | undefined ;
199151 }
200152
201153 const rawTools = flagValue . model ?. parameters ?. [ 'tools' ] ;
202-
203- if ( rawTools === null || rawTools === undefined ) {
154+ if ( ! Array . isArray ( rawTools ) ) {
204155 return undefined ;
205156 }
206157
207- if ( typeof rawTools !== 'object' || Array . isArray ( rawTools ) ) {
208- return undefined ;
158+ const result : { [ toolName : string ] : LDTool } = { } ;
159+ for ( const entry of rawTools ) {
160+ const tool = entry as LDTool ;
161+ if ( tool ?. name ) {
162+ result [ tool . name ] = tool ;
163+ }
209164 }
210-
211- const parsed = this . _parseToolsMap ( rawTools as { [ key : string ] : unknown } , logger ) ;
212- return Object . keys ( parsed ) . length > 0 ? parsed : undefined ;
165+ return Object . keys ( result ) . length > 0 ? result : undefined ;
213166 }
214167
215168 /**
@@ -240,14 +193,13 @@ export class LDAIConfigUtils {
240193 key : string ,
241194 flagValue : LDAIConfigFlagValue ,
242195 trackerFactory : ( ) => LDAIConfigTracker ,
243- logger ?: LDLogger ,
244196 ) : LDAICompletionConfig {
245197 return {
246198 ...this . _toBaseConfig ( key , flagValue ) ,
247199 createTracker : trackerFactory ,
248200 messages : flagValue . messages ,
249201 judgeConfiguration : flagValue . judgeConfiguration ,
250- tools : this . _resolveTools ( flagValue , logger ) ,
202+ tools : this . _resolveTools ( flagValue ) ,
251203 } ;
252204 }
253205
@@ -263,14 +215,13 @@ export class LDAIConfigUtils {
263215 key : string ,
264216 flagValue : LDAIConfigFlagValue ,
265217 trackerFactory : ( ) => LDAIConfigTracker ,
266- logger ?: LDLogger ,
267218 ) : LDAIAgentConfig {
268219 return {
269220 ...this . _toBaseConfig ( key , flagValue ) ,
270221 createTracker : trackerFactory ,
271222 instructions : flagValue . instructions ,
272223 judgeConfiguration : flagValue . judgeConfiguration ,
273- tools : this . _resolveTools ( flagValue , logger ) ,
224+ tools : this . _resolveTools ( flagValue ) ,
274225 } ;
275226 }
276227
0 commit comments