Table of Contents

Error Handling

Every failure throws AudioCppException with the wire-reported message, error type and HTTP status.

using Mabs.AudioCpp;
using Mabs.AudioCpp.Http;

try
{
    SpeechResult result = await client.Speech.SynthesizeAsync(new SpeechRequest { Model = "nope", Input = "hi" });
}
catch (AudioCppException ex)
{
    Console.Error.WriteLine($"HTTP {ex.StatusCode} ({ex.ErrorType}): {ex.Message}");
}

Status codes (verified against v0.9.4)

Situation Status type
Unknown model id (speech, tasks routes) 500 server_error
Invalid request (live routes, option collisions) 400 invalid_request_error
models/load without --ui-management 403 forbidden
Unknown or not-installed package_id (models/load) 404 not_found
Busy model — server_busy
Memory pressure — insufficient_memory

Older docs say unknown model → 404 on speech; the live server supersedes that with 500.

SSE error events

Error events arrive as {"type":"error","error":{"message":…}} and end the stream with no [DONE]. SseReader throws AudioCppException mid-iteration on those; for SSE error events StatusCode and ErrorType are null:

try
{
    await foreach (TranscriptEvent evt in client.Transcriptions.TranscribeStreamAsync(request))
    {
        Console.Write(evt.Text);
    }
}
catch (AudioCppException ex)
{
    // ex.StatusCode == null for mid-stream SSE errors
    Console.Error.WriteLine($"stream error: {ex.Message}");
}

Non-JSON bodies

When the body is not an error envelope, Message carries the raw body text.

See the task pages for where each route lives: Speech Synthesis, Transcription, Alignment, Tasks, Recipes.