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
JavaScript
"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}$/
}
};