import {z} from 'zod' export type CreateApiAiAssistantsAssistantIdCloneArgs = {assistant_id: string, 'Idempotency-Key'?: string | undefined}; export type CreateApiAiAssistantsAssistantIdCloneOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const functionDefinition = z.object({name: z.string(), description: z.string().optional(), parameters: z.record(z.string(), z.unknown()).optional()}); export const functionTool = z.object({type: z.literal("function"), shared: z.boolean().optional(), function: functionDefinition}); export const webhookToolParams = z.object({name: z.string(), description: z.string(), url: z.string(), method: z.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]).optional(), headers: z.array(z.object({name: z.string().optional(), value: z.string().optional()})).optional(), body_parameters: z.object({properties: z.record(z.string(), z.unknown()).optional(), required: z.array(z.string()).optional(), type: z.literal("object").optional()}).optional(), path_parameters: z.object({properties: z.record(z.string(), z.unknown()).optional(), required: z.array(z.string()).optional(), type: z.literal("object").optional()}).optional(), query_parameters: z.object({properties: z.record(z.string(), z.unknown()).optional(), required: z.array(z.string()).optional(), type: z.literal("object").optional()}).optional(), preset_body_fields: z.record(z.string(), z.unknown()).optional(), preset_query_params: z.record(z.string(), z.unknown()).optional(), async: z.boolean().optional(), async_timeout_ms: z.number().int().gte(1).lte(15000).optional(), store_fields_as_variables: z.array(z.object({name: z.string().min(1), value_path: z.string().min(1)})).optional(), messages: z.array(z.union([z.object({type: z.literal("request_start"), content: z.string().min(1), timing_ms: z.number().int().gte(100).lte(120000).optional()}), z.object({type: z.literal("request_response_delayed"), content: z.string().min(1), timing_ms: z.number().int().gte(100).lte(120000)})])).optional()}); export const inferenceEmbeddingWebhookTool = z.object({type: z.literal("webhook"), timeout_ms: z.number().int().lte(60000).optional(), shared: z.boolean().optional(), webhook: webhookToolParams}); export const clientSideToolParams = z.object({name: z.string(), description: z.string(), parameters: z.object({properties: z.record(z.string(), z.unknown()).optional(), required: z.array(z.string()).optional(), type: z.literal("object").optional()})}); export const clientSideTool = z.object({type: z.literal("client_side_tool"), shared: z.boolean().optional(), client_side_tool: clientSideToolParams}); export const bucketIds = z.object({bucket_ids: z.array(z.string()), max_num_results: z.number().int().optional()}); export const retrievalTool = z.object({type: z.literal("retrieval"), shared: z.boolean().optional(), retrieval: bucketIds}); export const handoffToolParams = z.object({voice_mode: z.enum(["unified", "distinct"]).optional(), ai_assistants: z.array(z.object({name: z.string(), id: z.string()}))}); export const handoffTool = z.object({type: z.literal("handoff"), shared: z.boolean().optional(), handoff: handoffToolParams}); export const hangupToolParams = z.object({description: z.string().optional()}); export const inferenceEmbeddingHangupTool = z.object({type: z.literal("hangup"), shared: z.boolean().optional(), hangup: hangupToolParams}); export const inferenceEmbeddingTransferToolParams = z.object({targets: z.union([z.array(z.object({name: z.string().optional(), to: z.string(), message: z.string().optional(), extension: z.string().optional(), sip_auth_username: z.string().optional(), sip_auth_password: z.string().optional()})), z.string()]), from: z.string(), diversion: z.string().optional(), warm_transfer_instructions: z.string().optional(), warm_transfer_acceptance: z.object({enabled: z.boolean().optional(), end_user_target_context_mode: z.enum(["private", "shared"]).optional(), require_acceptance: z.boolean().optional(), timeout_secs: z.number().int().gte(10).lte(600).optional()}).optional(), description: z.string().optional(), bridge_beep: z.object({enabled: z.boolean().optional(), target_legs: z.enum(["self", "both"]).optional()}).optional(), warm_message_delay_ms: z.number().int().nullable().optional(), custom_headers: z.array(z.object({name: z.string().optional(), value: z.string().optional()})).optional(), voicemail_detection: z.object({detection_mode: z.enum(["disabled", "premium"]).optional(), on_voicemail_detected: z.object({action: z.enum(["stop_transfer", "leave_message_and_stop_transfer"]).optional(), voicemail_message: z.object({type: z.enum(["message", "warm_transfer_instructions"]).optional(), message: z.string().optional()}).optional()}).optional(), detection_config: z.object({greeting_silence_duration_millis: z.number().int().gte(500).lte(50000).optional(), greeting_total_analysis_time_millis: z.number().int().gte(500).lte(300000).optional(), after_greeting_silence_millis: z.number().int().gte(100).lte(5000).optional(), between_words_silence_millis: z.number().int().gte(10).lte(5000).optional(), greeting_duration_millis: z.number().int().gte(100).lte(10000).optional(), initial_silence_millis: z.number().int().gte(100).lte(500000).optional(), maximum_number_of_words: z.number().int().gte(1).lte(50).optional(), maximum_word_length_millis: z.number().int().gte(50).lte(5000).optional(), silence_threshold: z.number().int().gte(1).lte(1000).optional(), total_analysis_time_millis: z.number().int().gte(500).lte(60000).optional(), min_word_length_millis: z.number().int().gte(1).lte(1000).optional()}).optional()}).optional()}); export const inferenceEmbeddingTransferTool = z.object({type: z.literal("transfer"), shared: z.boolean().optional(), transfer: inferenceEmbeddingTransferToolParams}); export const inviteToolConfig = z.object({from: z.string(), targets: z.union([z.array(z.object({name: z.string().optional(), to: z.string()})), z.string()]).nullable().optional(), custom_headers: z.array(z.object({name: z.string().optional(), value: z.string().optional()})).optional(), voicemail_detection: z.object({detection_mode: z.enum(["disabled", "premium"]).optional(), on_voicemail_detected: z.object({action: z.literal("stop_invite").optional()}).optional()}).optional()}); export const inviteTool = z.object({type: z.literal("invite"), shared: z.boolean().optional(), invite: inviteToolConfig}); export const sIPReferToolParams = z.object({targets: z.array(z.object({name: z.string(), sip_address: z.string(), sip_auth_username: z.string().optional(), sip_auth_password: z.string().optional()})), sip_headers: z.array(z.object({name: z.enum(["User-to-User", "Diversion"]).optional(), value: z.string().optional()})).optional(), custom_headers: z.array(z.object({name: z.string().optional(), value: z.string().optional()})).optional()}); export const sIPReferTool = z.object({type: z.literal("refer"), shared: z.boolean().optional(), refer: sIPReferToolParams}); export const dTMFTool = z.object({type: z.literal("send_dtmf"), shared: z.boolean().optional(), send_dtmf: z.record(z.string(), z.unknown())}); export const sendMessageTool = z.object({type: z.literal("send_message"), shared: z.boolean().optional(), send_message: z.object({message_template: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown()))}); export const skipTurnToolParams = z.object({description: z.string().optional()}); export const skipTurnTool = z.object({type: z.literal("skip_turn"), shared: z.boolean().optional(), skip_turn: skipTurnToolParams}); export const visionToolParams = z.object({max_frame_age_secs: z.number().int().gte(1).optional()}); export const visionTool = z.object({type: z.literal("vision"), shared: z.boolean().optional(), vision: visionToolParams.optional()}); export const payToolParams = z.object({connector_name: z.string(), currency: z.string().optional(), payment_method: z.string().optional(), description: z.string().nullable().optional(), connector_parameters: z.record(z.string(), z.unknown()).optional(), valid_card_types: z.array(z.enum(["visa", "mastercard", "amex", "maestro", "discover", "optima", "jcb", "diners-club", "enroute"])).optional(), postal_code: z.union([z.string().min(1), z.boolean()]).optional(), min_postal_code_length: z.number().int().gte(1).lte(128).optional(), max_attempts: z.number().int().gte(1).lte(3).optional(), timeout_millis: z.number().int().gte(1).lte(600000).optional(), inter_digit_timeout_millis: z.number().int().gte(1).lte(600000).optional(), prompts: z.object({"payment-card-number": z.union([z.string().min(1), z.array(z.object({text: z.string().min(1), attempt: z.string().optional(), error_type: z.enum(["timeout", "invalid-card-number", "invalid-card-type", "invalid-date", "invalid-security-code", "invalid-postal-code", "invalid-bank-routing-number", "invalid-bank-account-number", "input-matching-failed"]).optional(), card_type: z.enum(["visa", "mastercard", "amex", "optima", "discover", "diners-club", "jcb", "maestro", "enroute"]).optional()}))]).optional(), "expiration-date": z.union([z.string().min(1), z.array(z.object({text: z.string().min(1), attempt: z.string().optional(), error_type: z.enum(["timeout", "invalid-card-number", "invalid-card-type", "invalid-date", "invalid-security-code", "invalid-postal-code", "invalid-bank-routing-number", "invalid-bank-account-number", "input-matching-failed"]).optional(), card_type: z.enum(["visa", "mastercard", "amex", "optima", "discover", "diners-club", "jcb", "maestro", "enroute"]).optional()}))]).optional(), "postal-code": z.union([z.string().min(1), z.array(z.object({text: z.string().min(1), attempt: z.string().optional(), error_type: z.enum(["timeout", "invalid-card-number", "invalid-card-type", "invalid-date", "invalid-security-code", "invalid-postal-code", "invalid-bank-routing-number", "invalid-bank-account-number", "input-matching-failed"]).optional(), card_type: z.enum(["visa", "mastercard", "amex", "optima", "discover", "diners-club", "jcb", "maestro", "enroute"]).optional()}))]).optional(), "security-code": z.union([z.string().min(1), z.array(z.object({text: z.string().min(1), attempt: z.string().optional(), error_type: z.enum(["timeout", "invalid-card-number", "invalid-card-type", "invalid-date", "invalid-security-code", "invalid-postal-code", "invalid-bank-routing-number", "invalid-bank-account-number", "input-matching-failed"]).optional(), card_type: z.enum(["visa", "mastercard", "amex", "optima", "discover", "diners-club", "jcb", "maestro", "enroute"]).optional()}))]).optional(), "bank-routing-number": z.union([z.string().min(1), z.array(z.object({text: z.string().min(1), attempt: z.string().optional(), error_type: z.enum(["timeout", "invalid-card-number", "invalid-card-type", "invalid-date", "invalid-security-code", "invalid-postal-code", "invalid-bank-routing-number", "invalid-bank-account-number", "input-matching-failed"]).optional(), card_type: z.enum(["visa", "mastercard", "amex", "optima", "discover", "diners-club", "jcb", "maestro", "enroute"]).optional()}))]).optional(), "bank-account-number": z.union([z.string().min(1), z.array(z.object({text: z.string().min(1), attempt: z.string().optional(), error_type: z.enum(["timeout", "invalid-card-number", "invalid-card-type", "invalid-date", "invalid-security-code", "invalid-postal-code", "invalid-bank-routing-number", "invalid-bank-account-number", "input-matching-failed"]).optional(), card_type: z.enum(["visa", "mastercard", "amex", "optima", "discover", "diners-club", "jcb", "maestro", "enroute"]).optional()}))]).optional()}).optional()}); export const payTool = z.object({type: z.literal("pay"), shared: z.boolean().optional(), pay: payToolParams}); export const updateDynamicVariablesToolParams = z.object({name: z.string(), description: z.string(), updatable_variables: z.array(z.object({name: z.string().min(1), type: z.string().optional(), description: z.string().optional()}))}); export const updateDynamicVariablesTool = z.object({type: z.literal("update_dynamic_variables"), shared: z.boolean().optional(), update_dynamic_variables: updateDynamicVariablesToolParams}); export const assistantTools = z.array(z.union([functionTool, inferenceEmbeddingWebhookTool, clientSideTool, retrievalTool, handoffTool, inferenceEmbeddingHangupTool, inferenceEmbeddingTransferTool, inviteTool, sIPReferTool, dTMFTool, sendMessageTool, skipTurnTool, visionTool, payTool, updateDynamicVariablesTool])); export const assistantMCPServer = z.object({id: z.string(), allowed_tools: z.array(z.string()).optional()}); export const a2AAgentHeader = z.object({name: z.string(), value: z.string()}); export const assistantA2AAgent = z.object({name: z.string().max(43), url: z.string(), headers: z.array(a2AAgentHeader).optional(), async: z.boolean().optional(), timeout_ms: z.number().int().gte(1).lte(4294967295).optional(), poll_interval_ms: z.number().int().gte(1).lte(4294967295).optional(), messages: z.array(z.union([z.object({type: z.literal("request_start"), content: z.string().min(1), timing_ms: z.number().int().gte(100).lte(120000).optional()}), z.object({type: z.literal("request_response_delayed"), content: z.string().min(1), timing_ms: z.number().int().gte(100).lte(120000)})])).optional()}); export const authenticationMethod = z.enum(["token", "certificate"]); export const externalLLM = z.object({model: z.string(), base_url: z.string(), llm_api_key_ref: z.string().optional(), authentication_method: authenticationMethod.optional(), certificate_ref: z.string().optional(), token_retrieval_url: z.string().optional(), forward_metadata: z.boolean().optional(), extra_headers: z.record(z.string(), z.string().max(4096)).nullable().optional()}); export const fallbackConfig = z.object({model: z.string().optional(), llm_api_key_ref: z.string().optional(), external_llm: externalLLM.optional()}); export const inferenceEmbeddingVoiceSettings = z.object({voice: z.string(), voice_speed: z.number().optional(), api_key_ref: z.string().optional(), temperature: z.number().optional(), similarity_boost: z.number().optional(), use_speaker_boost: z.boolean().optional(), style: z.number().optional(), speed: z.number().optional(), language: z.string().nullable().optional(), language_boost: z.enum(["null", "auto", "Chinese", "Chinese,Yue", "English", "Arabic", "Russian", "Spanish", "French", "Portuguese", "German", "Turkish", "Dutch", "Ukrainian", "Vietnamese", "Indonesian", "Japanese", "Italian", "Korean", "Thai", "Polish", "Romanian", "Greek", "Czech", "Finnish", "Hindi", "Bulgarian", "Danish", "Hebrew", "Malay", "Persian", "Slovak", "Swedish", "Croatian", "Filipino", "Hungarian", "Norwegian", "Slovenian", "Catalan", "Nynorsk", "Tamil", "Afrikaans"]).nullable().optional(), expressive_mode: z.boolean().optional(), background_audio: z.union([z.object({type: z.literal("predefined_media"), value: z.enum(["silence", "office"]), volume: z.number().gte(0.1).lte(1).multipleOf(0.1).optional()}), z.object({type: z.literal("media_url"), value: z.string()}), z.object({type: z.literal("media_name"), value: z.string()})]).optional(), tool_call_audio: z.union([z.object({type: z.literal("predefined_media"), value: z.literal("typing"), volume: z.number().gte(0).lte(1).multipleOf(0.1).optional()}), z.object({type: z.literal("media_url"), value: z.string()})]).nullable().optional()}); export const avatarId = z.string().min(1).max(128); export const avatarSettings = z.object({provider: z.literal("telnyx"), avatar_id: avatarId, background_id: z.enum(["office", "studio", "reception", "illustrated_workspace"]), model: z.literal("foxtrot-1")}); export const transcriptionSettingsConfig = z.object({smart_format: z.boolean().optional(), numerals: z.boolean().optional(), eot_threshold: z.number().gte(0.5).lte(0.9).optional(), eot_timeout_ms: z.number().int().gte(500).lte(10000).optional(), eager_eot_threshold: z.number().gte(0.3).lte(0.9).optional(), keyterm: z.string().max(1000).optional(), remove_disfluencies: z.boolean().optional(), end_of_turn_confidence_threshold: z.number().gte(0).lte(1).optional(), prompt: z.string().max(1750).optional(), min_turn_silence: z.number().int().gte(100).lte(5000).optional(), max_turn_silence: z.number().int().gte(100).lte(5000).optional(), interim_results: z.boolean().optional(), enable_endpoint_detection: z.boolean().optional(), max_endpoint_delay_ms: z.number().int().gte(500).lte(3000).optional(), context: z.string().max(10000).optional(), language_hints: z.array(z.string()).optional()}); export const transcriptionFallbackModel = z.object({model: z.enum(["deepgram/flux", "deepgram/nova-3", "deepgram/nova-2", "assemblyai/universal-3-6-pro", "assemblyai/universal-3-5-pro", "assemblyai/universal-streaming", "xai/grok-stt", "soniox/stt-rt-v4", "soniox/stt-rt-v5", "humain/realtime", "reson8/turns"]), language: z.string().nullable().optional(), settings: transcriptionSettingsConfig.nullable().optional()}); export const transcriptionChallenger = z.object({model: z.enum(["deepgram/flux", "deepgram/nova-3", "deepgram/nova-2", "azure/fast", "assemblyai/universal-3-6-pro", "assemblyai/universal-3-5-pro", "assemblyai/universal-streaming", "xai/grok-stt", "soniox/stt-rt-v4", "soniox/stt-rt-v5", "nvidia/parakeet-v3", "omi-health/omi-med-stt-v1", "humain/realtime", "reson8/turns", "cohere/ar-stt", "telnyx/basira", "distil-whisper/distil-large-v2", "openai/whisper-large-v3-turbo"]), language: z.string().nullable().optional(), settings: transcriptionSettingsConfig.nullable().optional(), rule: z.enum(["best_turn", "best_engine", "merge_words"]).optional()}); export const transcriptionSettings = z.object({model: z.enum(["deepgram/flux", "deepgram/nova-3", "deepgram/nova-2", "speechmatics/standard", "speechmatics/linden-1", "azure/fast", "assemblyai/universal-3-6-pro", "assemblyai/universal-3-5-pro", "assemblyai/universal-streaming", "xai/grok-stt", "soniox/stt-rt-v4", "soniox/stt-rt-v5", "nvidia/parakeet-v3", "omi-health/omi-med-stt-v1", "humain/realtime", "reson8/turns", "cohere/ar-stt", "telnyx/basira", "distil-whisper/distil-large-v2", "openai/whisper-large-v3-turbo"]).optional(), language: z.string().optional(), api_key_ref: z.string().optional(), region: z.string().optional(), settings: transcriptionSettingsConfig.optional(), fallback_models: z.array(transcriptionFallbackModel).nullable().optional(), challenger: transcriptionChallenger.nullable().optional()}); export const telephonySettings = z.object({default_texml_app_id: z.string().optional(), supports_unauthenticated_web_calls: z.boolean().optional(), noise_suppression: z.enum(["aicoustics", "krisp", "deepfilternet", "disabled"]).optional(), noise_suppression_config: z.object({attenuation_limit: z.number().int().gte(0).lte(100).optional(), mode: z.literal("advanced").optional(), family: z.literal("quail").optional(), size: z.enum(["vf", "vf_2_0_l"]).optional(), enhancement_level: z.number().gte(0).lte(1).optional()}).optional(), time_limit_secs: z.number().int().gte(30).lte(14400).optional(), user_idle_timeout_secs: z.number().int().gte(10).lte(14400).optional(), user_idle_reply_secs: z.number().int().gte(0).optional(), fallback_destination: z.string().optional(), send_message_history_updates: z.boolean().optional(), conversation_ended_full_history: z.boolean().optional(), greeting_delay_ms: z.number().int().gte(0).lte(2000).nullable().optional(), voicemail_detection: z.object({on_voicemail_detected: z.object({action: z.enum(["stop_assistant", "leave_message_and_stop_assistant", "continue_assistant"]).optional(), voicemail_message: z.object({type: z.enum(["prompt", "message"]).optional(), prompt: z.string().optional(), message: z.string().optional()}).optional()}).optional()}).optional(), disable_dtmf: z.boolean().optional(), recording_settings: z.object({enabled: z.boolean().optional(), channels: z.enum(["single", "dual"]).optional(), format: z.enum(["wav", "mp3"]).optional(), stop_on_conversation_end: z.boolean().optional()}).optional()}); export const messagingSettings = z.object({default_messaging_profile_id: z.string().optional(), delivery_status_webhook_url: z.string().optional(), conversation_inactivity_minutes: z.number().int().gte(1).lte(10000000).optional()}); export const enabledFeatures = z.enum(["telephony", "messaging"]); export const insightSettings = z.object({insight_group_id: z.string().optional(), model: z.string().nullable().optional()}); export const privacySettings = z.object({data_retention: z.boolean().optional(), pii_redaction: z.enum(["disabled", "redact"]).optional(), in_transit_data_locality: z.boolean().optional()}); export const importMetadata = z.object({import_provider: z.enum(["elevenlabs", "vapi", "retell"]).optional(), import_id: z.string().optional()}); export const audioVisualizerConfig = z.object({color: z.enum(["verdant", "twilight", "bloom", "mystic", "flare", "glacier"]).optional(), preset: z.string().optional()}); export const widgetSettings = z.object({theme: z.enum(["light", "dark"]).optional(), audio_visualizer_config: audioVisualizerConfig.optional(), start_call_text: z.string().optional(), default_state: z.enum(["expanded", "collapsed"]).optional(), position: z.enum(["fixed", "static"]).optional(), view_history_url: z.string().nullable().optional(), report_issue_url: z.string().nullable().optional(), give_feedback_url: z.string().nullable().optional(), agent_thinking_text: z.string().optional(), speak_to_interrupt_text: z.string().optional(), logo_icon_url: z.string().nullable().optional()}); export const transcriptionEndpointingPlan = z.object({on_punctuation_seconds: z.number().optional(), on_no_punctuation_seconds: z.number().optional(), on_number_seconds: z.number().optional()}); export const startSpeakingPlan = z.object({wait_seconds: z.number().gte(0).optional(), transcription_endpointing_plan: transcriptionEndpointingPlan.nullable().optional()}); export const inferenceEmbeddingInterruptionSettings = z.object({enable: z.boolean().optional(), disable_greeting_interruption: z.boolean().optional(), start_speaking_plan: startSpeakingPlan.nullable().optional(), interrupt_prediction_threshold: z.number().gte(0).lte(1).nullable().optional()}); export const assistantIntegration = z.object({integration_id: z.string(), allowed_list: z.array(z.string()).optional()}); export const observabilityStatus = z.enum(["enabled", "disabled"]); export const promptSyncStatus = z.enum(["enabled", "disabled"]); export const observability = z.object({status: observabilityStatus.optional(), secret_key_ref: z.string().optional(), public_key_ref: z.string().optional(), host: z.string().optional(), prompt_name: z.string().optional(), prompt_version: z.number().int().gte(1).optional(), prompt_label: z.string().optional(), prompt_sync: promptSyncStatus.optional()}); export const postConversationSettings = z.object({enabled: z.boolean().optional()}); export const delegationSettings = z.object({enabled: z.boolean().optional(), mode: z.enum(["telnyx", "client"]).optional(), model: z.string().optional(), llm_api_key_ref: z.string().optional(), instructions: z.string().optional(), speak_results: z.boolean().optional(), external_llm: externalLLM.optional()}); export const websocketSettings = z.object({enabled: z.boolean().optional(), url: z.string().optional(), auth_ref: z.string().optional()}); export const lLMCondition = z.object({prompt: z.string(), type: z.literal("llm")}); export const comparisonExpression = z.object({left: z.lazy(() => expression), op: z.enum(["==", "!=", "<", "<=", ">", ">=", "contains", "not_contains"]), right: z.lazy(() => expression), type: z.literal("comparison")}); export const booleanOpExpression = z.object({op: z.enum(["and", "or", "not"]), operands: z.array(z.lazy(() => expression)), type: z.literal("bool_op")}); export const arithmeticExpression = z.object({left: z.lazy(() => expression), op: z.enum(["+", "-", "*", "/", "%"]), right: z.lazy(() => expression), type: z.literal("arithmetic")}); export const dynamicVariableExpression = z.object({name: z.string(), type: z.literal("variable")}); export const stringLiteralExpression = z.object({type: z.literal("string_literal"), value: z.string()}); export const numberLiteralExpression = z.object({type: z.literal("number_literal"), value: z.number()}); export const booleanLiteralExpression = z.object({type: z.literal("bool_literal"), value: z.boolean()}); export const expression: z.ZodType = z.discriminatedUnion("type", [comparisonExpression, booleanOpExpression, arithmeticExpression, dynamicVariableExpression, stringLiteralExpression, numberLiteralExpression, booleanLiteralExpression]); export const expressionCondition = z.object({expression: expression, type: z.literal("expression")}); export const defaultCondition = z.object({type: z.literal("default")}); export const nodeTarget = z.object({node_id: z.string(), type: z.literal("node")}); export const nodePosition = z.object({x: z.number(), y: z.number()}); export const assistantTarget = z.object({assistant_id: z.string(), position: nodePosition.optional(), type: z.literal("assistant"), voice_mode: z.enum(["unified", "distinct"]).optional()}); export const flowEdge = z.object({condition: z.discriminatedUnion("type", [lLMCondition, expressionCondition, defaultCondition]), id: z.string(), start_node_id: z.string(), target: z.discriminatedUnion("type", [nodeTarget, assistantTarget])}); export const flowNode = z.object({external_llm: externalLLM.optional(), id: z.string(), instructions: z.string(), instructions_mode: z.enum(["replace", "append"]).optional(), llm_api_key_ref: z.string().optional(), model: z.string().optional(), name: z.string().optional(), position: nodePosition.optional(), shared_tool_ids: z.array(z.string()).optional(), tools: z.array(assistantTools).optional(), tools_mode: z.enum(["replace", "append"]).optional(), transcription: transcriptionSettings.optional(), type: z.literal("prompt").optional(), voice_settings: inferenceEmbeddingVoiceSettings.optional()}); export const toolNode = z.object({id: z.string(), name: z.string().optional(), position: nodePosition.optional(), shared_tool_id: z.string(), tool: assistantTools.optional(), type: z.literal("tool").optional(), message: z.string().min(1).optional()}); export const speakNode = z.object({type: z.literal("speak").optional(), id: z.string(), name: z.string().optional(), message: z.string(), position: nodePosition.optional()}); export const conversationFlow = z.object({edges: z.array(flowEdge).optional(), nodes: z.array(z.discriminatedUnion("type", [flowNode, toolNode, speakNode])), start_node_id: z.string()}); export const inferenceEmbeddingAssistant = z.object({id: z.string(), name: z.string(), created_at: z.string(), version_id: z.string().optional(), version_created_at: z.string().optional(), description: z.string().optional(), model: z.string(), instructions: z.string(), tools: assistantTools.optional(), mcp_servers: z.array(assistantMCPServer).optional(), a2a_agents: z.array(assistantA2AAgent).optional(), greeting: z.string().optional(), llm_api_key_ref: z.string().optional(), external_llm: externalLLM.optional(), fallback_config: fallbackConfig.optional(), voice_settings: inferenceEmbeddingVoiceSettings.optional(), avatar_settings: avatarSettings.nullable().optional(), transcription: transcriptionSettings.optional(), telephony_settings: telephonySettings.optional(), messaging_settings: messagingSettings.optional(), enabled_features: z.array(enabledFeatures).optional(), insight_settings: insightSettings.optional(), privacy_settings: privacySettings.optional(), dynamic_variables_webhook_url: z.string().optional(), dynamic_variables_webhook_timeout_ms: z.number().int().gte(1).lte(10000).optional(), dynamic_variables: z.record(z.string(), z.unknown()).optional(), import_metadata: importMetadata.optional(), widget_settings: widgetSettings.optional(), interruption_settings: inferenceEmbeddingInterruptionSettings.optional(), integrations: z.array(assistantIntegration).optional(), observability_settings: observability.optional(), version_name: z.string().max(50).optional(), related_mission_ids: z.array(z.string()).optional(), tags: z.array(z.string()).optional(), post_conversation_settings: postConversationSettings.optional(), delegation_settings: delegationSettings.optional(), websocket_settings: websocketSettings.optional(), conversation_flow: conversationFlow.optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Clone Assistant * * POST /ai/assistants/{assistant_id}/clone */ export const createApiAiAssistantsAssistantIdClone = async (args: CreateApiAiAssistantsAssistantIdCloneArgs, options?: CreateApiAiAssistantsAssistantIdCloneOptions) => { const {baseUrl = "https://api.telnyx.com/v2", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['Idempotency-Key'] != null) headers.set("Idempotency-Key", String(args['Idempotency-Key'])) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/ai/assistants/${encodeURIComponent(String(args.assistant_id))}/clone${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(inferenceEmbeddingAssistant, await res.json()) };