diff --git a/src/libs/ResembleAI/Generated/ResembleAI.ITextToSpeechClient.StreamSynthesize.g.cs b/src/libs/ResembleAI/Generated/ResembleAI.ITextToSpeechClient.StreamSynthesize.g.cs
index 6d435bf..6d312ee 100644
--- a/src/libs/ResembleAI/Generated/ResembleAI.ITextToSpeechClient.StreamSynthesize.g.cs
+++ b/src/libs/ResembleAI/Generated/ResembleAI.ITextToSpeechClient.StreamSynthesize.g.cs
@@ -35,6 +35,20 @@ public partial interface ITextToSpeechClient
/// Stream audio as it's generated. Returns chunked WAV data for progressive playback. The model associated with the voice is selected automatically.
///
///
+ /// The response metadata and an unbuffered body stream. The caller must dispose Body to release the HTTP response.
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task> StreamSynthesizeAsStreamAsResponseAsync(
+
+ global::ResembleAI.StreamSynthesizeRequest request,
+ global::ResembleAI.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Streaming text-to-speech synthesis (HTTP)
+ /// Stream audio as it's generated. Returns chunked WAV data for progressive playback. The model associated with the voice is selected automatically.
+ ///
+ ///
/// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
/// The token to cancel the operation with
///
diff --git a/src/libs/ResembleAI/Generated/ResembleAI.ResponseStream.g.cs b/src/libs/ResembleAI/Generated/ResembleAI.ResponseStream.g.cs
index c1cad25..29b4627 100644
--- a/src/libs/ResembleAI/Generated/ResembleAI.ResponseStream.g.cs
+++ b/src/libs/ResembleAI/Generated/ResembleAI.ResponseStream.g.cs
@@ -7,7 +7,7 @@ internal sealed class ResponseStream : global::System.IO.Stream
{
private readonly global::System.Net.Http.HttpResponseMessage _response;
private readonly global::System.IO.Stream _stream;
- private bool _disposed;
+ private int _disposed;
public ResponseStream(
global::System.Net.Http.HttpResponseMessage response,
@@ -47,21 +47,51 @@ public override int WriteTimeout
global::System.Threading.CancellationToken cancellationToken) =>
_stream.FlushAsync(cancellationToken);
- public override int Read(byte[] buffer, int offset, int count) =>
- _stream.Read(buffer, offset, count);
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ try
+ {
+ return _stream.Read(buffer, offset, count);
+ }
+ catch
+ {
+ Dispose();
+ throw;
+ }
+ }
- public override global::System.Threading.Tasks.Task ReadAsync(
+ public override async global::System.Threading.Tasks.Task ReadAsync(
byte[] buffer,
int offset,
int count,
- global::System.Threading.CancellationToken cancellationToken) =>
- _stream.ReadAsync(buffer, offset, count, cancellationToken);
+ global::System.Threading.CancellationToken cancellationToken)
+ {
+ try
+ {
+ return await _stream.ReadAsync(buffer, offset, count, cancellationToken).ConfigureAwait(false);
+ }
+ catch
+ {
+ Dispose();
+ throw;
+ }
+ }
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER || NET5_0_OR_GREATER
- public override global::System.Threading.Tasks.ValueTask ReadAsync(
+ public override async global::System.Threading.Tasks.ValueTask ReadAsync(
global::System.Memory buffer,
- global::System.Threading.CancellationToken cancellationToken = default) =>
- _stream.ReadAsync(buffer, cancellationToken);
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ try
+ {
+ return await _stream.ReadAsync(buffer, cancellationToken).ConfigureAwait(false);
+ }
+ catch
+ {
+ Dispose();
+ throw;
+ }
+ }
#endif
public override long Seek(long offset, global::System.IO.SeekOrigin origin) =>
@@ -89,10 +119,9 @@ public override void Write(byte[] buffer, int offset, int count) =>
protected override void Dispose(bool disposing)
{
- if (!_disposed && disposing)
+ if (disposing && global::System.Threading.Interlocked.Exchange(ref _disposed, 1) == 0)
{
- _disposed = true;
- _stream.Dispose();
+ // The response content owns the underlying stream; disposing both would close it twice.
_response.Dispose();
}
@@ -100,17 +129,10 @@ protected override void Dispose(bool disposing)
}
#if NETSTANDARD2_1_OR_GREATER || NETCOREAPP3_0_OR_GREATER || NET5_0_OR_GREATER
- public override async global::System.Threading.Tasks.ValueTask DisposeAsync()
+ public override global::System.Threading.Tasks.ValueTask DisposeAsync()
{
- if (_disposed)
- {
- return;
- }
-
- _disposed = true;
- await _stream.DisposeAsync().ConfigureAwait(false);
- _response.Dispose();
- await base.DisposeAsync().ConfigureAwait(false);
+ Dispose();
+ return default;
}
#endif
}
diff --git a/src/libs/ResembleAI/Generated/ResembleAI.TextToSpeechClient.StreamSynthesize.g.cs b/src/libs/ResembleAI/Generated/ResembleAI.TextToSpeechClient.StreamSynthesize.g.cs
index b640bb0..f932b5f 100644
--- a/src/libs/ResembleAI/Generated/ResembleAI.TextToSpeechClient.StreamSynthesize.g.cs
+++ b/src/libs/ResembleAI/Generated/ResembleAI.TextToSpeechClient.StreamSynthesize.g.cs
@@ -397,6 +397,382 @@ partial void ProcessStreamSynthesizeResponseContent(
return new global::ResembleAI.ResponseStream(__response, __content);
}
+ catch (global::System.OperationCanceledException)
+ {
+ throw;
+ }
+ catch (global::System.Exception __ex)
+ {
+ string? __content = null;
+ try
+ {
+ __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+ }
+ catch (global::System.Exception)
+ {
+ }
+
+ throw global::ResembleAI.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+
+ }
+ catch
+ {
+ __response.Dispose();
+ throw;
+ }
+ }
+ finally
+ {
+ __httpRequest?.Dispose();
+ }
+ }
+ ///
+ /// Streaming text-to-speech synthesis (HTTP)
+ /// Stream audio as it's generated. Returns chunked WAV data for progressive playback. The model associated with the voice is selected automatically.
+ ///
+ ///
+ /// The response metadata and an unbuffered body stream. The caller must dispose Body to release the HTTP response.
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task> StreamSynthesizeAsStreamAsResponseAsync(
+
+ global::ResembleAI.StreamSynthesizeRequest request,
+ global::ResembleAI.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ request = request ?? throw new global::System.ArgumentNullException(nameof(request));
+
+ PrepareArguments(
+ client: HttpClient);
+ PrepareStreamSynthesizeArguments(
+ httpClient: HttpClient,
+ request: request);
+
+
+ var __authorizations = global::ResembleAI.EndPointSecurityResolver.ResolveAuthorizations(
+ availableAuthorizations: Authorizations,
+ securityRequirements: s_StreamSynthesizeSecurityRequirements,
+ operationName: "StreamSynthesizeAsync");
+
+ using var __timeoutCancellationTokenSource = global::ResembleAI.AutoSDKRequestOptionsSupport.CreateTimeoutCancellationTokenSource(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken);
+ var __effectiveCancellationToken = __timeoutCancellationTokenSource?.Token ?? cancellationToken;
+ var __effectiveReadResponseAsString = global::ResembleAI.AutoSDKRequestOptionsSupport.GetReadResponseAsString(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ fallbackValue: ReadResponseAsString);
+ var __maxAttempts = global::ResembleAI.AutoSDKRequestOptionsSupport.GetMaxAttempts(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ supportsRetry: true);
+
+ global::System.Net.Http.HttpRequestMessage __CreateHttpRequest()
+ {
+
+ var __pathBuilder = new global::ResembleAI.PathBuilder(
+ path: "/stream",
+ baseUri: ResolveBaseUri(
+ servers: s_StreamSynthesizeServers,
+ defaultBaseUrl: "https://f.cluster.resemble.ai/"));
+ var __path = __pathBuilder.ToString();
+ __path = global::ResembleAI.AutoSDKRequestOptionsSupport.AppendQueryParameters(
+ path: __path,
+ clientParameters: Options.QueryParameters,
+ requestParameters: requestOptions?.QueryParameters);
+ var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
+ method: global::System.Net.Http.HttpMethod.Post,
+ requestUri: new global::System.Uri(__path, global::System.UriKind.RelativeOrAbsolute));
+#if NET6_0_OR_GREATER
+ __httpRequest.Version = global::System.Net.HttpVersion.Version11;
+ __httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
+#endif
+
+ foreach (var __authorization in __authorizations)
+ {
+ if (__authorization.Type == "Http" ||
+ __authorization.Type == "OAuth2" ||
+ __authorization.Type == "OpenIdConnect")
+ {
+ __httpRequest.Headers.Authorization = new global::System.Net.Http.Headers.AuthenticationHeaderValue(
+ scheme: __authorization.Name,
+ parameter: __authorization.Value);
+ }
+ else if (__authorization.Type == "ApiKey" &&
+ __authorization.Location == "Header")
+ {
+ __httpRequest.Headers.Add(__authorization.Name, __authorization.Value);
+ }
+ }
+ var __httpRequestContentBody = request.ToJson(JsonSerializerContext);
+ var __httpRequestContent = new global::System.Net.Http.StringContent(
+ content: __httpRequestContentBody,
+ encoding: global::System.Text.Encoding.UTF8,
+ mediaType: "application/json");
+ __httpRequest.Content = __httpRequestContent;
+ global::ResembleAI.AutoSDKRequestOptionsSupport.ApplyHeaders(
+ request: __httpRequest,
+ clientHeaders: Options.Headers,
+ requestHeaders: requestOptions?.Headers);
+
+ PrepareRequest(
+ client: HttpClient,
+ request: __httpRequest);
+ PrepareStreamSynthesizeRequest(
+ httpClient: HttpClient,
+ httpRequestMessage: __httpRequest,
+ request: request);
+
+ return __httpRequest;
+ }
+
+ global::System.Net.Http.HttpRequestMessage? __httpRequest = null;
+ global::System.Net.Http.HttpResponseMessage? __response = null;
+ var __attemptNumber = 0;
+ try
+ {
+ for (var __attempt = 1; __attempt <= __maxAttempts; __attempt++)
+ {
+ __attemptNumber = __attempt;
+ __httpRequest = __CreateHttpRequest();
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.OnBeforeRequestAsync(
+ clientOptions: Options,
+ context: global::ResembleAI.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "StreamSynthesize",
+ methodName: "StreamSynthesizeAsync",
+ pathTemplate: "\"/stream\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ try
+ {
+ __response = await HttpClient.SendAsync(
+ request: __httpRequest,
+ completionOption: global::System.Net.Http.HttpCompletionOption.ResponseHeadersRead,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ }
+ catch (global::System.Net.Http.HttpRequestException __exception)
+ {
+ var __retryDelay = global::ResembleAI.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: null,
+ attempt: __attempt);
+ var __willRetry = __attempt < __maxAttempts && !__effectiveCancellationToken.IsCancellationRequested;
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::ResembleAI.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "StreamSynthesize",
+ methodName: "StreamSynthesizeAsync",
+ pathTemplate: "\"/stream\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: __exception,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: __willRetry,
+ retryDelay: __willRetry ? __retryDelay : (global::System.TimeSpan?)null,
+ retryReason: "exception",
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ if (!__willRetry)
+ {
+ throw;
+ }
+
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ if (__response != null &&
+ __attempt < __maxAttempts &&
+ global::ResembleAI.AutoSDKRequestOptionsSupport.ShouldRetryStatusCode(__response.StatusCode))
+ {
+ var __retryDelay = global::ResembleAI.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: __response,
+ attempt: __attempt);
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::ResembleAI.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "StreamSynthesize",
+ methodName: "StreamSynthesizeAsync",
+ pathTemplate: "\"/stream\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: true,
+ retryDelay: __retryDelay,
+ retryReason: "status:" + ((int)__response.StatusCode).ToString(global::System.Globalization.CultureInfo.InvariantCulture),
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ __response.Dispose();
+ __response = null;
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ break;
+ }
+
+ if (__response == null)
+ {
+ throw new global::System.InvalidOperationException("No response received.");
+ }
+
+ try
+ {
+
+ ProcessResponse(
+ client: HttpClient,
+ response: __response);
+ ProcessStreamSynthesizeResponse(
+ httpClient: HttpClient,
+ httpResponseMessage: __response);
+ if (__response.IsSuccessStatusCode)
+ {
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.OnAfterSuccessAsync(
+ clientOptions: Options,
+ context: global::ResembleAI.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "StreamSynthesize",
+ methodName: "StreamSynthesizeAsync",
+ pathTemplate: "\"/stream\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ else
+ {
+ await global::ResembleAI.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::ResembleAI.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "StreamSynthesize",
+ methodName: "StreamSynthesizeAsync",
+ pathTemplate: "\"/stream\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ // Bad request
+ if ((int)__response.StatusCode == 400)
+ {
+ string? __content_400 = null;
+ global::System.Exception? __exception_400 = null;
+ global::ResembleAI.Error? __value_400 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_400 = global::ResembleAI.Error.FromJson(__content_400, JsonSerializerContext);
+ }
+ else
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_400 = global::ResembleAI.Error.FromJson(__content_400, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_400 = __ex;
+ }
+
+
+ throw global::ResembleAI.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_400 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_400,
+ responseBody: __content_400,
+ responseObject: __value_400,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+
+ var __content = await __response.Content.ReadAsStreamAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ return new global::ResembleAI.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::ResembleAI.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: new global::ResembleAI.ResponseStream(__response, __content));
+ }
+ catch (global::System.OperationCanceledException)
+ {
+ throw;
+ }
catch (global::System.Exception __ex)
{
string? __content = null;