# VoiceLiveOptions

> Tracon documentation. Tracon is a .NET package family that adds a control
> plane on Microsoft Agent Framework, published as NuGet packages that run
> inside your own ASP.NET Core application.
>
> Page: https://tracon.dev/api/tracon.voiceliveoptions/
> Summary: VoiceLiveOptions: Options of the provider-hosted live voice layer.

<div class="api-provenance">Namespace Tracon · Assembly <code>Tracon.Core.dll</code></div>

Options of the provider-hosted live voice layer.

```csharp
public sealed class VoiceLiveOptions
```

<dl class="api-relations"><dt>Inheritance</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object">object</a> ← <a href="/api/tracon.voiceliveoptions/">VoiceLiveOptions</a></dd><dt>Inherited Members</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object?, object?)</a>, <a href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a></dd></dl>

## Remarks

This is **not** [VoiceConversationOptions](/api/tracon.voiceconversationoptions/). That
type configures the conversation Tracon runs itself: utterance buffering,
audio format, per-turn speech budget. None of that applies here, because the
media never reaches Tracon. The two layers are independent and can be
enabled together or separately.

The type is **not** a `record`: option classes must not
produce a `ToString` that can be written to a log.

## Constructors

### <a id="Tracon_VoiceLiveOptions__ctor"></a> VoiceLiveOptions\(\)

```csharp
public VoiceLiveOptions()
```

## Fields

### <a id="Tracon_VoiceLiveOptions_SectionName"></a> SectionName

The default name of the configuration section.

```csharp
public const string SectionName = "Tracon:Voice:Live"
```

#### Field Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)

## Properties

### <a id="Tracon_VoiceLiveOptions_DelegationMode"></a> DelegationMode

Gets or sets how the live model hands work back. The default is `Client`.

```csharp
public LiveVoiceDelegationMode DelegationMode { get; set; }
```

#### Property Value

 [LiveVoiceDelegationMode](/api/tracon.livevoicedelegationmode/)

### <a id="Tracon_VoiceLiveOptions_DelegationTimeout"></a> DelegationTimeout

Gets or sets how long one delegation may run. The default is 2 minutes.

```csharp
public TimeSpan DelegationTimeout { get; set; }
```

#### Property Value

 [TimeSpan](https://learn.microsoft.com/dotnet/api/system.timespan)

#### Remarks

Must be from one millisecond to about 49.7 days; any other value fails at startup.

### <a id="Tracon_VoiceLiveOptions_Instructions"></a> Instructions

Gets or sets the system instructions given to the live model.

```csharp
public string? Instructions { get; set; }
```

#### Property Value

 [string](https://learn.microsoft.com/dotnet/api/system.string)?

### <a id="Tracon_VoiceLiveOptions_MaxAppendsPerDelegation"></a> MaxAppendsPerDelegation

Gets or sets how many appends one delegation may send. The default is 12.

```csharp
public int MaxAppendsPerDelegation { get; set; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

### <a id="Tracon_VoiceLiveOptions_MaxConcurrentDelegations"></a> MaxConcurrentDelegations

Gets or sets how many delegations may run at once in one session. The default is 2.

```csharp
public int MaxConcurrentDelegations { get; set; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

#### Remarks

The ceiling exists because the *provider* decides when to delegate.
Without it, a model that delegates in a loop decides how many agent runs
Tracon starts — a denial-of-service axis that points into the consumer's
own model spend.

### <a id="Tracon_VoiceLiveOptions_MaxConcurrentSessionsPerTenant"></a> MaxConcurrentSessionsPerTenant

Gets or sets how many live sessions one tenant may hold open at once. The
default is 3.

```csharp
public int MaxConcurrentSessionsPerTenant { get; set; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

#### Remarks

The limit is checked **before** the provider is called. A
session that is created and then refused is still a billed session.

### <a id="Tracon_VoiceLiveOptions_MaxLedgerEntriesPerDelegation"></a> MaxLedgerEntriesPerDelegation

Gets or sets how many transcript entries one delegation's prompt may carry.
The default is 40.

```csharp
public int MaxLedgerEntriesPerDelegation { get; set; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

### <a id="Tracon_VoiceLiveOptions_MaxSessionDuration"></a> MaxSessionDuration

Gets or sets how long a live session may stay open. The default is 30 minutes.

```csharp
public TimeSpan MaxSessionDuration { get; set; }
```

#### Property Value

 [TimeSpan](https://learn.microsoft.com/dotnet/api/system.timespan)

### <a id="Tracon_VoiceLiveOptions_MaxTranscriptLedgerCharacters"></a> MaxTranscriptLedgerCharacters

Gets or sets how many characters of transcript the ledger keeps. The default
is 20000.

```csharp
public int MaxTranscriptLedgerCharacters { get; set; }
```

#### Property Value

 [int](https://learn.microsoft.com/dotnet/api/system.int32)

#### Remarks

The ledger is what a delegation is cut from. It is bounded so a long
conversation cannot grow without limit; the oldest entries are dropped first.

### <a id="Tracon_VoiceLiveOptions_PendingSessionTimeout"></a> PendingSessionTimeout

Gets or sets how long a created session may wait for its media peer. The
default is 2 minutes.

```csharp
public TimeSpan PendingSessionTimeout { get; set; }
```

#### Property Value

 [TimeSpan](https://learn.microsoft.com/dotnet/api/system.timespan)

#### Remarks

A session that is created and never connected still occupies a tenant's
concurrency slot. When this elapses the record is closed with
[VoiceSessionEndReason.Abandoned](/api/tracon.voicesessionendreason/).

### <a id="Tracon_VoiceLiveOptions_PersistTranscript"></a> PersistTranscript

Gets or sets whether the conversation's transcript is written to the agent
session's history. The default is [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool).

```csharp
public bool PersistTranscript { get; set; }
```

#### Property Value

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

#### Remarks

A privacy switch. The user's *audio* is never stored, but the
*text* of what they said is durable while this is on, and the delegated
runs then see the full conversation. Turning it off keeps the ledger in memory
only; delegation still works, with the same context, for the session's lifetime.
Either way the value is reported to the client when the session is created, so
no recording happens silently.
