@@ -146,6 +146,29 @@ export class LDAIConfigUtils {
146146 }
147147 }
148148
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 : toolObj [ 'parameters' ] as LDTool [ 'parameters' ] ,
166+ customParameters : toolObj [ 'customParameters' ] as LDTool [ 'customParameters' ] ,
167+ } ;
168+ }
169+ return result ;
170+ }
171+
149172 private static _resolveTools (
150173 flagValue : LDAIConfigFlagValue ,
151174 logger ?: LDLogger ,
@@ -157,7 +180,8 @@ export class LDAIConfigUtils {
157180 ) ;
158181 return undefined ;
159182 }
160- return flagValue . tools ;
183+ const parsed = this . _parseToolsMap ( flagValue . tools as { [ key : string ] : unknown } , logger ) ;
184+ return Object . keys ( parsed ) . length > 0 ? parsed : undefined ;
161185 }
162186
163187 const rawTools = flagValue . model ?. parameters ?. [ 'tools' ] ;
@@ -173,25 +197,8 @@ export class LDAIConfigUtils {
173197 return undefined ;
174198 }
175199
176- const toolsMap = rawTools as { [ key : string ] : unknown } ;
177- const result : { [ toolName : string ] : LDTool } = { } ;
178-
179- for ( const [ toolName , toolValue ] of Object . entries ( toolsMap ) ) {
180- if (
181- toolValue === null ||
182- typeof toolValue !== 'object' ||
183- Array . isArray ( toolValue ) ||
184- typeof ( toolValue as { name ?: unknown } ) . name !== 'string'
185- ) {
186- logger ?. warn (
187- `LaunchDarkly AI: Skipping tool "${ toolName } " in model.parameters.tools: expected an object with a name string` ,
188- ) ;
189- continue ;
190- }
191- result [ toolName ] = toolValue as LDTool ;
192- }
193-
194- return Object . keys ( result ) . length > 0 ? result : undefined ;
200+ const parsed = this . _parseToolsMap ( rawTools as { [ key : string ] : unknown } , logger ) ;
201+ return Object . keys ( parsed ) . length > 0 ? parsed : undefined ;
195202 }
196203
197204 /**
0 commit comments