# AiBackendResponse class

Namespace: [Grasshopper2.Components.Descriptive](https://developer.rhino3d.com/api/gh2/namespace/grasshopper2.components.descriptive.md) · Assembly: [Grasshopper2](https://developer.rhino3d.com/api/gh2/assembly/grasshopper2.md)

```cs
public sealed class AiBackendResponse
```

What the backend returned for a single turn. Either text (the model declined to call a tool) or a structured tool call. Exactly one of [AiBackendResponse.Text](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/text.md) and [AiBackendResponse.ToolCall](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/toolcall.md) is populated.

## Properties

- [IgnoredParallelToolCalls](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/ignoredparalleltoolcalls.md): Count of additional parallel tool calls present in the same response that we silently dropped (we only process one tool call per turn). When this is large, the model is going haywire -- the host counts these against the docs-lookup budget so a runaway response aborts the conversation quickly instead of grinding through one call at a time.
- [ReasoningContent](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/reasoningcontent.md): Chain-of-thought produced by a reasoning-mode model, or null if the provider didn't return one. Must be echoed back to the API on the next turn for thinking-mode models (DeepSeek V4 thinking, OpenAI o-series), otherwise the request is rejected.
- [Text](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/text.md): The model's plain-text response, or null if it called a tool.
- [ToolCall](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/toolcall.md): The tool the model invoked, or null if it returned text.

## Methods

- [FromText](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/fromtext.md): (2 overloads, static)
- [FromToolCall](https://developer.rhino3d.com/api/gh2/type/grasshopper2.components.descriptive.aibackendresponse/fromtoolcall.md): (3 overloads, static)
