UNPKG

zedai-voice

Version:

Siri-like voice banking SDK for React Native - Complete voice-powered fintech solution with wake word detection and beautiful UI

111 lines (109 loc) 5.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.VOICE_STATES = exports.VALIDATION_RULES = exports.RESPONSES = exports.OPENAI_CONFIG = exports.INTENTS = exports.FLOW_STATES = exports.ERROR_CODES = exports.AUDIO_CONFIG = exports.API_TIMEOUTS = void 0; // src/utils/Constants.js var VOICE_STATES = exports.VOICE_STATES = { IDLE: 'IDLE', LISTENING: 'LISTENING', PROCESSING: 'PROCESSING', SPEAKING: 'SPEAKING', ERROR: 'ERROR' }; var FLOW_STATES = exports.FLOW_STATES = { IDLE: 'IDLE', COLLECTING_TRANSFER_INFO: 'COLLECTING_TRANSFER_INFO', VERIFYING_ACCOUNT: 'VERIFYING_ACCOUNT', AWAITING_CONFIRMATION: 'AWAITING_CONFIRMATION', AWAITING_PIN: 'AWAITING_PIN', PROCESSING_TRANSFER: 'PROCESSING_TRANSFER', COMPLETED: 'COMPLETED', FAILED: 'FAILED' }; var INTENTS = exports.INTENTS = { TRANSFER_MONEY: 'TRANSFER_MONEY', CONFIRM_YES: 'CONFIRM_YES', CONFIRM_NO: 'CONFIRM_NO', PROVIDE_ACCOUNT: 'PROVIDE_ACCOUNT', PROVIDE_AMOUNT: 'PROVIDE_AMOUNT', PROVIDE_BANK: 'PROVIDE_BANK', CANCEL: 'CANCEL', HELP: 'HELP', UNKNOWN: 'UNKNOWN' }; var AUDIO_CONFIG = exports.AUDIO_CONFIG = { SAMPLE_RATE: 16000, CHANNELS: 1, BITS_PER_SAMPLE: 16, MAX_RECORDING_TIME: 30000, // 30 seconds MIN_RECORDING_TIME: 500 // 0.5 seconds }; var API_TIMEOUTS = exports.API_TIMEOUTS = { SPEECH_TO_TEXT: 15000, INTENT_PARSING: 10000, ACCOUNT_VERIFICATION: 8000, TRANSFER_PROCESSING: 20000, PIN_WEBHOOK: 5000 }; var ERROR_CODES = exports.ERROR_CODES = { INVALID_CONFIG: 'INVALID_CONFIG', AUDIO_PERMISSION_DENIED: 'AUDIO_PERMISSION_DENIED', NETWORK_ERROR: 'NETWORK_ERROR', SPEECH_RECOGNITION_FAILED: 'SPEECH_RECOGNITION_FAILED', INTENT_PARSING_FAILED: 'INTENT_PARSING_FAILED', ACCOUNT_VERIFICATION_FAILED: 'ACCOUNT_VERIFICATION_FAILED', TRANSFER_FAILED: 'TRANSFER_FAILED', PIN_TIMEOUT: 'PIN_TIMEOUT', INVALID_PIN: 'INVALID_PIN', OPENAI_API_ERROR: 'OPENAI_API_ERROR', WEBHOOK_ERROR: 'WEBHOOK_ERROR' }; var RESPONSES = exports.RESPONSES = { GREETING: "Hello! I'm your voice banking assistant. You can say things like 'transfer money' or 'send 5000 to account 1234567890 at GTBank'.", TRANSFER_INITIATED: "I'll help you transfer money. Please provide the account number, bank name, and amount.", ACCOUNT_VERIFIED: "I found {accountName} at {bankName}. Is this correct?", ACCOUNT_NOT_FOUND: "I couldn't find an account with that information. Please check the account number and bank name.", CONFIRMATION_RECEIVED: "Great! Please enter your PIN to complete the transfer.", TRANSFER_SUCCESSFUL: "Transfer successful! {amount} has been sent to {accountName} at {bankName}.", TRANSFER_FAILED: "Transfer failed: {error}. Please try again.", INVALID_AMOUNT: "Please provide a valid amount to transfer.", INVALID_ACCOUNT: "Please provide a valid account number.", INVALID_BANK: "Please provide a valid bank name.", CANCELLED: "Transfer cancelled. Is there anything else I can help you with?", HELP: "I can help you transfer money to other accounts. Just say 'transfer money' or provide the details directly.", UNKNOWN_COMMAND: "I didn't understand that. You can say 'transfer money' or 'help' for assistance.", AUDIO_ERROR: "I'm having trouble hearing you. Please try again.", NETWORK_ERROR: "I'm having network issues. Please check your connection and try again.", TIMEOUT: "This is taking too long. Let's start over.", PIN_PROMPT: "Please enter your PIN to complete the transfer." }; var OPENAI_CONFIG = exports.OPENAI_CONFIG = { WHISPER_MODEL: 'whisper-1', GPT_MODEL: 'gpt-4', MAX_TOKENS: 150, TEMPERATURE: 0.1, SYSTEM_PROMPT: "You are a banking voice assistant. Your job is to understand user intents for financial transactions.\n \n Possible intents:\n - TRANSFER_MONEY: User wants to transfer money\n - CONFIRM_YES: User confirms an action\n - CONFIRM_NO: User declines an action\n - PROVIDE_ACCOUNT: User provides account information\n - PROVIDE_AMOUNT: User provides amount to transfer\n - PROVIDE_BANK: User provides bank name\n - CANCEL: User wants to cancel\n - HELP: User needs help\n - UNKNOWN: Cannot determine intent\n \n Extract these entities:\n - amount: monetary amount\n - account_number: bank account number\n - bank_name: name of the bank\n - confirmation: yes/no response\n \n Respond with JSON only: {\"intent\": \"INTENT_NAME\", \"entities\": {\"key\": \"value\"}}\n \n Examples:\n \"Transfer 5000 to account 1234567890 at GTBank\" -> {\"intent\": \"TRANSFER_MONEY\", \"entities\": {\"amount\": \"5000\", \"account_number\": \"1234567890\", \"bank_name\": \"GTBank\"}}\n \"Yes\" -> {\"intent\": \"CONFIRM_YES\", \"entities\": {\"confirmation\": \"yes\"}}\n \"No\" -> {\"intent\": \"CONFIRM_NO\", \"entities\": {\"confirmation\": \"no\"}}\n \"Cancel\" -> {\"intent\": \"CANCEL\", \"entities\": {}}" }; var VALIDATION_RULES = exports.VALIDATION_RULES = { ACCOUNT_NUMBER: { MIN_LENGTH: 8, MAX_LENGTH: 15, PATTERN: /^[0-9]+$/ }, AMOUNT: { MIN_VALUE: 1, MAX_VALUE: 100000, PATTERN: /^\d+(\.\d{1,2})?$/ }, BANK_NAME: { MIN_LENGTH: 2, MAX_LENGTH: 50, PATTERN: /^[a-zA-Z0-9\s]+$/ }, PIN: { LENGTH: 4, PATTERN: /^[0-9]{4}$/ } };