Commit fb41835
committed
Add ISpeechToTextClient support via GrokSpeechToTextClient
Implements ISpeechToTextClient for xAI's Grok models, including:
- GrokSpeechToTextClient: unary transcription via POST /v1/stt and
streaming transcription via wss://.../v1/stt WebSocket protocol.
Handles session handshake, chunked audio upload, interim/final
transcript events, word-level timing, and language detection.
- GrokSpeechToTextOptions: Grok-specific options for audio format,
sample rate, multichannel, diarization, interim results, and
endpointing timeout.
- AsISpeechToTextClient() extension on GrokClient wires up the
client with the correct HTTP handler and WebSocket factory.
Fix: voice REST clients (TTS and STT) were accidentally reusing the
gRPC channel's BalancerHttpHandler, which throws for plain HTTP/1.1
requests. Added GrokClient.HttpHandler, backed by a separate
httpHandlers cache using the same Polly retry pipeline but independent
of the gRPC channel. AsITextToSpeechClient and AsISpeechToTextClient
now use client.HttpHandler instead of client.ChannelHandler.Handler.
The channels dictionary now holds ChannelBase directly rather than a
tuple, since the HttpMessageHandler is no longer needed from it.
Add TextToSpeech_SpeechToText integration test that streams TTS audio
to a temp file and transcribes it back with STT, asserting the
roundtrip text matches (punctuation-insensitive via NormalizeTranscription).
Update readme with ISpeechToTextClient usage examples alongside the
existing TTS documentation.1 parent 24ab0f6 commit fb41835
10 files changed
Lines changed: 1144 additions & 93 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
| 4 | + | |
4 | 5 | | |
| 6 | + | |
5 | 7 | | |
| 8 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
54 | 60 | | |
55 | 61 | | |
56 | 62 | | |
| |||
402 | 408 | | |
403 | 409 | | |
404 | 410 | | |
| 411 | + | |
| 412 | + | |
405 | 413 | | |
406 | 414 | | |
407 | 415 | | |
| |||
465 | 473 | | |
466 | 474 | | |
467 | 475 | | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
468 | 557 | | |
469 | 558 | | |
470 | 559 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | | - | |
4 | | - | |
5 | | - | |
6 | 2 | | |
7 | 3 | | |
8 | 4 | | |
9 | | - | |
10 | | - | |
| 5 | + | |
11 | 6 | | |
12 | 7 | | |
13 | 8 | | |
| |||
18 | 13 | | |
19 | 14 | | |
20 | 15 | | |
21 | | - | |
| 16 | + | |
22 | 17 | | |
23 | 18 | | |
24 | 19 | | |
| |||
33 | 28 | | |
34 | 29 | | |
35 | 30 | | |
36 | | - | |
| 31 | + | |
37 | 32 | | |
38 | 33 | | |
39 | 34 | | |
| |||
50 | 45 | | |
51 | 46 | | |
52 | 47 | | |
53 | | - | |
| 48 | + | |
54 | 49 | | |
55 | 50 | | |
56 | 51 | | |
| |||
161 | 156 | | |
162 | 157 | | |
163 | 158 | | |
164 | | - | |
| 159 | + | |
165 | 160 | | |
166 | 161 | | |
167 | 162 | | |
| |||
203 | 198 | | |
204 | 199 | | |
205 | 200 | | |
206 | | - | |
| 201 | + | |
207 | 202 | | |
208 | 203 | | |
209 | 204 | | |
| |||
249 | 244 | | |
250 | 245 | | |
251 | 246 | | |
252 | | - | |
| 247 | + | |
253 | 248 | | |
254 | 249 | | |
255 | 250 | | |
| |||
288 | 283 | | |
289 | 284 | | |
290 | 285 | | |
291 | | - | |
| 286 | + | |
292 | 287 | | |
293 | 288 | | |
294 | 289 | | |
| |||
299 | 294 | | |
300 | 295 | | |
301 | 296 | | |
302 | | - | |
| 297 | + | |
303 | 298 | | |
304 | 299 | | |
305 | 300 | | |
| |||
340 | 335 | | |
341 | 336 | | |
342 | 337 | | |
343 | | - | |
| 338 | + | |
344 | 339 | | |
345 | 340 | | |
346 | 341 | | |
| |||
406 | 401 | | |
407 | 402 | | |
408 | 403 | | |
409 | | - | |
| 404 | + | |
410 | 405 | | |
411 | 406 | | |
412 | 407 | | |
| |||
451 | 446 | | |
452 | 447 | | |
453 | 448 | | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
454 | 515 | | |
455 | 516 | | |
456 | 517 | | |
| |||
0 commit comments