import { z } from '../../../../zod' import { blockBaseSchema, credentialsBaseSchema } from '../../shared' import { IntegrationBlockType } from '../constants' import { searchResponseValues } from './constants' export const zemanticAiOptionsSchema = z.object({ credentialsId: z.string().optional(), projectId: z.string().optional(), systemPrompt: z.string().optional(), prompt: z.string().optional(), query: z.string().optional(), maxResults: z.number().int().optional(), responseMapping: z .array( z.object({ id: z.string(), valueToExtract: z.preprocess( (val) => (!val ? 'Summary' : val), z.enum(searchResponseValues) ), variableId: z.string().optional(), }) ) .optional(), }) export const zemanticAiBlockSchema = blockBaseSchema.merge( z.object({ type: z.enum([IntegrationBlockType.ZEMANTIC_AI]), blockId: z.string().optional(), options: zemanticAiOptionsSchema.optional(), }) ) export const zemanticAiCredentialsSchema = z .object({ type: z.literal('zemanticAi'), data: z.object({ apiKey: z.string(), }), }) .merge(credentialsBaseSchema) export const zemanticSearchResponseSchema = z.object({ results: z.array( z.object({ documentId: z.string(), text: z.string(), score: z.number(), }) ), summary: z.string(), }) export type ZemanticAiResponse = z.infer export type ZemanticAiCredentials = z.infer export type ZemanticAiBlock = z.infer