MCPcopy Index your code
hub / github.com/simstudioai/sim / prepareToolsWithUsageControl

Function prepareToolsWithUsageControl

apps/sim/providers/utils.ts:928–1047  ·  view source on GitHub ↗
(
  tools: any[] | undefined,
  providerTools: any[] | undefined,
  logger: any,
  provider?: string
)

Source from the content-addressed store, hash-verified

926 * @returns Object with prepared tools and tool_choice settings
927 */
928export function prepareToolsWithUsageControl(
929 tools: any[] | undefined,
930 providerTools: any[] | undefined,
931 logger: any,
932 provider?: string
933): {
934 tools: any[] | undefined
935 toolChoice:
936 | 'auto'
937 | 'none'
938 | { type: 'function'; function: { name: string } }
939 | { type: 'tool'; name: string }
940 | { type: 'any'; any: { model: string; name: string } }
941 | undefined
942 toolConfig?: {
943 functionCallingConfig: {
944 mode: 'AUTO' | 'ANY' | 'NONE'
945 allowedFunctionNames?: string[]
946 }
947 }
948 hasFilteredTools: boolean
949 forcedTools: string[]
950} {
951 if (!tools || tools.length === 0) {
952 return {
953 tools: undefined,
954 toolChoice: undefined,
955 hasFilteredTools: false,
956 forcedTools: [],
957 }
958 }
959
960 const filteredTools = tools.filter((tool) => {
961 const toolId = tool.function?.name || tool.name
962 const toolConfig = providerTools?.find((t) => t.id === toolId)
963 return toolConfig?.usageControl !== 'none'
964 })
965
966 const hasFilteredTools = filteredTools.length < tools.length
967 if (hasFilteredTools) {
968 logger.info(
969 `Filtered out ${tools.length - filteredTools.length} tools with usageControl='none'`
970 )
971 }
972
973 if (filteredTools.length === 0) {
974 logger.info('All tools were filtered out due to usageControl="none"')
975 return {
976 tools: undefined,
977 toolChoice: undefined,
978 hasFilteredTools: true,
979 forcedTools: [],
980 }
981 }
982
983 const forcedTools = providerTools?.filter((tool) => tool.usageControl === 'force') || []
984 const forcedToolIds = forcedTools.map((tool) => tool.id)
985

Callers 15

utils.test.tsFile · 0.90
executeGeminiRequestFunction · 0.90
index.tsFile · 0.90
index.tsFile · 0.90
index.tsFile · 0.90
index.tsFile · 0.90
index.tsFile · 0.90
index.tsFile · 0.90
index.tsFile · 0.90
index.tsFile · 0.90

Calls 2

infoMethod · 0.80
joinMethod · 0.80

Tested by

no test coverage detected