Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,18 @@ public sealed partial class BillingEntitlements
[global::System.Text.Json.Serialization.JsonRequired]
public required int TextAgentMonthlyMessageCap { get; set; }

/// <summary>
/// Whether the workspace may build voice agents. Voice agents are sold<br/>
/// on an enterprise plan rather than self-serve, so no tier grants this<br/>
/// and it is enabled per workspace. When false, WRITES to the<br/>
/// voice-agent surface return 402 voice_agents_not_in_plan; reads are<br/>
/// unaffected, so a workspace never loses sight of what it already<br/>
/// built.
/// </summary>
[global::System.Text.Json.Serialization.JsonPropertyName("voice_agent_access")]
[global::System.Text.Json.Serialization.JsonRequired]
public required bool VoiceAgentAccess { get; set; }

/// <summary>
/// Whether the workspace may start and read durable async agent runs,<br/>
/// including the approvals they raise and team runs. When false, those<br/>
Expand Down Expand Up @@ -376,6 +388,14 @@ public sealed partial class BillingEntitlements
/// (UTC); 0 means uncapped. Past it a turn returns 402<br/>
/// text_message_quota_exceeded until the month rolls over.
/// </param>
/// <param name="voiceAgentAccess">
/// Whether the workspace may build voice agents. Voice agents are sold<br/>
/// on an enterprise plan rather than self-serve, so no tier grants this<br/>
/// and it is enabled per workspace. When false, WRITES to the<br/>
/// voice-agent surface return 402 voice_agents_not_in_plan; reads are<br/>
/// unaffected, so a workspace never loses sight of what it already<br/>
/// built.
/// </param>
/// <param name="durableRunsAccess">
/// Whether the workspace may start and read durable async agent runs,<br/>
/// including the approvals they raise and team runs. When false, those<br/>
Expand Down Expand Up @@ -469,6 +489,7 @@ public BillingEntitlements(
bool textAgentAccess,
int textAgentMaxConcurrentConversations,
int textAgentMonthlyMessageCap,
bool voiceAgentAccess,
bool durableRunsAccess,
int maxRunTurns,
bool slackChannelAccess,
Expand Down Expand Up @@ -505,6 +526,7 @@ public BillingEntitlements(
this.TextAgentAccess = textAgentAccess;
this.TextAgentMaxConcurrentConversations = textAgentMaxConcurrentConversations;
this.TextAgentMonthlyMessageCap = textAgentMonthlyMessageCap;
this.VoiceAgentAccess = voiceAgentAccess;
this.DurableRunsAccess = durableRunsAccess;
this.MaxRunTurns = maxRunTurns;
this.SlackChannelAccess = slackChannelAccess;
Expand Down
6 changes: 6 additions & 0 deletions src/libs/Speechify/Generated/Speechify.Models.ErrorCode.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,10 @@ public enum ErrorCode
/// <summary>
///
/// </summary>
VoiceAgentsNotInPlan,
/// <summary>
///
/// </summary>
VoiceCloningNotIncluded,
/// <summary>
///
Expand Down Expand Up @@ -773,6 +777,7 @@ public static string ToValueString(this ErrorCode value)
ErrorCode.UpstreamFailure => "upstream_failure",
ErrorCode.ValidationFailed => "validation_failed",
ErrorCode.VerificationRequired => "verification_required",
ErrorCode.VoiceAgentsNotInPlan => "voice_agents_not_in_plan",
ErrorCode.VoiceCloningNotIncluded => "voice_cloning_not_included",
ErrorCode.VoiceNotFound => "voice_not_found",
ErrorCode.WatermarkAudioUnusable => "watermark_audio_unusable",
Expand Down Expand Up @@ -934,6 +939,7 @@ public static string ToValueString(this ErrorCode value)
"upstream_failure" => ErrorCode.UpstreamFailure,
"validation_failed" => ErrorCode.ValidationFailed,
"verification_required" => ErrorCode.VerificationRequired,
"voice_agents_not_in_plan" => ErrorCode.VoiceAgentsNotInPlan,
"voice_cloning_not_included" => ErrorCode.VoiceCloningNotIncluded,
"voice_not_found" => ErrorCode.VoiceNotFound,
"watermark_audio_unusable" => ErrorCode.WatermarkAudioUnusable,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,15 @@
namespace Speechify
{
/// <summary>
/// How the agent keeps a live call sane while a slow tool runs.<br/>
/// Present means the tool is declared slow; absent keeps the tool's<br/>
/// previous behaviour exactly.<br/>
/// What a caller hears while a slow tool runs on a voice call, plus<br/>
/// a guard against calling the tool twice. Present means the tool is<br/>
/// declared slow; absent keeps the tool's previous behaviour exactly.<br/>
/// This is a voice-call control. On the text channel only<br/>
/// `on_duplicate` applies, since a turn has no dead air to fill. A<br/>
/// durable run ignores the whole block: it runs one tool per step,<br/>
/// so there is no in-flight call to duplicate and nobody listening<br/>
/// for a holding phrase. Nothing here changes how long the tool may<br/>
/// run; that is the tool's own timeout.<br/>
/// The tool still blocks the turn either way: the agent never<br/>
/// receives a synthetic result while your endpoint is still working,<br/>
/// so it can only ever speak about a result it actually got.
Expand Down
28 changes: 20 additions & 8 deletions src/libs/Speechify/Generated/Speechify.Models.MCPToolConfig.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,16 @@ public sealed partial class MCPToolConfig
public required global::Speechify.MCPAuth Auth { get; set; }

/// <summary>
/// Declares the SERVER slow. Applies to every remote tool the<br/>
/// `list_tools` handshake discovers on it — MCP publishes no<br/>
/// per-tool latency signal at config time, so this describes the<br/>
/// server rather than one of its verbs.
/// What a caller hears on a voice call while one of this<br/>
/// server's tools runs, and whether a second call to the same<br/>
/// tool is refused while the first is in flight. It never<br/>
/// changes how long a call may run: a slow server does not get<br/>
/// a longer wait by declaring itself slow. On the text channel<br/>
/// only `on_duplicate` applies; a durable run ignores the block.<br/>
/// Applies to every remote tool the `list_tools` handshake<br/>
/// discovers on the server — MCP publishes no per-tool latency<br/>
/// signal at config time, so this describes the server rather<br/>
/// than one of its verbs.
/// </summary>
[global::System.Text.Json.Serialization.JsonPropertyName("long_running")]
public global::Speechify.LongRunningToolConfig? LongRunning { get; set; }
Expand Down Expand Up @@ -105,10 +111,16 @@ public sealed partial class MCPToolConfig
/// legacy fallback for servers that haven't migrated yet.
/// </param>
/// <param name="longRunning">
/// Declares the SERVER slow. Applies to every remote tool the<br/>
/// `list_tools` handshake discovers on it — MCP publishes no<br/>
/// per-tool latency signal at config time, so this describes the<br/>
/// server rather than one of its verbs.
/// What a caller hears on a voice call while one of this<br/>
/// server's tools runs, and whether a second call to the same<br/>
/// tool is refused while the first is in flight. It never<br/>
/// changes how long a call may run: a slow server does not get<br/>
/// a longer wait by declaring itself slow. On the text channel<br/>
/// only `on_duplicate` applies; a durable run ignores the block.<br/>
/// Applies to every remote tool the `list_tools` handshake<br/>
/// discovers on the server — MCP publishes no per-tool latency<br/>
/// signal at config time, so this describes the server rather<br/>
/// than one of its verbs.
/// </param>
/// <param name="actionClasses">
/// What each of the server's own tools does, keyed by the remote tool<br/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ public sealed partial class WebhookToolConfig
public bool? FireAndForget { get; set; }

/// <summary>
/// Declares the endpoint slow, so the agent speaks a filler<br/>
/// phrase instead of leaving the caller in silence and refuses<br/>
/// a duplicate call while one is in flight.<br/>
/// What a caller hears on a voice call while this endpoint<br/>
/// runs, and whether a second call is refused while the first<br/>
/// is in flight. It never changes how long the request may run:<br/>
/// that is `timeout_ms`. On the text channel only `on_duplicate`<br/>
/// applies, since a turn has no dead air to fill; a durable run<br/>
/// ignores the block.<br/>
/// Cannot be combined with `fire_and_forget`. That path returns<br/>
/// to the agent before your endpoint answers, so there is no<br/>
/// wait to fill; saving both is refused rather than storing a<br/>
Expand Down Expand Up @@ -118,9 +121,12 @@ public sealed partial class WebhookToolConfig
/// the conversation. Defaults to false.
/// </param>
/// <param name="longRunning">
/// Declares the endpoint slow, so the agent speaks a filler<br/>
/// phrase instead of leaving the caller in silence and refuses<br/>
/// a duplicate call while one is in flight.<br/>
/// What a caller hears on a voice call while this endpoint<br/>
/// runs, and whether a second call is refused while the first<br/>
/// is in flight. It never changes how long the request may run:<br/>
/// that is `timeout_ms`. On the text channel only `on_duplicate`<br/>
/// applies, since a turn has no dead air to fill; a durable run<br/>
/// ignores the block.<br/>
/// Cannot be combined with `fire_and_forget`. That path returns<br/>
/// to the agent before your endpoint answers, so there is no<br/>
/// wait to fill; saving both is refused rather than storing a<br/>
Expand Down
2 changes: 1 addition & 1 deletion src/libs/Speechify/openapi.yaml

Large diffs are not rendered by default.