azure-ai-transcription-py
Azure AI Transcription SDK for Python. Use for real-time and batch speech-to-text transcription with timestamps and diarization. Triggers: "transcription", "speech to text", "Azure AI Transcription", "TranscriptionClient".
Install
npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-ai-transcription-py
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install microsoft-skills@llmmart
git clone https://github.com/microsoft/skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole microsoft/skills collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Azure AI Transcription SDK for Python
Client library for Azure AI Transcription (speech-to-text) with real-time and batch transcription.
Installation
pip install azure-ai-transcription
Environment Variables
TRANSCRIPTION_ENDPOINT=https://<resource>.cognitiveservices.azure.com
TRANSCRIPTION_KEY=<your-key> # For key auth; not needed when using DefaultAzureCredential/TokenCredential
Authentication & Lifecycle
🔑 Two rules apply to every code sample below:
- Two auth modes are supported:
AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"])for key-based auth, orDefaultAzureCredential()/ anyTokenCredentialfor Entra ID. PreferDefaultAzureCredentialin production; never hardcode credentials in code.- Wrap every client in a context manager so HTTP transports and sockets are released deterministically:
- Sync:
with <Client>(...) as client:- Async:
async with <Client>(...) as client:Snippets may abbreviate this setup, but production code should always follow both rules.
Use subscription key authentication:
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient
with TranscriptionClient(
endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
) as client:
transcriptions = list(client.list_transcriptions())
Transcription (Batch)
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient
with TranscriptionClient(
endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
) as client:
job = client.begin_transcription(
name="meeting-transcription",
locale="en-US",
content_urls=["https://<storage>/audio.wav"],
diarization_enabled=True,
)
result = job.result()
print(result.status)
Transcription (Real-time)
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient
with TranscriptionClient(
endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
) as client:
stream = client.begin_stream_transcription(locale="en-US")
stream.send_audio_file("audio.wav")
for event in stream:
print(event.text)
Best Practices
- Pick sync OR async and stay consistent. Do not mix
azure.xxxsync clients withazure.xxx.aioasync clients in the same call path. Choose one mode per module. - Always use context managers for clients and async credentials. Wrap every client in
with Client(...) as client:(sync) orasync with Client(...) as client:(async). For asyncDefaultAzureCredentialfromazure.identity.aio, also useasync with credential:so tokens and transports are cleaned up. - Enable diarization when multiple speakers are present
- Use batch transcription for long files stored in blob storage
- Capture timestamps for subtitle generation
- Specify language to improve recognition accuracy
- Handle streaming backpressure for real-time transcription
- Close transcription sessions when complete
Reference Files
| File | Contents |
|---|---|
| references/capabilities.md | Additional non-hero capabilities, operation-group coverage, and production checklists. |
| references/non-hero-scenarios.md | Dedicated non-hero examples for secondary/advanced scenarios. |
Files (skills)
-
references
-
capabilities.md 1.1 KB
# azure-ai-transcription-py capability coverage **SDK/package**: `azure-ai-transcription` This index maps hero scenarios in `SKILL.md` and links non-hero scenarios documented in dedicated reference files. ## Hero scenarios covered in SKILL.md - `Transcription (Batch)` - `Transcription (Real-time)` ## Non-hero scenarios - `Operational hardening`: Use this section for retries, timeouts, pagination, and cleanup patterns specific to this SDK. See: [`non-hero-scenarios.md#operational-hardening`](non-hero-scenarios.md#operational-hardening) ## Related deep-dive references - [`non-hero-scenarios.md`](non-hero-scenarios.md): Dedicated non-hero examples and implementation notes. ## API breadth checklist - Verify client/auth mode for the environment before coding. - Confirm operation-group/method names against current Microsoft Learn API reference. - For Python SDKs with both sync and async clients, document both forms without a blanket preference. - Include cleanup/delete paths for created resources in examples. - Prefer idempotent create/update operations where available. - Validate paging/LRO/error-handling patterns for production paths. -
non-hero-scenarios.md 3.6 KB
# azure-ai-transcription-py non-hero scenarios These scenarios are intentionally separate from hero flows in `SKILL.md`. They cover secondary/advanced patterns typically used after the primary end-to-end path is working. ## Operational hardening ### Retry Policy Configure retries for transient failures via `azure-core` retry policy: ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient from azure.core.pipeline.policies import RetryPolicy retry_policy = RetryPolicy(retry_total=3, retry_backoff_factor=2) with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), retry_policy=retry_policy, ) as client: job = client.begin_transcription( name="meeting-transcription", locale="en-US", content_urls=["https://<storage>/audio.wav"], ) result = job.result() ``` ### LRO Poll with Timeout Avoid blocking indefinitely on long-running batch jobs: ```python import os import time from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: job = client.begin_transcription( name="long-audio", locale="en-US", content_urls=["https://<storage>/long-audio.wav"], ) # Poll with an explicit deadline; job.result() does not raise on timeout deadline = time.monotonic() + 300 while not job.done(): if time.monotonic() > deadline: raise TimeoutError("Transcription did not complete within 300 s") time.sleep(5) result = job.result() print(result.status) ``` ### List and Paginate Transcriptions `list_transcriptions()` returns a lazy iterator; paginate explicitly to avoid loading everything at once: ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: for index, transcription in enumerate(client.list_transcriptions()): print(f"[{index}] {transcription.name}: {transcription.status}") ``` ### Delete Completed Transcriptions Remove completed jobs to keep the account tidy: ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: for transcription in client.list_transcriptions(): if transcription.status == "Succeeded": client.delete_transcription(transcription.transcription_id) ``` ### Async Batch Transcription Use the async client for non-blocking workflows: ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription.aio import TranscriptionClient async def run_async_transcription(): async with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: job = await client.begin_transcription( name="async-meeting", locale="en-US", content_urls=["https://<storage>/audio.wav"], diarization_enabled=True, ) result = await job.result() print(result.status) ```
-
-
SKILL.md 4 KB
--- name: azure-ai-transcription-py description: | Azure AI Transcription SDK for Python. Use for real-time and batch speech-to-text transcription with timestamps and diarization. Triggers: "transcription", "speech to text", "Azure AI Transcription", "TranscriptionClient". license: MIT metadata: author: Microsoft version: "1.0.0" package: azure-ai-transcription --- # Azure AI Transcription SDK for Python Client library for Azure AI Transcription (speech-to-text) with real-time and batch transcription. ## Installation ```bash pip install azure-ai-transcription ``` ## Environment Variables ```bash TRANSCRIPTION_ENDPOINT=https://<resource>.cognitiveservices.azure.com TRANSCRIPTION_KEY=<your-key> # For key auth; not needed when using DefaultAzureCredential/TokenCredential ``` ## Authentication & Lifecycle > **🔑 Two rules apply to every code sample below:** > > 1. **Two auth modes are supported:** `AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"])` for key-based auth, or `DefaultAzureCredential()` / any `TokenCredential` for Entra ID. Prefer `DefaultAzureCredential` in production; never hardcode credentials in code. > 2. **Wrap every client in a context manager** so HTTP transports and sockets are released deterministically: > - Sync: `with <Client>(...) as client:` > - Async: `async with <Client>(...) as client:` > > Snippets may abbreviate this setup, but production code should always follow both rules. Use subscription key authentication: ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: transcriptions = list(client.list_transcriptions()) ``` ## Transcription (Batch) ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: job = client.begin_transcription( name="meeting-transcription", locale="en-US", content_urls=["https://<storage>/audio.wav"], diarization_enabled=True, ) result = job.result() print(result.status) ``` ## Transcription (Real-time) ```python import os from azure.core.credentials import AzureKeyCredential from azure.ai.transcription import TranscriptionClient with TranscriptionClient( endpoint=os.environ["TRANSCRIPTION_ENDPOINT"], credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]), ) as client: stream = client.begin_stream_transcription(locale="en-US") stream.send_audio_file("audio.wav") for event in stream: print(event.text) ``` ## Best Practices 1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module. 2. **Always use context managers for clients and async credentials.** Wrap every client in `with Client(...) as client:` (sync) or `async with Client(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up. 3. **Enable diarization** when multiple speakers are present 4. **Use batch transcription** for long files stored in blob storage 5. **Capture timestamps** for subtitle generation 6. **Specify language** to improve recognition accuracy 7. **Handle streaming backpressure** for real-time transcription 8. **Close transcription sessions** when complete ## Reference Files | File | Contents | |------|----------| | [references/capabilities.md](references/capabilities.md) | Additional non-hero capabilities, operation-group coverage, and production checklists. | | [references/non-hero-scenarios.md](references/non-hero-scenarios.md) | Dedicated non-hero examples for secondary/advanced scenarios. |
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.