# ModelDescriptor

> 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.modeldescriptor/
> Summary: ModelDescriptor: A model's capabilities and limits.

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

A model's capabilities and limits.

```csharp
public sealed record ModelDescriptor : IEquatable<ModelDescriptor>
```

<dl class="api-relations"><dt>Inheritance</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.object">object</a> ← <a href="/api/tracon.modeldescriptor/">ModelDescriptor</a></dd><dt>Implements</dt><dd><a href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable&lt;ModelDescriptor&gt;</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>

## Constructors

### <a id="Tracon_ModelDescriptor__ctor"></a> ModelDescriptor\(\)

```csharp
public ModelDescriptor()
```

## Properties

### <a id="Tracon_ModelDescriptor_CachedInputCostPerMillionTokens"></a> CachedInputCostPerMillionTokens

The cost per million input tokens that were served from the provider's
prompt cache. For reporting only.

```csharp
public decimal? CachedInputCostPerMillionTokens { get; init; }
```

#### Property Value

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

When this is [null](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) the cached tokens are priced at
[ModelDescriptor.InputCostPerMillionTokens](/api/tracon.modeldescriptor/#Tracon_ModelDescriptor_InputCostPerMillionTokens), exactly as they were before the
rate existed — an undefined cache rate does not make the run's price
unknown. Set it to `0` only to state that cache reads are free.

### <a id="Tracon_ModelDescriptor_ContextWindowTokens"></a> ContextWindowTokens

The context window's token capacity.

```csharp
public int? ContextWindowTokens { get; init; }
```

#### Property Value

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

The name shown in the UI.

```csharp
public string? DisplayName { get; init; }
```

#### Property Value

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

The cost per million input tokens. For reporting only.

```csharp
public decimal? InputCostPerMillionTokens { get; init; }
```

#### Property Value

 [decimal](https://learn.microsoft.com/dotnet/api/system.decimal)?

### <a id="Tracon_ModelDescriptor_MaxOutputTokens"></a> MaxOutputTokens

The maximum number of tokens producible in a single response.

```csharp
public int? MaxOutputTokens { get; init; }
```

#### Property Value

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

The model name. `ModelBinding.Model` matches this value.

```csharp
public required string Name { get; init; }
```

#### Property Value

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

The cost per million output tokens. For reporting only.

```csharp
public decimal? OutputCostPerMillionTokens { get; init; }
```

#### Property Value

 [decimal](https://learn.microsoft.com/dotnet/api/system.decimal)?

### <a id="Tracon_ModelDescriptor_SupportsReasoning"></a> SupportsReasoning

Whether the reasoning-effort setting is supported.

```csharp
public bool SupportsReasoning { get; init; }
```

#### Property Value

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_ModelDescriptor_SupportsSampling"></a> SupportsSampling

Whether the model accepts the sampling parameters `temperature` and
`topP`; [null](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) when the catalog does not say.

```csharp
public bool? SupportsSampling { get; init; }
```

#### Property Value

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

The parameters are [ModelBinding.Temperature](/api/tracon.modelbinding/#Tracon_ModelBinding_Temperature) and
[ModelBinding.TopP](/api/tracon.modelbinding/#Tracon_ModelBinding_TopP). [null](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) (the default)
means unknown and checks nothing. When
the catalog states [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool), an agent definition that sets
either parameter does not compile, and the validation report names the
field: the provider would reject the request with `400` on the first
run. The check covers the binding's [ModelBinding.Fallbacks](/api/tracon.modelbinding/#Tracon_ModelBinding_Fallbacks)
links too, because they receive the same parameters.

The value comes from the catalog, never from a model-name list in code:
many current models reject sampling, and which ones changes with every
release.

### <a id="Tracon_ModelDescriptor_SupportsStreaming"></a> SupportsStreaming

Whether streaming responses are supported.

```csharp
public bool SupportsStreaming { get; init; }
```

#### Property Value

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_ModelDescriptor_SupportsStructuredOutput"></a> SupportsStructuredOutput

Whether output conforming to a JSON schema can be produced.

```csharp
public bool SupportsStructuredOutput { get; init; }
```

#### Property Value

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_ModelDescriptor_SupportsTools"></a> SupportsTools

Whether tool calling is supported.

```csharp
public bool SupportsTools { get; init; }
```

#### Property Value

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

### <a id="Tracon_ModelDescriptor_Equals_System_Object_"></a> Equals\(object?\)

```csharp
public override bool Equals(object? obj)
```

#### Parameters

`obj` [object](https://learn.microsoft.com/dotnet/api/system.object)?

#### Returns

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_ModelDescriptor_Equals_Tracon_ModelDescriptor_"></a> Equals\(ModelDescriptor?\)

```csharp
public bool Equals(ModelDescriptor? other)
```

#### Parameters

`other` [ModelDescriptor](/api/tracon.modeldescriptor/)?

#### Returns

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_ModelDescriptor_GetHashCode"></a> GetHashCode\(\)

```csharp
public override int GetHashCode()
```

#### Returns

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

```csharp
public override string ToString()
```

#### Returns

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

### <a id="Tracon_ModelDescriptor_op_Equality_Tracon_ModelDescriptor_Tracon_ModelDescriptor_"></a> operator ==\(ModelDescriptor?, ModelDescriptor?\)

```csharp
public static bool operator ==(ModelDescriptor? left, ModelDescriptor? right)
```

#### Parameters

`left` [ModelDescriptor](/api/tracon.modeldescriptor/)?

`right` [ModelDescriptor](/api/tracon.modeldescriptor/)?

#### Returns

 [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### <a id="Tracon_ModelDescriptor_op_Inequality_Tracon_ModelDescriptor_Tracon_ModelDescriptor_"></a> operator \!=\(ModelDescriptor?, ModelDescriptor?\)

```csharp
public static bool operator !=(ModelDescriptor? left, ModelDescriptor? right)
```

#### Parameters

`left` [ModelDescriptor](/api/tracon.modeldescriptor/)?

`right` [ModelDescriptor](/api/tracon.modeldescriptor/)?

#### Returns

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