Skip to content

Commit 71b4080

Browse files
committed
typing tightness
1 parent 54d2e1f commit 71b4080

8 files changed

Lines changed: 47 additions & 16 deletions

File tree

apps/sim/blocks/blocks/image_generator.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ImageIcon } from '@/components/icons'
22
import { AuthMode, type BlockConfig, IntegrationType } from '@/blocks/types'
3+
import { parseOptionalBooleanInput } from '@/blocks/utils'
34
import type { ImageGenerationResponse } from '@/tools/image/types'
45
import type { DalleResponse } from '@/tools/openai/types'
56

@@ -847,9 +848,11 @@ export const ImageGeneratorV2Block: BlockConfig<ImageGenerationResponse> = {
847848
...(params.moderation && { moderation: params.moderation }),
848849
...(params.safetyTolerance && { safetyTolerance: params.safetyTolerance }),
849850
...(params.thinkingLevel && { thinkingLevel: params.thinkingLevel }),
850-
...(params.enableWebSearch !== undefined && { enableWebSearch: params.enableWebSearch }),
851+
...(params.enableWebSearch !== undefined && {
852+
enableWebSearch: parseOptionalBooleanInput(params.enableWebSearch),
853+
}),
851854
...(params.enableSafetyChecker !== undefined && {
852-
enableSafetyChecker: params.enableSafetyChecker,
855+
enableSafetyChecker: parseOptionalBooleanInput(params.enableSafetyChecker),
853856
}),
854857
}
855858
},

apps/sim/blocks/blocks/video_generator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { VideoIcon } from '@/components/icons'
22
import { AuthMode, type BlockConfig, IntegrationType, type SubBlockConfig } from '@/blocks/types'
3-
import { normalizeFileInput } from '@/blocks/utils'
3+
import { normalizeFileInput, parseOptionalBooleanInput } from '@/blocks/utils'
44
import type { VideoBlockResponse } from '@/tools/video/types'
55

66
const FALAI_PREVIOUS_MODEL_OPTIONS = [
@@ -811,8 +811,8 @@ export const VideoGeneratorBlock: BlockConfig<VideoBlockResponse> = {
811811
visualReference: params.visualReference,
812812
consistencyMode: params.consistencyMode,
813813
stylePreset: params.stylePreset,
814-
promptOptimizer: params.promptOptimizer,
815-
generateAudio: params.generateAudio,
814+
promptOptimizer: parseOptionalBooleanInput(params.promptOptimizer),
815+
generateAudio: parseOptionalBooleanInput(params.generateAudio),
816816
cameraControl: params.cameraControl
817817
? typeof params.cameraControl === 'string'
818818
? JSON.parse(params.cameraControl)
@@ -1570,8 +1570,8 @@ export const VideoGeneratorV2Block: BlockConfig<VideoBlockResponse> = {
15701570
visualReference: normalizeFileInput(params.visualReference, { single: true }),
15711571
consistencyMode: params.consistencyMode,
15721572
stylePreset: params.stylePreset,
1573-
promptOptimizer: params.promptOptimizer,
1574-
generateAudio: params.generateAudio,
1573+
promptOptimizer: parseOptionalBooleanInput(params.promptOptimizer),
1574+
generateAudio: parseOptionalBooleanInput(params.generateAudio),
15751575
cameraControl: params.cameraControl
15761576
? typeof params.cameraControl === 'string'
15771577
? JSON.parse(params.cameraControl)

apps/sim/lib/api/contracts/tools/media/image.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { z } from 'zod'
2-
import { toolJsonResponseSchema } from '@/lib/api/contracts/tools/media/shared'
2+
import { toolBooleanSchema, toolJsonResponseSchema } from '@/lib/api/contracts/tools/media/shared'
33
import { defineRouteContract } from '@/lib/api/contracts/types'
44

55
export const imageProviders = ['openai', 'gemini', 'falai'] as const
@@ -30,8 +30,8 @@ export const imageToolBodySchema = z
3030
safetyTolerance: z.string().optional(),
3131
numImages: z.coerce.number().int().optional(),
3232
seed: z.coerce.number().int().optional(),
33-
enableSafetyChecker: z.boolean().optional(),
34-
enableWebSearch: z.boolean().optional(),
33+
enableSafetyChecker: toolBooleanSchema.optional(),
34+
enableWebSearch: toolBooleanSchema.optional(),
3535
thinkingLevel: z.string().optional(),
3636
workspaceId: z.string().optional(),
3737
workflowId: z.string().optional(),

apps/sim/lib/api/contracts/tools/media/shared.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,16 @@ export const toolJsonResponseSchema = z
1212
data: z.unknown().optional(),
1313
})
1414
.passthrough()
15+
16+
export const toolBooleanSchema = z.preprocess(
17+
(value) => {
18+
if (typeof value === 'boolean') return value
19+
if (typeof value !== 'string') return value
20+
21+
const normalized = value.trim().toLowerCase()
22+
if (normalized === 'true' || normalized === '1') return true
23+
if (normalized === 'false' || normalized === '0' || normalized === '') return false
24+
return value
25+
},
26+
z.boolean({ error: 'must be a boolean (true/false)' })
27+
)

apps/sim/lib/api/contracts/tools/media/video.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from 'zod'
22
import { userFileSchema } from '@/lib/api/contracts/primitives'
3-
import { toolJsonResponseSchema } from '@/lib/api/contracts/tools/media/shared'
3+
import { toolBooleanSchema, toolJsonResponseSchema } from '@/lib/api/contracts/tools/media/shared'
44
import { defineRouteContract } from '@/lib/api/contracts/types'
55

66
export const videoProviders = ['runway', 'veo', 'luma', 'minimax', 'falai'] as const
@@ -23,8 +23,8 @@ export const videoToolBodySchema = z
2323
visualReference: userFileSchema.optional(),
2424
cameraControl: z.unknown().optional(),
2525
endpoint: z.string().optional(),
26-
promptOptimizer: z.boolean().optional(),
27-
generateAudio: z.boolean().optional(),
26+
promptOptimizer: toolBooleanSchema.optional(),
27+
generateAudio: toolBooleanSchema.optional(),
2828
workspaceId: z.string().optional(),
2929
workflowId: z.string().optional(),
3030
executionId: z.string().optional(),

apps/sim/tools/video/falai.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ToolConfig } from '@/tools/types'
22
import type { VideoParams, VideoResponse } from '@/tools/video/types'
3+
import { parseBooleanParam, parseBooleanParamWithDefault } from '@/tools/video/utils'
34

