@mastra/voice-gladia 0.11.12-alpha.0 → 0.12.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,22 +1,19 @@
1
1
  # @mastra/voice-gladia
2
2
 
3
- ## 0.11.12-alpha.0
3
+ ## 0.12.0-beta.0
4
4
 
5
- ### Patch Changes
5
+ ### Minor Changes
6
6
 
7
- - update peerdeps ([`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc))
7
+ - Update peer dependencies to match core package version bump (1.0.0) ([#9237](https://github.com/mastra-ai/mastra/pull/9237))
8
8
 
9
- - Updated dependencies [[`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc), [`6d7e90d`](https://github.com/mastra-ai/mastra/commit/6d7e90db09713e6250f4d6c3d3cff1b4740e50f9), [`f78b908`](https://github.com/mastra-ai/mastra/commit/f78b9080e11af765969b36b4a619761056030840), [`23c2614`](https://github.com/mastra-ai/mastra/commit/23c26140fdbf04b8c59e8d7d52106d67dad962ec), [`e365eda`](https://github.com/mastra-ai/mastra/commit/e365eda45795b43707310531cac1e2ce4e5a0712)]:
10
- - @mastra/core@0.24.0-alpha.0
9
+ - Bump minimum required Node.js version to 22.13.0 ([#9706](https://github.com/mastra-ai/mastra/pull/9706))
11
10
 
12
- ## 0.11.11
11
+ - Removed old tracing code based on OpenTelemetry ([#9237](https://github.com/mastra-ai/mastra/pull/9237))
13
12
 
14
13
  ### Patch Changes
15
14
 
16
- - Fix peerdependencies ([`eb7c1c8`](https://github.com/mastra-ai/mastra/commit/eb7c1c8c592d8fb16dfd250e337d9cdc73c8d5de))
17
-
18
- - Updated dependencies []:
19
- - @mastra/core@0.23.1
15
+ - Updated dependencies [[`39c9743`](https://github.com/mastra-ai/mastra/commit/39c97432d084294f8ba85fbf3ef28098ff21459e), [`f743dbb`](https://github.com/mastra-ai/mastra/commit/f743dbb8b40d1627b5c10c0e6fc154f4ebb6e394), [`fec5129`](https://github.com/mastra-ai/mastra/commit/fec5129de7fc64423ea03661a56cef31dc747a0d), [`0491e7c`](https://github.com/mastra-ai/mastra/commit/0491e7c9b714cb0ba22187ee062147ec2dd7c712), [`f6f4903`](https://github.com/mastra-ai/mastra/commit/f6f4903397314f73362061dc5a3e8e7c61ea34aa), [`0e8ed46`](https://github.com/mastra-ai/mastra/commit/0e8ed467c54d6901a6a365f270ec15d6faadb36c), [`6c049d9`](https://github.com/mastra-ai/mastra/commit/6c049d94063fdcbd5b81c4912a2bf82a92c9cc0b), [`2f897df`](https://github.com/mastra-ai/mastra/commit/2f897df208508f46f51b7625e5dd20c37f93e0e3), [`3443770`](https://github.com/mastra-ai/mastra/commit/3443770662df8eb24c9df3589b2792d78cfcb811), [`f0a07e0`](https://github.com/mastra-ai/mastra/commit/f0a07e0111b3307c5fabfa4094c5c2cfb734fbe6), [`aaa40e7`](https://github.com/mastra-ai/mastra/commit/aaa40e788628b319baa8e889407d11ad626547fa), [`1521d71`](https://github.com/mastra-ai/mastra/commit/1521d716e5daedc74690c983fbd961123c56756b), [`9e1911d`](https://github.com/mastra-ai/mastra/commit/9e1911db2b4db85e0e768c3f15e0d61e319869f6), [`ebac155`](https://github.com/mastra-ai/mastra/commit/ebac15564a590117db7078233f927a7e28a85106), [`dd1c38d`](https://github.com/mastra-ai/mastra/commit/dd1c38d1b75f1b695c27b40d8d9d6ed00d5e0f6f), [`5948e6a`](https://github.com/mastra-ai/mastra/commit/5948e6a5146c83666ba3f294b2be576c82a513fb), [`8940859`](https://github.com/mastra-ai/mastra/commit/89408593658199b4ad67f7b65e888f344e64a442), [`e629310`](https://github.com/mastra-ai/mastra/commit/e629310f1a73fa236d49ec7a1d1cceb6229dc7cc), [`4c6b492`](https://github.com/mastra-ai/mastra/commit/4c6b492c4dd591c6a592520c1f6855d6e936d71f), [`dff01d8`](https://github.com/mastra-ai/mastra/commit/dff01d81ce1f4e4087cfac20fa868e6db138dd14), [`9d819d5`](https://github.com/mastra-ai/mastra/commit/9d819d54b61481639f4008e4694791bddf187edd), [`71c8d6c`](https://github.com/mastra-ai/mastra/commit/71c8d6c161253207b2b9588bdadb7eed604f7253), [`6179a9b`](https://github.com/mastra-ai/mastra/commit/6179a9ba36ffac326de3cc3c43cdc8028d37c251), [`00f4921`](https://github.com/mastra-ai/mastra/commit/00f4921dd2c91a1e5446799599ef7116a8214a1a), [`ca8041c`](https://github.com/mastra-ai/mastra/commit/ca8041cce0379fda22ed293a565bcb5b6ddca68a), [`7051bf3`](https://github.com/mastra-ai/mastra/commit/7051bf38b3b122a069008f861f7bfc004a6d9f6e), [`a8f1494`](https://github.com/mastra-ai/mastra/commit/a8f1494f4bbdc2770bcf327d4c7d869e332183f1), [`0793497`](https://github.com/mastra-ai/mastra/commit/079349753620c40246ffd673e3f9d7d9820beff3), [`5df9cce`](https://github.com/mastra-ai/mastra/commit/5df9cce1a753438413f64c11eeef8f845745c2a8), [`a854ede`](https://github.com/mastra-ai/mastra/commit/a854ede62bf5ac0945a624ac48913dd69c73aabf), [`c576fc0`](https://github.com/mastra-ai/mastra/commit/c576fc0b100b2085afded91a37c97a0ea0ec09c7), [`3defc80`](https://github.com/mastra-ai/mastra/commit/3defc80cf2b88a1b7fc1cc4ddcb91e982a614609), [`16153fe`](https://github.com/mastra-ai/mastra/commit/16153fe7eb13c99401f48e6ca32707c965ee28b9), [`9f4a683`](https://github.com/mastra-ai/mastra/commit/9f4a6833e88b52574665c028fd5508ad5c2f6004), [`bc94344`](https://github.com/mastra-ai/mastra/commit/bc943444a1342d8a662151b7bce1df7dae32f59c), [`57d157f`](https://github.com/mastra-ai/mastra/commit/57d157f0b163a95c3e6c9eae31bdb11d1bfc64f9), [`903f67d`](https://github.com/mastra-ai/mastra/commit/903f67d184504a273893818c02b961f5423a79ad), [`2a90c55`](https://github.com/mastra-ai/mastra/commit/2a90c55a86a9210697d5adaab5ee94584b079adc), [`eb09742`](https://github.com/mastra-ai/mastra/commit/eb09742197f66c4c38154c3beec78313e69760b2), [`96d35f6`](https://github.com/mastra-ai/mastra/commit/96d35f61376bc2b1bf148648a2c1985bd51bef55), [`5cbe88a`](https://github.com/mastra-ai/mastra/commit/5cbe88aefbd9f933bca669fd371ea36bf939ac6d), [`a1bd7b8`](https://github.com/mastra-ai/mastra/commit/a1bd7b8571db16b94eb01588f451a74758c96d65), [`d78b38d`](https://github.com/mastra-ai/mastra/commit/d78b38d898fce285260d3bbb4befade54331617f), [`0633100`](https://github.com/mastra-ai/mastra/commit/0633100a911ad22f5256471bdf753da21c104742), [`c710c16`](https://github.com/mastra-ai/mastra/commit/c710c1652dccfdc4111c8412bca7a6bb1d48b441), [`354ad0b`](https://github.com/mastra-ai/mastra/commit/354ad0b7b1b8183ac567f236a884fc7ede6d7138), [`cfae733`](https://github.com/mastra-ai/mastra/commit/cfae73394f4920635e6c919c8e95ff9a0788e2e5), [`e3dfda7`](https://github.com/mastra-ai/mastra/commit/e3dfda7b11bf3b8c4bb55637028befb5f387fc74), [`844ea5d`](https://github.com/mastra-ai/mastra/commit/844ea5dc0c248961e7bf73629ae7dcff503e853c), [`398fde3`](https://github.com/mastra-ai/mastra/commit/398fde3f39e707cda79372cdae8f9870e3b57c8d), [`f0f8f12`](https://github.com/mastra-ai/mastra/commit/f0f8f125c308f2d0fd36942ef652fd852df7522f), [`0d7618b`](https://github.com/mastra-ai/mastra/commit/0d7618bc650bf2800934b243eca5648f4aeed9c2), [`7b763e5`](https://github.com/mastra-ai/mastra/commit/7b763e52fc3eaf699c2a99f2adf418dd46e4e9a5), [`d36cfbb`](https://github.com/mastra-ai/mastra/commit/d36cfbbb6565ba5f827883cc9bb648eb14befdc1), [`3697853`](https://github.com/mastra-ai/mastra/commit/3697853deeb72017d90e0f38a93c1e29221aeca0), [`b2e45ec`](https://github.com/mastra-ai/mastra/commit/b2e45eca727a8db01a81ba93f1a5219c7183c839), [`d6d49f7`](https://github.com/mastra-ai/mastra/commit/d6d49f7b8714fa19a52ff9c7cf7fb7e73751901e), [`a534e95`](https://github.com/mastra-ai/mastra/commit/a534e9591f83b3cc1ebff99c67edf4cda7bf81d3), [`9d0e7fe`](https://github.com/mastra-ai/mastra/commit/9d0e7feca8ed98de959f53476ee1456073673348), [`53d927c`](https://github.com/mastra-ai/mastra/commit/53d927cc6f03bff33655b7e2b788da445a08731d), [`3f2faf2`](https://github.com/mastra-ai/mastra/commit/3f2faf2e2d685d6c053cc5af1bf9fedf267b2ce5), [`22f64bc`](https://github.com/mastra-ai/mastra/commit/22f64bc1d37149480b58bf2fefe35b79a1e3e7d5), [`83d5942`](https://github.com/mastra-ai/mastra/commit/83d5942669ce7bba4a6ca4fd4da697a10eb5ebdc), [`b7959e6`](https://github.com/mastra-ai/mastra/commit/b7959e6e25a46b480f9ea2217c4c6c588c423791), [`bda6370`](https://github.com/mastra-ai/mastra/commit/bda637009360649aaf579919e7873e33553c273e), [`d7acd8e`](https://github.com/mastra-ai/mastra/commit/d7acd8e987b5d7eff4fd98b0906c17c06a2e83d5), [`c7f1f7d`](https://github.com/mastra-ai/mastra/commit/c7f1f7d24f61f247f018cc2d1f33bf63212959a7), [`0bddc6d`](https://github.com/mastra-ai/mastra/commit/0bddc6d8dbd6f6008c0cba2e4960a2da75a55af1), [`735d8c1`](https://github.com/mastra-ai/mastra/commit/735d8c1c0d19fbc09e6f8b66cf41bc7655993838), [`acf322e`](https://github.com/mastra-ai/mastra/commit/acf322e0f1fd0189684cf529d91c694bea918a45), [`c942802`](https://github.com/mastra-ai/mastra/commit/c942802a477a925b01859a7b8688d4355715caaa), [`a0c8c1b`](https://github.com/mastra-ai/mastra/commit/a0c8c1b87d4fee252aebda73e8637fbe01d761c9), [`cc34739`](https://github.com/mastra-ai/mastra/commit/cc34739c34b6266a91bea561119240a7acf47887), [`c218bd3`](https://github.com/mastra-ai/mastra/commit/c218bd3759e32423735b04843a09404572631014), [`2c4438b`](https://github.com/mastra-ai/mastra/commit/2c4438b87817ab7eed818c7990fef010475af1a3), [`2b8893c`](https://github.com/mastra-ai/mastra/commit/2b8893cb108ef9acb72ee7835cd625610d2c1a4a), [`8e5c75b`](https://github.com/mastra-ai/mastra/commit/8e5c75bdb1d08a42d45309a4c72def4b6890230f), [`e59e0d3`](https://github.com/mastra-ai/mastra/commit/e59e0d32afb5fcf2c9f3c00c8f81f6c21d3a63fa), [`fa8409b`](https://github.com/mastra-ai/mastra/commit/fa8409bc39cfd8ba6643b9db5269b90b22e2a2f7), [`173c535`](https://github.com/mastra-ai/mastra/commit/173c535c0645b0da404fe09f003778f0b0d4e019)]:
16
+ - @mastra/core@1.0.0-beta.0
20
17
 
21
18
  ## 0.11.10
22
19
 
package/README.md CHANGED
@@ -32,7 +32,8 @@ const voice = new GladiaVoice({
32
32
  // Create an agent with voice capabilities
33
33
  // Note: Gladia only supports STT, so the agent will only be able to listen.
34
34
  export const agent = new Agent({
35
- name: 'Agent',
35
+ id: 'voice-agent',
36
+ name: 'Voice Agent',
36
37
  instructions: `You are a helpful assistant with STT capabilities.`,
37
38
  model: google('gemini-1.5-pro-latest'),
38
39
  voice: voice,
package/dist/index.cjs CHANGED
@@ -21,66 +21,64 @@ var GladiaVoice = class extends voice.MastraVoice {
21
21
  throw new Error("Gladia does not support text-to-speech.");
22
22
  }
23
23
  async listen(input, { mimeType, fileName, options }) {
24
- return this.traced(async () => {
25
- if (!fileName) {
26
- throw new Error("fileName is required for audio processing");
27
- }
28
- if (!mimeType) {
29
- throw new Error("mimeType is required for audio processing");
30
- }
31
- const chunks = [];
32
- for await (const chunk of input) {
33
- chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
34
- }
35
- const audioBuffer = Buffer.concat(chunks);
36
- const form = new FormData();
37
- form.append("audio", new Blob([audioBuffer], { type: mimeType }), fileName);
38
- const uploadRes = await fetch(`${this.baseUrl}/upload/`, {
39
- method: "POST",
40
- headers: { "x-gladia-key": this.apiKey },
41
- body: form
42
- });
43
- if (!uploadRes.ok) {
44
- throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);
45
- }
46
- const { audio_url } = await uploadRes.json();
47
- const opts = {
48
- diarization: true,
49
- // <-- default
50
- ...options
51
- };
52
- const transcribeRes = await fetch(`${this.baseUrl}/pre-recorded/`, {
53
- method: "POST",
24
+ if (!fileName) {
25
+ throw new Error("fileName is required for audio processing");
26
+ }
27
+ if (!mimeType) {
28
+ throw new Error("mimeType is required for audio processing");
29
+ }
30
+ const chunks = [];
31
+ for await (const chunk of input) {
32
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
33
+ }
34
+ const audioBuffer = Buffer.concat(chunks);
35
+ const form = new FormData();
36
+ form.append("audio", new Blob([audioBuffer], { type: mimeType }), fileName);
37
+ const uploadRes = await fetch(`${this.baseUrl}/upload/`, {
38
+ method: "POST",
39
+ headers: { "x-gladia-key": this.apiKey },
40
+ body: form
41
+ });
42
+ if (!uploadRes.ok) {
43
+ throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);
44
+ }
45
+ const { audio_url } = await uploadRes.json();
46
+ const opts = {
47
+ diarization: true,
48
+ // <-- default
49
+ ...options
50
+ };
51
+ const transcribeRes = await fetch(`${this.baseUrl}/pre-recorded/`, {
52
+ method: "POST",
53
+ headers: {
54
+ "x-gladia-key": this.apiKey,
55
+ "Content-Type": "application/json"
56
+ },
57
+ body: JSON.stringify({ audio_url, ...opts })
58
+ });
59
+ const { id } = await transcribeRes.json();
60
+ while (true) {
61
+ const pollRes = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {
62
+ method: "GET",
54
63
  headers: {
55
64
  "x-gladia-key": this.apiKey,
56
65
  "Content-Type": "application/json"
57
- },
58
- body: JSON.stringify({ audio_url, ...opts })
59
- });
60
- const { id } = await transcribeRes.json();
61
- while (true) {
62
- const pollRes = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {
63
- method: "GET",
64
- headers: {
65
- "x-gladia-key": this.apiKey,
66
- "Content-Type": "application/json"
67
- }
68
- });
69
- if (!pollRes.ok) {
70
- throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);
71
- }
72
- const pollJson = await pollRes.json();
73
- if (pollJson.status === "done") {
74
- const transcript = pollJson.result?.transcription?.full_transcript;
75
- if (!transcript) throw new Error("No transcript found");
76
- return transcript;
77
- }
78
- if (pollJson.status === "error") {
79
- throw new Error(`Gladia error: ${pollJson.error || "Unknown"}`);
80
66
  }
81
- await new Promise((res) => setTimeout(res, 1e3));
67
+ });
68
+ if (!pollRes.ok) {
69
+ throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);
70
+ }
71
+ const pollJson = await pollRes.json();
72
+ if (pollJson.status === "done") {
73
+ const transcript = pollJson.result?.transcription?.full_transcript;
74
+ if (!transcript) throw new Error("No transcript found");
75
+ return transcript;
76
+ }
77
+ if (pollJson.status === "error") {
78
+ throw new Error(`Gladia error: ${pollJson.error || "Unknown"}`);
82
79
  }
83
- }, "voice.gladia.listen")();
80
+ await new Promise((res) => setTimeout(res, 1e3));
81
+ }
84
82
  }
85
83
  };
86
84
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["MastraVoice"],"mappings":";;;;;AA6BO,IAAM,WAAA,GAAN,cAA0BA,iBAAA,CAAY;AAAA,EACnC,MAAA;AAAA,EACA,OAAA,GAAU,0BAAA;AAAA,EAElB,WAAA,CAAY,EAAE,cAAA,EAAe,GAAuC,EAAC,EAAG;AACtE,IAAA,MAAM,aAAA,GAAgB,QAAQ,GAAA,CAAI,cAAA;AAClC,IAAA,KAAA,CAAM;AAAA,MACJ,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM,QAAA;AAAA,QACN,MAAA,EAAQ,gBAAgB,MAAA,IAAU;AAAA;AACpC,KACD,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,cAAA,EAAgB,MAAA;AACnC,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAChE;AAAA,EAEA,MAAM,KAAA,CAAM,MAAA,EAAgB,QAAA,EAAkD;AAC5E,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAM,MAAA,CAAO,KAAA,EAAiB,EAAE,QAAA,EAAU,QAAA,EAAU,SAAQ,EAA4C;AACtG,IAAA,OAAO,IAAA,CAAK,OAAO,YAAY;AAC7B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,MAC7D;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,MAC7D;AACA,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,WAAA,MAAiB,SAAS,KAAA,EAAO;AAC/B,QAAA,MAAA,CAAO,IAAA,CAAK,OAAO,KAAA,KAAU,QAAA,GAAW,OAAO,IAAA,CAAK,KAAK,IAAI,KAAK,CAAA;AAAA,MACpE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AACxC,MAAA,MAAM,IAAA,GAAO,IAAI,QAAA,EAAS;AAC1B,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,IAAI,IAAA,CAAK,CAAC,WAAW,CAAA,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA;AAE1E,MAAA,MAAM,YAAiB,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,QAAA,CAAA,EAAY;AAAA,QAC5D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,IAAA,CAAK,MAAA,EAAO;AAAA,QACvC,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,SAAA,CAAU,MAAM,IAAI,MAAM,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,MAChF;AACA,MAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,UAAU,IAAA,EAAK;AAC3C,MAAA,MAAM,IAAA,GAA4B;AAAA,QAChC,WAAA,EAAa,IAAA;AAAA;AAAA,QACb,GAAG;AAAA,OACL;AAEA,MAAA,MAAM,gBAAqB,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,cAAA,CAAA,EAAkB;AAAA,QACtE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,gBAAgB,IAAA,CAAK,MAAA;AAAA,UACrB,cAAA,EAAgB;AAAA,SAClB;AAAA,QAEA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,SAAA,EAAW,GAAG,MAAM;AAAA,OAC5C,CAAA;AAED,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,MAAM,cAAc,IAAA,EAAK;AAExC,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,OAAA,GAAe,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,OAAO,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA,EAAI;AAAA,UACrE,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,gBAAgB,IAAA,CAAK,MAAA;AAAA,YACrB,cAAA,EAAgB;AAAA;AAClB,SACD,CAAA;AAED,QAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AACf,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,OAAA,CAAQ,MAAM,IAAI,MAAM,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,QAC7E;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAA,EAAK;AACpC,QAAA,IAAI,QAAA,CAAS,WAAW,MAAA,EAAQ;AAC9B,UAAA,MAAM,UAAA,GAAa,QAAA,CAAS,MAAA,EAAQ,aAAA,EAAe,eAAA;AACnD,UAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,qBAAqB,CAAA;AACtD,UAAA,OAAO,UAAA;AAAA,QACT;AAEA,QAAA,IAAI,QAAA,CAAS,WAAW,OAAA,EAAS;AAC/B,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,QAAA,CAAS,KAAA,IAAS,SAAS,CAAA,CAAE,CAAA;AAAA,QAChE;AAEA,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,GAAA,KAAO,UAAA,CAAW,GAAA,EAAK,GAAI,CAAC,CAAA;AAAA,MAChD;AAAA,IACF,CAAA,EAAG,qBAAqB,CAAA,EAAE;AAAA,EAC5B;AACF","file":"index.cjs","sourcesContent":["import type { Readable } from 'stream';\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface GladiaConfig {\n apiKey: string;\n}\n\ninterface GladiaListenOptions {\n diarization?: boolean;\n diarization_config?: {\n number_of_speakers?: number;\n min_speakers?: number;\n max_speakers?: number;\n };\n translation?: boolean;\n translation_config?: {\n model?: 'base' | 'enhanced';\n target_languages?: string[];\n };\n detect_language?: boolean;\n enable_code_switching?: boolean;\n}\n\ninterface GladiaListenCallParams {\n mimeType: string;\n fileName: string;\n options?: GladiaListenOptions;\n}\n\nexport class GladiaVoice extends MastraVoice {\n private apiKey: string;\n private baseUrl = 'https://api.gladia.io/v2';\n\n constructor({ listeningModel }: { listeningModel?: GladiaConfig } = {}) {\n const defaultApiKey = process.env.GLADIA_API_KEY;\n super({\n listeningModel: {\n name: 'gladia',\n apiKey: listeningModel?.apiKey ?? defaultApiKey,\n },\n });\n\n this.apiKey = this.listeningModel?.apiKey as string;\n if (!this.apiKey) throw new Error('GLADIA_API_KEY is not set.');\n }\n\n async speak(_input: string, _options?: Record<string, unknown>): Promise<any> {\n throw new Error('Gladia does not support text-to-speech.');\n }\n\n async listen(input: Readable, { mimeType, fileName, options }: GladiaListenCallParams): Promise<string> {\n return this.traced(async () => {\n if (!fileName) {\n throw new Error('fileName is required for audio processing');\n }\n if (!mimeType) {\n throw new Error('mimeType is required for audio processing');\n }\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n }\n\n const audioBuffer = Buffer.concat(chunks);\n const form = new FormData();\n form.append('audio', new Blob([audioBuffer], { type: mimeType }), fileName);\n\n const uploadRes: any = await fetch(`${this.baseUrl}/upload/`, {\n method: 'POST',\n headers: { 'x-gladia-key': this.apiKey },\n body: form,\n });\n if (!uploadRes.ok) {\n throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);\n }\n const { audio_url } = await uploadRes.json();\n const opts: GladiaListenOptions = {\n diarization: true, // <-- default\n ...options,\n };\n\n const transcribeRes: any = await fetch(`${this.baseUrl}/pre-recorded/`, {\n method: 'POST',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n\n body: JSON.stringify({ audio_url, ...opts }),\n });\n\n const { id } = await transcribeRes.json();\n\n while (true) {\n const pollRes: any = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {\n method: 'GET',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!pollRes.ok) {\n throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);\n }\n\n const pollJson = await pollRes.json();\n if (pollJson.status === 'done') {\n const transcript = pollJson.result?.transcription?.full_transcript;\n if (!transcript) throw new Error('No transcript found');\n return transcript;\n }\n\n if (pollJson.status === 'error') {\n throw new Error(`Gladia error: ${pollJson.error || 'Unknown'}`);\n }\n\n await new Promise(res => setTimeout(res, 1000));\n }\n }, 'voice.gladia.listen')();\n }\n}\n\nexport type { GladiaConfig, GladiaListenOptions };\nexport type { GladiaListenCallParams };\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["MastraVoice"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Readable } from 'stream';\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface GladiaConfig {\n apiKey: string;\n}\n\ninterface GladiaListenOptions {\n diarization?: boolean;\n diarization_config?: {\n number_of_speakers?: number;\n min_speakers?: number;\n max_speakers?: number;\n };\n translation?: boolean;\n translation_config?: {\n model?: 'base' | 'enhanced';\n target_languages?: string[];\n };\n detect_language?: boolean;\n enable_code_switching?: boolean;\n}\n\ninterface GladiaListenCallParams {\n mimeType: string;\n fileName: string;\n options?: GladiaListenOptions;\n}\n\nexport class GladiaVoice extends MastraVoice {\n private apiKey: string;\n private baseUrl = 'https://api.gladia.io/v2';\n\n constructor({ listeningModel }: { listeningModel?: GladiaConfig } = {}) {\n const defaultApiKey = process.env.GLADIA_API_KEY;\n super({\n listeningModel: {\n name: 'gladia',\n apiKey: listeningModel?.apiKey ?? defaultApiKey,\n },\n });\n\n this.apiKey = this.listeningModel?.apiKey as string;\n if (!this.apiKey) throw new Error('GLADIA_API_KEY is not set.');\n }\n\n async speak(_input: string, _options?: Record<string, unknown>): Promise<any> {\n throw new Error('Gladia does not support text-to-speech.');\n }\n\n async listen(input: Readable, { mimeType, fileName, options }: GladiaListenCallParams): Promise<string> {\n if (!fileName) {\n throw new Error('fileName is required for audio processing');\n }\n if (!mimeType) {\n throw new Error('mimeType is required for audio processing');\n }\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n }\n\n const audioBuffer = Buffer.concat(chunks);\n const form = new FormData();\n form.append('audio', new Blob([audioBuffer], { type: mimeType }), fileName);\n\n const uploadRes: any = await fetch(`${this.baseUrl}/upload/`, {\n method: 'POST',\n headers: { 'x-gladia-key': this.apiKey },\n body: form,\n });\n if (!uploadRes.ok) {\n throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);\n }\n const { audio_url } = await uploadRes.json();\n const opts: GladiaListenOptions = {\n diarization: true, // <-- default\n ...options,\n };\n\n const transcribeRes: any = await fetch(`${this.baseUrl}/pre-recorded/`, {\n method: 'POST',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n\n body: JSON.stringify({ audio_url, ...opts }),\n });\n\n const { id } = await transcribeRes.json();\n\n while (true) {\n const pollRes: any = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {\n method: 'GET',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!pollRes.ok) {\n throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);\n }\n\n const pollJson = await pollRes.json();\n if (pollJson.status === 'done') {\n const transcript = pollJson.result?.transcription?.full_transcript;\n if (!transcript) throw new Error('No transcript found');\n return transcript;\n }\n\n if (pollJson.status === 'error') {\n throw new Error(`Gladia error: ${pollJson.error || 'Unknown'}`);\n }\n\n await new Promise(res => setTimeout(res, 1000));\n }\n }\n}\n\nexport type { GladiaConfig, GladiaListenOptions };\nexport type { GladiaListenCallParams };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,EAAE,cAAc,EAAE,GAAE;QAAE,cAAc,CAAC,EAAE,YAAY,CAAA;KAAO;IAahE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAIvE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;CAuExG;AAED,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE;QACnB,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,EAAE,cAAc,EAAE,GAAE;QAAE,cAAc,CAAC,EAAE,YAAY,CAAA;KAAO;IAahE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAIvE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC;CAqExG;AAED,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -19,66 +19,64 @@ var GladiaVoice = class extends MastraVoice {
19
19
  throw new Error("Gladia does not support text-to-speech.");
20
20
  }
21
21
  async listen(input, { mimeType, fileName, options }) {
22
- return this.traced(async () => {
23
- if (!fileName) {
24
- throw new Error("fileName is required for audio processing");
25
- }
26
- if (!mimeType) {
27
- throw new Error("mimeType is required for audio processing");
28
- }
29
- const chunks = [];
30
- for await (const chunk of input) {
31
- chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
32
- }
33
- const audioBuffer = Buffer.concat(chunks);
34
- const form = new FormData();
35
- form.append("audio", new Blob([audioBuffer], { type: mimeType }), fileName);
36
- const uploadRes = await fetch(`${this.baseUrl}/upload/`, {
37
- method: "POST",
38
- headers: { "x-gladia-key": this.apiKey },
39
- body: form
40
- });
41
- if (!uploadRes.ok) {
42
- throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);
43
- }
44
- const { audio_url } = await uploadRes.json();
45
- const opts = {
46
- diarization: true,
47
- // <-- default
48
- ...options
49
- };
50
- const transcribeRes = await fetch(`${this.baseUrl}/pre-recorded/`, {
51
- method: "POST",
22
+ if (!fileName) {
23
+ throw new Error("fileName is required for audio processing");
24
+ }
25
+ if (!mimeType) {
26
+ throw new Error("mimeType is required for audio processing");
27
+ }
28
+ const chunks = [];
29
+ for await (const chunk of input) {
30
+ chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
31
+ }
32
+ const audioBuffer = Buffer.concat(chunks);
33
+ const form = new FormData();
34
+ form.append("audio", new Blob([audioBuffer], { type: mimeType }), fileName);
35
+ const uploadRes = await fetch(`${this.baseUrl}/upload/`, {
36
+ method: "POST",
37
+ headers: { "x-gladia-key": this.apiKey },
38
+ body: form
39
+ });
40
+ if (!uploadRes.ok) {
41
+ throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);
42
+ }
43
+ const { audio_url } = await uploadRes.json();
44
+ const opts = {
45
+ diarization: true,
46
+ // <-- default
47
+ ...options
48
+ };
49
+ const transcribeRes = await fetch(`${this.baseUrl}/pre-recorded/`, {
50
+ method: "POST",
51
+ headers: {
52
+ "x-gladia-key": this.apiKey,
53
+ "Content-Type": "application/json"
54
+ },
55
+ body: JSON.stringify({ audio_url, ...opts })
56
+ });
57
+ const { id } = await transcribeRes.json();
58
+ while (true) {
59
+ const pollRes = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {
60
+ method: "GET",
52
61
  headers: {
53
62
  "x-gladia-key": this.apiKey,
54
63
  "Content-Type": "application/json"
55
- },
56
- body: JSON.stringify({ audio_url, ...opts })
57
- });
58
- const { id } = await transcribeRes.json();
59
- while (true) {
60
- const pollRes = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {
61
- method: "GET",
62
- headers: {
63
- "x-gladia-key": this.apiKey,
64
- "Content-Type": "application/json"
65
- }
66
- });
67
- if (!pollRes.ok) {
68
- throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);
69
- }
70
- const pollJson = await pollRes.json();
71
- if (pollJson.status === "done") {
72
- const transcript = pollJson.result?.transcription?.full_transcript;
73
- if (!transcript) throw new Error("No transcript found");
74
- return transcript;
75
- }
76
- if (pollJson.status === "error") {
77
- throw new Error(`Gladia error: ${pollJson.error || "Unknown"}`);
78
64
  }
79
- await new Promise((res) => setTimeout(res, 1e3));
65
+ });
66
+ if (!pollRes.ok) {
67
+ throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);
68
+ }
69
+ const pollJson = await pollRes.json();
70
+ if (pollJson.status === "done") {
71
+ const transcript = pollJson.result?.transcription?.full_transcript;
72
+ if (!transcript) throw new Error("No transcript found");
73
+ return transcript;
74
+ }
75
+ if (pollJson.status === "error") {
76
+ throw new Error(`Gladia error: ${pollJson.error || "Unknown"}`);
80
77
  }
81
- }, "voice.gladia.listen")();
78
+ await new Promise((res) => setTimeout(res, 1e3));
79
+ }
82
80
  }
83
81
  };
84
82
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Readable } from 'stream';\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface GladiaConfig {\n apiKey: string;\n}\n\ninterface GladiaListenOptions {\n diarization?: boolean;\n diarization_config?: {\n number_of_speakers?: number;\n min_speakers?: number;\n max_speakers?: number;\n };\n translation?: boolean;\n translation_config?: {\n model?: 'base' | 'enhanced';\n target_languages?: string[];\n };\n detect_language?: boolean;\n enable_code_switching?: boolean;\n}\n\ninterface GladiaListenCallParams {\n mimeType: string;\n fileName: string;\n options?: GladiaListenOptions;\n}\n\nexport class GladiaVoice extends MastraVoice {\n private apiKey: string;\n private baseUrl = 'https://api.gladia.io/v2';\n\n constructor({ listeningModel }: { listeningModel?: GladiaConfig } = {}) {\n const defaultApiKey = process.env.GLADIA_API_KEY;\n super({\n listeningModel: {\n name: 'gladia',\n apiKey: listeningModel?.apiKey ?? defaultApiKey,\n },\n });\n\n this.apiKey = this.listeningModel?.apiKey as string;\n if (!this.apiKey) throw new Error('GLADIA_API_KEY is not set.');\n }\n\n async speak(_input: string, _options?: Record<string, unknown>): Promise<any> {\n throw new Error('Gladia does not support text-to-speech.');\n }\n\n async listen(input: Readable, { mimeType, fileName, options }: GladiaListenCallParams): Promise<string> {\n return this.traced(async () => {\n if (!fileName) {\n throw new Error('fileName is required for audio processing');\n }\n if (!mimeType) {\n throw new Error('mimeType is required for audio processing');\n }\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n }\n\n const audioBuffer = Buffer.concat(chunks);\n const form = new FormData();\n form.append('audio', new Blob([audioBuffer], { type: mimeType }), fileName);\n\n const uploadRes: any = await fetch(`${this.baseUrl}/upload/`, {\n method: 'POST',\n headers: { 'x-gladia-key': this.apiKey },\n body: form,\n });\n if (!uploadRes.ok) {\n throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);\n }\n const { audio_url } = await uploadRes.json();\n const opts: GladiaListenOptions = {\n diarization: true, // <-- default\n ...options,\n };\n\n const transcribeRes: any = await fetch(`${this.baseUrl}/pre-recorded/`, {\n method: 'POST',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n\n body: JSON.stringify({ audio_url, ...opts }),\n });\n\n const { id } = await transcribeRes.json();\n\n while (true) {\n const pollRes: any = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {\n method: 'GET',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!pollRes.ok) {\n throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);\n }\n\n const pollJson = await pollRes.json();\n if (pollJson.status === 'done') {\n const transcript = pollJson.result?.transcription?.full_transcript;\n if (!transcript) throw new Error('No transcript found');\n return transcript;\n }\n\n if (pollJson.status === 'error') {\n throw new Error(`Gladia error: ${pollJson.error || 'Unknown'}`);\n }\n\n await new Promise(res => setTimeout(res, 1000));\n }\n }, 'voice.gladia.listen')();\n }\n}\n\nexport type { GladiaConfig, GladiaListenOptions };\nexport type { GladiaListenCallParams };\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { Readable } from 'stream';\nimport { MastraVoice } from '@mastra/core/voice';\n\ninterface GladiaConfig {\n apiKey: string;\n}\n\ninterface GladiaListenOptions {\n diarization?: boolean;\n diarization_config?: {\n number_of_speakers?: number;\n min_speakers?: number;\n max_speakers?: number;\n };\n translation?: boolean;\n translation_config?: {\n model?: 'base' | 'enhanced';\n target_languages?: string[];\n };\n detect_language?: boolean;\n enable_code_switching?: boolean;\n}\n\ninterface GladiaListenCallParams {\n mimeType: string;\n fileName: string;\n options?: GladiaListenOptions;\n}\n\nexport class GladiaVoice extends MastraVoice {\n private apiKey: string;\n private baseUrl = 'https://api.gladia.io/v2';\n\n constructor({ listeningModel }: { listeningModel?: GladiaConfig } = {}) {\n const defaultApiKey = process.env.GLADIA_API_KEY;\n super({\n listeningModel: {\n name: 'gladia',\n apiKey: listeningModel?.apiKey ?? defaultApiKey,\n },\n });\n\n this.apiKey = this.listeningModel?.apiKey as string;\n if (!this.apiKey) throw new Error('GLADIA_API_KEY is not set.');\n }\n\n async speak(_input: string, _options?: Record<string, unknown>): Promise<any> {\n throw new Error('Gladia does not support text-to-speech.');\n }\n\n async listen(input: Readable, { mimeType, fileName, options }: GladiaListenCallParams): Promise<string> {\n if (!fileName) {\n throw new Error('fileName is required for audio processing');\n }\n if (!mimeType) {\n throw new Error('mimeType is required for audio processing');\n }\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n }\n\n const audioBuffer = Buffer.concat(chunks);\n const form = new FormData();\n form.append('audio', new Blob([audioBuffer], { type: mimeType }), fileName);\n\n const uploadRes: any = await fetch(`${this.baseUrl}/upload/`, {\n method: 'POST',\n headers: { 'x-gladia-key': this.apiKey },\n body: form,\n });\n if (!uploadRes.ok) {\n throw new Error(`Upload failed: ${uploadRes.status} ${await uploadRes.text()}`);\n }\n const { audio_url } = await uploadRes.json();\n const opts: GladiaListenOptions = {\n diarization: true, // <-- default\n ...options,\n };\n\n const transcribeRes: any = await fetch(`${this.baseUrl}/pre-recorded/`, {\n method: 'POST',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n\n body: JSON.stringify({ audio_url, ...opts }),\n });\n\n const { id } = await transcribeRes.json();\n\n while (true) {\n const pollRes: any = await fetch(`${this.baseUrl}/pre-recorded/${id}`, {\n method: 'GET',\n headers: {\n 'x-gladia-key': this.apiKey,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!pollRes.ok) {\n throw new Error(`Polling failed: ${pollRes.status} ${await pollRes.text()}`);\n }\n\n const pollJson = await pollRes.json();\n if (pollJson.status === 'done') {\n const transcript = pollJson.result?.transcription?.full_transcript;\n if (!transcript) throw new Error('No transcript found');\n return transcript;\n }\n\n if (pollJson.status === 'error') {\n throw new Error(`Gladia error: ${pollJson.error || 'Unknown'}`);\n }\n\n await new Promise(res => setTimeout(res, 1000));\n }\n }\n}\n\nexport type { GladiaConfig, GladiaListenOptions };\nexport type { GladiaListenCallParams };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/voice-gladia",
3
- "version": "0.11.12-alpha.0",
3
+ "version": "0.12.0-beta.0",
4
4
  "description": "Mastra Gladia AI voice integration",
5
5
  "type": "module",
6
6
  "files": [
@@ -33,9 +33,9 @@
33
33
  "typescript": "^5.8.3",
34
34
  "vitest": "^3.2.4",
35
35
  "zod": "^3.25.76",
36
- "@mastra/core": "0.24.0-alpha.0",
37
- "@internal/types-builder": "0.0.32",
38
- "@internal/lint": "0.0.57"
36
+ "@internal/lint": "0.0.53",
37
+ "@internal/types-builder": "0.0.28",
38
+ "@mastra/core": "1.0.0-beta.0"
39
39
  },
40
40
  "keywords": [
41
41
  "mastra",
@@ -45,7 +45,7 @@
45
45
  "speech-recognition"
46
46
  ],
47
47
  "peerDependencies": {
48
- "@mastra/core": ">=0.18.1-0 <0.25.0-0",
48
+ "@mastra/core": ">=1.0.0-0 <2.0.0-0",
49
49
  "zod": "^3.25.0 || ^4.0.0"
50
50
  },
51
51
  "homepage": "https://mastra.ai",
@@ -57,12 +57,8 @@
57
57
  "bugs": {
58
58
  "url": "https://github.com/mastra-ai/mastra/issues"
59
59
  },
60
- "publishConfig": {
61
- "access": "public",
62
- "publish-branch": [
63
- "main",
64
- "0.x"
65
- ]
60
+ "engines": {
61
+ "node": ">=22.13.0"
66
62
  },
67
63
  "scripts": {
68
64
  "build": "tsup --silent --config tsup.config.ts",