@mastra/voice-gladia 0.0.0-add-libsql-changeset-20250910154739
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 +265 -0
- package/LICENSE.md +15 -0
- package/README.md +72 -0
- package/dist/index.cjs +89 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/package.json +67 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# @mastra/voice-gladia
|
|
2
|
+
|
|
3
|
+
## 0.0.0-add-libsql-changeset-20250910154739
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [[`b4379f7`](https://github.com/mastra-ai/mastra/commit/b4379f703fd74474f253420e8c3a684f2c4b2f8e), [`d34aaa1`](https://github.com/mastra-ai/mastra/commit/d34aaa1da5d3c5f991740f59e2fe6d28d3e2dd91), [`b2babfa`](https://github.com/mastra-ai/mastra/commit/b2babfa9e75b22f2759179e71d8473f6dc5421ed), [`d8c3ba5`](https://github.com/mastra-ai/mastra/commit/d8c3ba516f4173282d293f7e64769cfc8738d360), [`6424c7e`](https://github.com/mastra-ai/mastra/commit/6424c7ec38b6921d66212431db1e0958f441b2a7), [`db94750`](https://github.com/mastra-ai/mastra/commit/db94750a41fd29b43eb1f7ce8e97ba8b9978c91b), [`a66a371`](https://github.com/mastra-ai/mastra/commit/a66a3716b00553d7f01842be9deb34f720b10fab), [`69fc3cd`](https://github.com/mastra-ai/mastra/commit/69fc3cd0fd814901785bdcf49bf536ab1e7fd975)]:
|
|
8
|
+
- @mastra/core@0.0.0-add-libsql-changeset-20250910154739
|
|
9
|
+
|
|
10
|
+
## 0.11.4
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 376913a: Update peerdeps
|
|
15
|
+
- Updated dependencies [8fbf79e]
|
|
16
|
+
- Updated dependencies [fd83526]
|
|
17
|
+
- Updated dependencies [d0b90ab]
|
|
18
|
+
- Updated dependencies [6f5eb7a]
|
|
19
|
+
- Updated dependencies [a01cf14]
|
|
20
|
+
- Updated dependencies [a9e50ee]
|
|
21
|
+
- Updated dependencies [5397eb4]
|
|
22
|
+
- Updated dependencies [c9f4e4a]
|
|
23
|
+
- Updated dependencies [0acbc80]
|
|
24
|
+
- @mastra/core@0.16.0
|
|
25
|
+
|
|
26
|
+
## 0.11.4-alpha.0
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- 376913a: Update peerdeps
|
|
31
|
+
- Updated dependencies [8fbf79e]
|
|
32
|
+
- @mastra/core@0.16.0-alpha.1
|
|
33
|
+
|
|
34
|
+
## 0.11.3
|
|
35
|
+
|
|
36
|
+
### Patch Changes
|
|
37
|
+
|
|
38
|
+
- de3cbc6: Update the `package.json` file to include additional fields like `repository`, `homepage` or `files`.
|
|
39
|
+
- f0dfcac: updated core peerdep
|
|
40
|
+
- Updated dependencies [ab48c97]
|
|
41
|
+
- Updated dependencies [85ef90b]
|
|
42
|
+
- Updated dependencies [aedbbfa]
|
|
43
|
+
- Updated dependencies [ff89505]
|
|
44
|
+
- Updated dependencies [637f323]
|
|
45
|
+
- Updated dependencies [de3cbc6]
|
|
46
|
+
- Updated dependencies [c19bcf7]
|
|
47
|
+
- Updated dependencies [4474d04]
|
|
48
|
+
- Updated dependencies [183dc95]
|
|
49
|
+
- Updated dependencies [a1111e2]
|
|
50
|
+
- Updated dependencies [b42a961]
|
|
51
|
+
- Updated dependencies [61debef]
|
|
52
|
+
- Updated dependencies [9beaeff]
|
|
53
|
+
- Updated dependencies [29de0e1]
|
|
54
|
+
- Updated dependencies [f643c65]
|
|
55
|
+
- Updated dependencies [00c74e7]
|
|
56
|
+
- Updated dependencies [fef7375]
|
|
57
|
+
- Updated dependencies [e3d8fea]
|
|
58
|
+
- Updated dependencies [45e4d39]
|
|
59
|
+
- Updated dependencies [9eee594]
|
|
60
|
+
- Updated dependencies [7149d8d]
|
|
61
|
+
- Updated dependencies [822c2e8]
|
|
62
|
+
- Updated dependencies [979912c]
|
|
63
|
+
- Updated dependencies [7dcf4c0]
|
|
64
|
+
- Updated dependencies [4106a58]
|
|
65
|
+
- Updated dependencies [ad78bfc]
|
|
66
|
+
- Updated dependencies [0302f50]
|
|
67
|
+
- Updated dependencies [6ac697e]
|
|
68
|
+
- Updated dependencies [74db265]
|
|
69
|
+
- Updated dependencies [0ce418a]
|
|
70
|
+
- Updated dependencies [af90672]
|
|
71
|
+
- Updated dependencies [8387952]
|
|
72
|
+
- Updated dependencies [7f3b8da]
|
|
73
|
+
- Updated dependencies [905352b]
|
|
74
|
+
- Updated dependencies [599d04c]
|
|
75
|
+
- Updated dependencies [56041d0]
|
|
76
|
+
- Updated dependencies [3412597]
|
|
77
|
+
- Updated dependencies [5eca5d2]
|
|
78
|
+
- Updated dependencies [f2cda47]
|
|
79
|
+
- Updated dependencies [5de1555]
|
|
80
|
+
- Updated dependencies [cfd377a]
|
|
81
|
+
- Updated dependencies [1ed5a3e]
|
|
82
|
+
- @mastra/core@0.15.3
|
|
83
|
+
|
|
84
|
+
## 0.11.3-alpha.1
|
|
85
|
+
|
|
86
|
+
### Patch Changes
|
|
87
|
+
|
|
88
|
+
- [#7394](https://github.com/mastra-ai/mastra/pull/7394) [`f0dfcac`](https://github.com/mastra-ai/mastra/commit/f0dfcac4458bdf789b975e2d63e984f5d1e7c4d3) Thanks [@NikAiyer](https://github.com/NikAiyer)! - updated core peerdep
|
|
89
|
+
|
|
90
|
+
- Updated dependencies [[`7149d8d`](https://github.com/mastra-ai/mastra/commit/7149d8d4bdc1edf0008e0ca9b7925eb0b8b60dbe)]:
|
|
91
|
+
- @mastra/core@0.15.3-alpha.7
|
|
92
|
+
|
|
93
|
+
## 0.11.3-alpha.0
|
|
94
|
+
|
|
95
|
+
### Patch Changes
|
|
96
|
+
|
|
97
|
+
- [#7343](https://github.com/mastra-ai/mastra/pull/7343) [`de3cbc6`](https://github.com/mastra-ai/mastra/commit/de3cbc61079211431bd30487982ea3653517278e) Thanks [@LekoArts](https://github.com/LekoArts)! - Update the `package.json` file to include additional fields like `repository`, `homepage` or `files`.
|
|
98
|
+
|
|
99
|
+
- Updated dependencies [[`85ef90b`](https://github.com/mastra-ai/mastra/commit/85ef90bb2cd4ae4df855c7ac175f7d392c55c1bf), [`de3cbc6`](https://github.com/mastra-ai/mastra/commit/de3cbc61079211431bd30487982ea3653517278e)]:
|
|
100
|
+
- @mastra/core@0.15.3-alpha.5
|
|
101
|
+
|
|
102
|
+
## 0.11.2
|
|
103
|
+
|
|
104
|
+
### Patch Changes
|
|
105
|
+
|
|
106
|
+
- [`c6113ed`](https://github.com/mastra-ai/mastra/commit/c6113ed7f9df297e130d94436ceee310273d6430) Thanks [@wardpeet](https://github.com/wardpeet)! - Fix peerdpes for @mastra/core
|
|
107
|
+
|
|
108
|
+
- Updated dependencies []:
|
|
109
|
+
- @mastra/core@0.15.2
|
|
110
|
+
|
|
111
|
+
## 0.11.1
|
|
112
|
+
|
|
113
|
+
### Patch Changes
|
|
114
|
+
|
|
115
|
+
- [`95b2aa9`](https://github.com/mastra-ai/mastra/commit/95b2aa908230919e67efcac0d69005a2d5745298) Thanks [@wardpeet](https://github.com/wardpeet)! - Fix peerdeps @mastra/core
|
|
116
|
+
|
|
117
|
+
- Updated dependencies []:
|
|
118
|
+
- @mastra/core@0.15.1
|
|
119
|
+
|
|
120
|
+
## 0.11.0
|
|
121
|
+
|
|
122
|
+
### Minor Changes
|
|
123
|
+
|
|
124
|
+
- [#7028](https://github.com/mastra-ai/mastra/pull/7028) [`da58ccc`](https://github.com/mastra-ai/mastra/commit/da58ccc1f2ac33da0cb97b00443fc6208b45bdec) Thanks [@wardpeet](https://github.com/wardpeet)! - Bump core peerdependency
|
|
125
|
+
|
|
126
|
+
- [#7032](https://github.com/mastra-ai/mastra/pull/7032) [`1191ce9`](https://github.com/mastra-ai/mastra/commit/1191ce946b40ed291e7877a349f8388e3cff7e5c) Thanks [@wardpeet](https://github.com/wardpeet)! - Bump zod peerdep to 3.25.0 to support both v3/v4
|
|
127
|
+
|
|
128
|
+
### Patch Changes
|
|
129
|
+
|
|
130
|
+
- [#6942](https://github.com/mastra-ai/mastra/pull/6942) [`ca8ec2f`](https://github.com/mastra-ai/mastra/commit/ca8ec2f61884b9dfec5fc0d5f4f29d281ad13c01) Thanks [@wardpeet](https://github.com/wardpeet)! - Add zod as peerdeps for all packages
|
|
131
|
+
|
|
132
|
+
- Updated dependencies [[`0778757`](https://github.com/mastra-ai/mastra/commit/07787570e4addbd501522037bd2542c3d9e26822), [`943a7f3`](https://github.com/mastra-ai/mastra/commit/943a7f3dbc6a8ab3f9b7bc7c8a1c5b319c3d7f56), [`bf504a8`](https://github.com/mastra-ai/mastra/commit/bf504a833051f6f321d832cc7d631f3cb86d657b), [`be49354`](https://github.com/mastra-ai/mastra/commit/be493546dca540101923ec700feb31f9a13939f2), [`d591ab3`](https://github.com/mastra-ai/mastra/commit/d591ab3ecc985c1870c0db347f8d7a20f7360536), [`ba82abe`](https://github.com/mastra-ai/mastra/commit/ba82abe76e869316bb5a9c95e8ea3946f3436fae), [`727f7e5`](https://github.com/mastra-ai/mastra/commit/727f7e5086e62e0dfe3356fb6dcd8bcb420af246), [`e6f5046`](https://github.com/mastra-ai/mastra/commit/e6f50467aff317e67e8bd74c485c3fbe2a5a6db1), [`82d9f64`](https://github.com/mastra-ai/mastra/commit/82d9f647fbe4f0177320e7c05073fce88599aa95), [`2e58325`](https://github.com/mastra-ai/mastra/commit/2e58325beb170f5b92f856e27d915cd26917e5e6), [`1191ce9`](https://github.com/mastra-ai/mastra/commit/1191ce946b40ed291e7877a349f8388e3cff7e5c), [`4189486`](https://github.com/mastra-ai/mastra/commit/4189486c6718fda78347bdf4ce4d3fc33b2236e1), [`ca8ec2f`](https://github.com/mastra-ai/mastra/commit/ca8ec2f61884b9dfec5fc0d5f4f29d281ad13c01), [`9613558`](https://github.com/mastra-ai/mastra/commit/9613558e6475f4710e05d1be7553a32ee7bddc20)]:
|
|
133
|
+
- @mastra/core@0.15.0
|
|
134
|
+
|
|
135
|
+
## 0.11.0-alpha.2
|
|
136
|
+
|
|
137
|
+
### Minor Changes
|
|
138
|
+
|
|
139
|
+
- [#7032](https://github.com/mastra-ai/mastra/pull/7032) [`1191ce9`](https://github.com/mastra-ai/mastra/commit/1191ce946b40ed291e7877a349f8388e3cff7e5c) Thanks [@wardpeet](https://github.com/wardpeet)! - Bump zod peerdep to 3.25.0 to support both v3/v4
|
|
140
|
+
|
|
141
|
+
### Patch Changes
|
|
142
|
+
|
|
143
|
+
- Updated dependencies [[`1191ce9`](https://github.com/mastra-ai/mastra/commit/1191ce946b40ed291e7877a349f8388e3cff7e5c)]:
|
|
144
|
+
- @mastra/core@0.15.0-alpha.4
|
|
145
|
+
|
|
146
|
+
## 0.11.0-alpha.1
|
|
147
|
+
|
|
148
|
+
### Minor Changes
|
|
149
|
+
|
|
150
|
+
- [#7028](https://github.com/mastra-ai/mastra/pull/7028) [`da58ccc`](https://github.com/mastra-ai/mastra/commit/da58ccc1f2ac33da0cb97b00443fc6208b45bdec) Thanks [@wardpeet](https://github.com/wardpeet)! - Bump core peerdependency
|
|
151
|
+
|
|
152
|
+
### Patch Changes
|
|
153
|
+
|
|
154
|
+
- Updated dependencies []:
|
|
155
|
+
- @mastra/core@0.15.0-alpha.3
|
|
156
|
+
|
|
157
|
+
## 0.10.4-alpha.0
|
|
158
|
+
|
|
159
|
+
### Patch Changes
|
|
160
|
+
|
|
161
|
+
- [#6942](https://github.com/mastra-ai/mastra/pull/6942) [`ca8ec2f`](https://github.com/mastra-ai/mastra/commit/ca8ec2f61884b9dfec5fc0d5f4f29d281ad13c01) Thanks [@wardpeet](https://github.com/wardpeet)! - Add zod as peerdeps for all packages
|
|
162
|
+
|
|
163
|
+
- Updated dependencies [[`943a7f3`](https://github.com/mastra-ai/mastra/commit/943a7f3dbc6a8ab3f9b7bc7c8a1c5b319c3d7f56), [`be49354`](https://github.com/mastra-ai/mastra/commit/be493546dca540101923ec700feb31f9a13939f2), [`d591ab3`](https://github.com/mastra-ai/mastra/commit/d591ab3ecc985c1870c0db347f8d7a20f7360536), [`ba82abe`](https://github.com/mastra-ai/mastra/commit/ba82abe76e869316bb5a9c95e8ea3946f3436fae), [`727f7e5`](https://github.com/mastra-ai/mastra/commit/727f7e5086e62e0dfe3356fb6dcd8bcb420af246), [`82d9f64`](https://github.com/mastra-ai/mastra/commit/82d9f647fbe4f0177320e7c05073fce88599aa95), [`4189486`](https://github.com/mastra-ai/mastra/commit/4189486c6718fda78347bdf4ce4d3fc33b2236e1), [`ca8ec2f`](https://github.com/mastra-ai/mastra/commit/ca8ec2f61884b9dfec5fc0d5f4f29d281ad13c01)]:
|
|
164
|
+
- @mastra/core@0.14.2-alpha.1
|
|
165
|
+
|
|
166
|
+
## 0.10.3
|
|
167
|
+
|
|
168
|
+
### Patch Changes
|
|
169
|
+
|
|
170
|
+
- 4a406ec: fixes TypeScript declaration file imports to ensure proper ESM compatibility
|
|
171
|
+
- Updated dependencies [cb36de0]
|
|
172
|
+
- Updated dependencies [d0496e6]
|
|
173
|
+
- Updated dependencies [a82b851]
|
|
174
|
+
- Updated dependencies [ea0c5f2]
|
|
175
|
+
- Updated dependencies [41a0a0e]
|
|
176
|
+
- Updated dependencies [2871020]
|
|
177
|
+
- Updated dependencies [94f4812]
|
|
178
|
+
- Updated dependencies [e202b82]
|
|
179
|
+
- Updated dependencies [e00f6a0]
|
|
180
|
+
- Updated dependencies [4a406ec]
|
|
181
|
+
- Updated dependencies [b0e43c1]
|
|
182
|
+
- Updated dependencies [5d377e5]
|
|
183
|
+
- Updated dependencies [1fb812e]
|
|
184
|
+
- Updated dependencies [35c5798]
|
|
185
|
+
- @mastra/core@0.13.0
|
|
186
|
+
|
|
187
|
+
## 0.10.3-alpha.0
|
|
188
|
+
|
|
189
|
+
### Patch Changes
|
|
190
|
+
|
|
191
|
+
- 4a406ec: fixes TypeScript declaration file imports to ensure proper ESM compatibility
|
|
192
|
+
- Updated dependencies [cb36de0]
|
|
193
|
+
- Updated dependencies [a82b851]
|
|
194
|
+
- Updated dependencies [41a0a0e]
|
|
195
|
+
- Updated dependencies [2871020]
|
|
196
|
+
- Updated dependencies [4a406ec]
|
|
197
|
+
- Updated dependencies [5d377e5]
|
|
198
|
+
- @mastra/core@0.13.0-alpha.2
|
|
199
|
+
|
|
200
|
+
## 0.10.2
|
|
201
|
+
|
|
202
|
+
### Patch Changes
|
|
203
|
+
|
|
204
|
+
- 8e1b6e9: dependencies updates:
|
|
205
|
+
- Updated dependency [`zod@^3.25.67` ↗︎](https://www.npmjs.com/package/zod/v/3.25.67) (from `^3.24.3`, in `dependencies`)
|
|
206
|
+
- Updated dependencies [15e9d26]
|
|
207
|
+
- Updated dependencies [d1baedb]
|
|
208
|
+
- Updated dependencies [d8f2d19]
|
|
209
|
+
- Updated dependencies [4d21bf2]
|
|
210
|
+
- Updated dependencies [07d6d88]
|
|
211
|
+
- Updated dependencies [9d52b17]
|
|
212
|
+
- Updated dependencies [2097952]
|
|
213
|
+
- Updated dependencies [792c4c0]
|
|
214
|
+
- Updated dependencies [5d74aab]
|
|
215
|
+
- Updated dependencies [a8b194f]
|
|
216
|
+
- Updated dependencies [4fb0cc2]
|
|
217
|
+
- Updated dependencies [d2a7a31]
|
|
218
|
+
- Updated dependencies [502fe05]
|
|
219
|
+
- Updated dependencies [144eb0b]
|
|
220
|
+
- Updated dependencies [8ba1b51]
|
|
221
|
+
- Updated dependencies [4efcfa0]
|
|
222
|
+
- Updated dependencies [0e17048]
|
|
223
|
+
- @mastra/core@0.10.7
|
|
224
|
+
|
|
225
|
+
## 0.10.2-alpha.0
|
|
226
|
+
|
|
227
|
+
### Patch Changes
|
|
228
|
+
|
|
229
|
+
- 8e1b6e9: dependencies updates:
|
|
230
|
+
- Updated dependency [`zod@^3.25.67` ↗︎](https://www.npmjs.com/package/zod/v/3.25.67) (from `^3.24.3`, in `dependencies`)
|
|
231
|
+
- Updated dependencies [15e9d26]
|
|
232
|
+
- Updated dependencies [07d6d88]
|
|
233
|
+
- Updated dependencies [5d74aab]
|
|
234
|
+
- Updated dependencies [144eb0b]
|
|
235
|
+
- @mastra/core@0.10.7-alpha.2
|
|
236
|
+
|
|
237
|
+
## 0.10.1
|
|
238
|
+
|
|
239
|
+
### Patch Changes
|
|
240
|
+
|
|
241
|
+
- f4007f8: Add gladia-api speech to text provider
|
|
242
|
+
- Updated dependencies [63f6b7d]
|
|
243
|
+
- Updated dependencies [12a95fc]
|
|
244
|
+
- Updated dependencies [4b0f8a6]
|
|
245
|
+
- Updated dependencies [51264a5]
|
|
246
|
+
- Updated dependencies [8e6f677]
|
|
247
|
+
- Updated dependencies [d70c420]
|
|
248
|
+
- Updated dependencies [ee9af57]
|
|
249
|
+
- Updated dependencies [36f1c36]
|
|
250
|
+
- Updated dependencies [2a16996]
|
|
251
|
+
- Updated dependencies [10d352e]
|
|
252
|
+
- Updated dependencies [9589624]
|
|
253
|
+
- Updated dependencies [53d3c37]
|
|
254
|
+
- Updated dependencies [751c894]
|
|
255
|
+
- Updated dependencies [577ce3a]
|
|
256
|
+
- Updated dependencies [9260b3a]
|
|
257
|
+
- @mastra/core@0.10.6
|
|
258
|
+
|
|
259
|
+
## 0.10.1-alpha.0
|
|
260
|
+
|
|
261
|
+
### Patch Changes
|
|
262
|
+
|
|
263
|
+
- f4007f8: Add gladia-api speech to text provider
|
|
264
|
+
- Updated dependencies [4b0f8a6]
|
|
265
|
+
- @mastra/core@0.10.6-alpha.2
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Apache License 2.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Kepler Software, Inc.
|
|
4
|
+
|
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
you may not use this file except in compliance with the License.
|
|
7
|
+
You may obtain a copy of the License at
|
|
8
|
+
|
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
|
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
See the License for the specific language governing permissions and
|
|
15
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# @mastra/voice-gladia
|
|
2
|
+
|
|
3
|
+
Gladia AI Voice integration for Mastra, providing Speech-to-text (STT) capabilities using Gladia's voice technology.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @mastra/voice-gladia
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
The module requires the following environment variable:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
GLADIA_API_KEY=your_api_key
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { GladiaVoice } from '@mastra/voice-gladia';
|
|
23
|
+
import { createReadStream } from 'fs';
|
|
24
|
+
import path from 'path';
|
|
25
|
+
|
|
26
|
+
const voice = new GladiaVoice({
|
|
27
|
+
listeningModel: {
|
|
28
|
+
apiKey: process.env.GLADIA_API_KEY!,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Create an agent with voice capabilities
|
|
33
|
+
// Note: Gladia only supports STT, so the agent will only be able to listen.
|
|
34
|
+
export const agent = new Agent({
|
|
35
|
+
name: 'Agent',
|
|
36
|
+
instructions: `You are a helpful assistant with STT capabilities.`,
|
|
37
|
+
model: google('gemini-1.5-pro-latest'),
|
|
38
|
+
voice: voice,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Example usage with a local audio file
|
|
42
|
+
const audioStream = createReadStream(path.join(process.cwd(), 'audio.m4a'));
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const text = await voice.listen(audioStream, {
|
|
46
|
+
fileName: 'audio.m4a',
|
|
47
|
+
mimeType: 'audio/mp4',
|
|
48
|
+
});
|
|
49
|
+
console.log('Transcription:', text);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error('Error transcribing audio:', error);
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Features
|
|
56
|
+
|
|
57
|
+
- High-quality Speech-to-Text recognition
|
|
58
|
+
- Support for various audio formats
|
|
59
|
+
- Advanced diarization and translation options
|
|
60
|
+
- Easy integration with Mastra agents
|
|
61
|
+
|
|
62
|
+
## Limitations
|
|
63
|
+
|
|
64
|
+
- Only supports Speech-to-Text (STT) functionality. Text-to-Speech (TTS) is not supported.
|
|
65
|
+
|
|
66
|
+
## Available Voices
|
|
67
|
+
|
|
68
|
+
Gladia does not expose a list of available "voices" in the traditional sense. The service focuses on providing high-quality transcription across various languages and audio characteristics.
|
|
69
|
+
|
|
70
|
+
### Languages
|
|
71
|
+
|
|
72
|
+
Gladia supports a wide range of languages. For a complete list, please refer to the [Gladia documentation](https://docs.gladia.io/).
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var voice = require('@mastra/core/voice');
|
|
4
|
+
|
|
5
|
+
// src/index.ts
|
|
6
|
+
var GladiaVoice = class extends voice.MastraVoice {
|
|
7
|
+
apiKey;
|
|
8
|
+
baseUrl = "https://api.gladia.io/v2";
|
|
9
|
+
constructor({ listeningModel } = {}) {
|
|
10
|
+
const defaultApiKey = process.env.GLADIA_API_KEY;
|
|
11
|
+
super({
|
|
12
|
+
listeningModel: {
|
|
13
|
+
name: "gladia",
|
|
14
|
+
apiKey: listeningModel?.apiKey ?? defaultApiKey
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
this.apiKey = this.listeningModel?.apiKey;
|
|
18
|
+
if (!this.apiKey) throw new Error("GLADIA_API_KEY is not set.");
|
|
19
|
+
}
|
|
20
|
+
async speak(_input, _options) {
|
|
21
|
+
throw new Error("Gladia does not support text-to-speech.");
|
|
22
|
+
}
|
|
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",
|
|
54
|
+
headers: {
|
|
55
|
+
"x-gladia-key": this.apiKey,
|
|
56
|
+
"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
|
+
}
|
|
81
|
+
await new Promise((res) => setTimeout(res, 1e3));
|
|
82
|
+
}
|
|
83
|
+
}, "voice.gladia.listen")();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
exports.GladiaVoice = GladiaVoice;
|
|
88
|
+
//# sourceMappingURL=index.cjs.map
|
|
89
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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 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"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Readable } from 'stream';
|
|
2
|
+
import { MastraVoice } from '@mastra/core/voice';
|
|
3
|
+
interface GladiaConfig {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
}
|
|
6
|
+
interface GladiaListenOptions {
|
|
7
|
+
diarization?: boolean;
|
|
8
|
+
diarization_config?: {
|
|
9
|
+
number_of_speakers?: number;
|
|
10
|
+
min_speakers?: number;
|
|
11
|
+
max_speakers?: number;
|
|
12
|
+
};
|
|
13
|
+
translation?: boolean;
|
|
14
|
+
translation_config?: {
|
|
15
|
+
model?: 'base' | 'enhanced';
|
|
16
|
+
target_languages?: string[];
|
|
17
|
+
};
|
|
18
|
+
detect_language?: boolean;
|
|
19
|
+
enable_code_switching?: boolean;
|
|
20
|
+
}
|
|
21
|
+
interface GladiaListenCallParams {
|
|
22
|
+
mimeType: string;
|
|
23
|
+
fileName: string;
|
|
24
|
+
options?: GladiaListenOptions;
|
|
25
|
+
}
|
|
26
|
+
export declare class GladiaVoice extends MastraVoice {
|
|
27
|
+
private apiKey;
|
|
28
|
+
private baseUrl;
|
|
29
|
+
constructor({ listeningModel }?: {
|
|
30
|
+
listeningModel?: GladiaConfig;
|
|
31
|
+
});
|
|
32
|
+
speak(_input: string, _options?: Record<string, unknown>): Promise<any>;
|
|
33
|
+
listen(input: Readable, { mimeType, fileName, options }: GladiaListenCallParams): Promise<string>;
|
|
34
|
+
}
|
|
35
|
+
export type { GladiaConfig, GladiaListenOptions };
|
|
36
|
+
export type { GladiaListenCallParams };
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { MastraVoice } from '@mastra/core/voice';
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
var GladiaVoice = class extends MastraVoice {
|
|
5
|
+
apiKey;
|
|
6
|
+
baseUrl = "https://api.gladia.io/v2";
|
|
7
|
+
constructor({ listeningModel } = {}) {
|
|
8
|
+
const defaultApiKey = process.env.GLADIA_API_KEY;
|
|
9
|
+
super({
|
|
10
|
+
listeningModel: {
|
|
11
|
+
name: "gladia",
|
|
12
|
+
apiKey: listeningModel?.apiKey ?? defaultApiKey
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
this.apiKey = this.listeningModel?.apiKey;
|
|
16
|
+
if (!this.apiKey) throw new Error("GLADIA_API_KEY is not set.");
|
|
17
|
+
}
|
|
18
|
+
async speak(_input, _options) {
|
|
19
|
+
throw new Error("Gladia does not support text-to-speech.");
|
|
20
|
+
}
|
|
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",
|
|
52
|
+
headers: {
|
|
53
|
+
"x-gladia-key": this.apiKey,
|
|
54
|
+
"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
|
+
}
|
|
79
|
+
await new Promise((res) => setTimeout(res, 1e3));
|
|
80
|
+
}
|
|
81
|
+
}, "voice.gladia.listen")();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export { GladiaVoice };
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mastra/voice-gladia",
|
|
3
|
+
"version": "0.0.0-add-libsql-changeset-20250910154739",
|
|
4
|
+
"description": "Mastra Gladia AI voice integration",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"CHANGELOG.md"
|
|
9
|
+
],
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"require": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"default": "./dist/index.cjs"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"./package.json": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
"license": "Apache-2.0",
|
|
26
|
+
"dependencies": {},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@microsoft/api-extractor": "^7.52.5",
|
|
29
|
+
"@types/node": "^20.17.32",
|
|
30
|
+
"eslint": "^9.30.1",
|
|
31
|
+
"pnpm": "10.12.4",
|
|
32
|
+
"tsup": "^8.4.0",
|
|
33
|
+
"typescript": "^5.8.3",
|
|
34
|
+
"vitest": "^3.2.4",
|
|
35
|
+
"zod": "^3.25.76",
|
|
36
|
+
"@internal/types-builder": "0.0.0-add-libsql-changeset-20250910154739",
|
|
37
|
+
"@internal/lint": "0.0.0-add-libsql-changeset-20250910154739",
|
|
38
|
+
"@mastra/core": "0.0.0-add-libsql-changeset-20250910154739"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"mastra",
|
|
42
|
+
"gladia",
|
|
43
|
+
"stt",
|
|
44
|
+
"speech-to-text",
|
|
45
|
+
"speech-recognition"
|
|
46
|
+
],
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"zod": "^3.25.0 || ^4.0.0",
|
|
49
|
+
"@mastra/core": "0.0.0-add-libsql-changeset-20250910154739"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://mastra.ai",
|
|
52
|
+
"repository": {
|
|
53
|
+
"type": "git",
|
|
54
|
+
"url": "git+https://github.com/mastra-ai/mastra.git",
|
|
55
|
+
"directory": "voice/gladia"
|
|
56
|
+
},
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/mastra-ai/mastra/issues"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "tsup --silent --config tsup.config.ts",
|
|
62
|
+
"build:watch": "tsup --watch --silent --config tsup.config.ts",
|
|
63
|
+
"test": "vitest run",
|
|
64
|
+
"test:watch": "vitest watch",
|
|
65
|
+
"lint": "eslint ."
|
|
66
|
+
}
|
|
67
|
+
}
|