45
export const falaiVideoTool: ToolConfig<VideoParams, VideoResponse> = {
56
id: 'video_falai',
@@ -85,8 +86,8 @@ export const falaiVideoTool: ToolConfig<VideoParams, VideoResponse> = {
8586
duration: params.duration,
8687
aspectRatio: params.aspectRatio,
8788
resolution: params.resolution,
88-
promptOptimizer: params.promptOptimizer !== false,
89-
generateAudio: params.generateAudio,
89+
promptOptimizer: parseBooleanParamWithDefault(params.promptOptimizer, true),
90+
generateAudio: parseBooleanParam(params.generateAudio),
9091
workspaceId: params._context?.workspaceId,
9192
workflowId: params._context?.workflowId,
9293
executionId: params._context?.executionId,

apps/sim/tools/video/minimax.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ToolConfig } from '@/tools/types'
22
import type { VideoParams, VideoResponse } from '@/tools/video/types'
3+
import { parseBooleanParamWithDefault } from '@/tools/video/utils'
34

45
export const minimaxVideoTool: ToolConfig<VideoParams, VideoResponse> = {
56
id: 'video_minimax',
@@ -70,7 +71,7 @@ export const minimaxVideoTool: ToolConfig<VideoParams, VideoResponse> = {
7071
prompt: params.prompt,
7172
duration: params.duration || 6,
7273
endpoint: params.endpoint || 'standard',
73-
promptOptimizer: params.promptOptimizer !== false,
74+
promptOptimizer: parseBooleanParamWithDefault(params.promptOptimizer, true),
7475
workspaceId: params._context?.workspaceId,
7576
workflowId: params._context?.workflowId,
7677
executionId: params._context?.executionId,

apps/sim/tools/video/utils.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export function parseBooleanParam(value: unknown): boolean | undefined {
2+
if (typeof value === 'boolean') return value
3+
if (typeof value !== 'string') return undefined
4+
5+
const normalized = value.trim().toLowerCase()
6+
if (normalized === 'true' || normalized === '1') return true
7+
if (normalized === 'false' || normalized === '0' || normalized === '') return false
8+
return undefined
9+
}
10+
11+
export function parseBooleanParamWithDefault(value: unknown, defaultValue: boolean): boolean {
12+
return parseBooleanParam(value) ?? defaultValue
13+
}

0 commit comments

Comments
 (0)