{"_id":"@caleblawson/voice-sarvam","name":"@caleblawson/voice-sarvam","dist-tags":{"latest":"0.10.3"},"versions":{"0.10.3":{"name":"@caleblawson/voice-sarvam","version":"0.10.3","description":"Mastra Sarvam AI voice integration","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"license":"Elastic-2.0","dependencies":{"zod":"^3.25.57"},"devDependencies":{"@microsoft/api-extractor":"^7.52.8","@types/node":"^20.19.0","eslint":"^9.28.0","tsup":"^8.5.0","typescript":"^5.8.3","vitest":"^2.1.9","@internal/lint":"0.0.13","@mastra/core":"npm:@caleblawson/core@0.10.7-alpha.0"},"keywords":["mastra","sarvam","tts","stt","indian-languages","speech-to-text","text-to-speech","speech-recognition"],"peerDependencies":{"@mastra/core":"^0.10.0-alpha.0"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --experimental-dts --clean --treeshake=smallest --splitting","build:watch":"pnpm build --watch","test":"vitest run","test:watch":"vitest watch","lint":"eslint ."},"gitHead":"c31e90130a5c9765c23f688ecea70adc6164543d","_id":"@caleblawson/voice-sarvam@0.10.3","_integrity":"sha512-i2gkuOhwwt/JwJNOqH3yT3qvik8T81+QxXJZAU4vI2xcxbarwub2C0eEe0/nSmCqY7KKuqwTBPXT/RK0T0/aWQ==","_resolved":"C:\\Users\\caleb\\AppData\\Local\\Temp\\1c7f0aefcba61ed96de975aeb11747c9\\caleblawson-voice-sarvam-0.10.3.tgz","_from":"file:caleblawson-voice-sarvam-0.10.3.tgz","_nodeVersion":"21.2.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-i2gkuOhwwt/JwJNOqH3yT3qvik8T81+QxXJZAU4vI2xcxbarwub2C0eEe0/nSmCqY7KKuqwTBPXT/RK0T0/aWQ==","shasum":"c56f15c61350f24a5dc0f1a4fd03c5624f6f9c13","tarball":"https://registry.npmjs.org/@caleblawson/voice-sarvam/-/voice-sarvam-0.10.3.tgz","fileCount":9,"unpackedSize":22925,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDoUtf6vHU5Jn5n3dnKXicl+iu6En7fCA/vKkh5buHSEAIhAJngqwOhUnwKeolA71Gz0bKGCZ4C4fH9FvOEX33+njrz"}]},"_npmUser":{"name":"caleblawson","email":"caleb.lawson@dynapt.com","actor":{"name":"caleblawson","email":"caleb.lawson@dynapt.com","type":"user"}},"directories":{},"maintainers":[{"name":"caleblawson","email":"caleb.lawson@dynapt.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/voice-sarvam_0.10.3_1750741068439_0.05321257157206105"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-24T04:57:48.341Z","0.10.3":"2025-06-24T04:57:48.617Z","modified":"2025-06-24T04:57:48.882Z"},"maintainers":[{"name":"caleblawson","email":"caleb.lawson@dynapt.com"}],"description":"Mastra Sarvam AI voice integration","keywords":["mastra","sarvam","tts","stt","indian-languages","speech-to-text","text-to-speech","speech-recognition"],"license":"Elastic-2.0","readme":"# @mastra/voice-sarvam\r\n\r\nSarvam Voice integration for Mastra, providing Text-to-Speech (TTS) and Speech-to-text (STT) capabilities using Sarvam's voice technology.\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @mastra/voice-sarvam\r\n```\r\n\r\n## Configuration\r\n\r\nThe module requires the following environment variables:\r\n\r\n```bash\r\nSARVAM_API_KEY=your_api_key\r\n```\r\n\r\n## Usage\r\n\r\n```typescript\r\nimport { SarvamVoice } from '@mastra/voice-sarvam';\r\n\r\nconst voice = new SarvamVoice({\r\n  speechModel: {\r\n    model: 'bulbul:v1',\r\n    apiKey: process.env.SARVAM_API_KEY!,\r\n    language: 'en-IN',\r\n  },\r\n  listeningModel: {\r\n    apiKey: process.env.SARVAM_API_KEY!,\r\n    model: 'saarika:v2',\r\n    languageCode: 'unknown', // By default only works with saarika:v2\r\n  },\r\n  speaker: 'meera',\r\n});\r\n\r\n// Create an agent with voice capabilities\r\nexport const agent = new Agent({\r\n  name: 'Agent',\r\n  instructions: `You are a helpful assistant with both TTS and STT capabilities.`,\r\n  model: google('gemini-1.5-pro-latest'),\r\n  voice: voice,\r\n});\r\n\r\n// List available speakers\r\nconst speakers = await voice.getSpeakers();\r\n\r\n// Generate speech and save to file\r\nconst audio = await agent.voice.speak(\"Hello, I'm your AI assistant!\");\r\nconst filePath = path.join(process.cwd(), 'agent.wav');\r\nconst writer = createWriteStream(filePath);\r\n\r\naudio.pipe(writer);\r\n\r\nawait new Promise<void>((resolve, reject) => {\r\n  writer.on('finish', () => resolve());\r\n  writer.on('error', reject);\r\n});\r\n\r\n// Generate speech from a text stream\r\nconst textStream = getTextStream(); // Your text stream source\r\nconst audioStream = await voice.speak(textStream);\r\n\r\n// The stream can be piped to a destination\r\nconst streamFilePath = path.join(process.cwd(), 'stream.mp3');\r\nconst streamWriter = createWriteStream(streamFilePath);\r\n\r\naudioStream.pipe(streamWriter);\r\n\r\nconsole.log(`Speech saved to ${filePath} and ${streamFilePath}`);\r\n\r\n// Generate Text from an audio stream\r\nconst text = await voice.listen(audioStream);\r\n```\r\n\r\n## Features\r\n\r\n- High-quality Text-to-Speech and Speech-to-Text synthesis\r\n- Support for 10+ Indian languages\r\n- Choice of 10+ diverse speakers\r\n- Advanced voice customization options\r\n\r\n## Available Voices\r\n\r\n### Speakers\r\n\r\n- `meera` (default)\r\n- `pavithra`\r\n- `maitreyi`\r\n- `arvind`\r\n- `amol`\r\n- `amartya`\r\n- `diya`\r\n- `neel`\r\n- `misha`\r\n- `vian`\r\n- `arjun`\r\n- `maya`\r\n\r\n### Languages\r\n\r\n| Language  | Code  |\r\n| --------- | ----- |\r\n| English   | en-IN |\r\n| Hindi     | hi-IN |\r\n| Bengali   | bn-IN |\r\n| Kannada   | kn-IN |\r\n| Malayalam | ml-IN |\r\n| Marathi   | mr-IN |\r\n| Odia      | od-IN |\r\n| Punjabi   | pa-IN |\r\n| Tamil     | ta-IN |\r\n| Telugu    | te-IN |\r\n| Gujarati  | gu-IN |\r\n","readmeFilename":"README.md","_rev":"1-76b956efba0914d64737c26c76eb6076"}