# ModelCapabilityProfile

**Kind:** Interface

**Source:** [`atloria-monorepo/libs/agent-core/src/runtime/model-profiles.ts`](https://github.com/sherkety/atloria/blob/main/atloria-monorepo/libs/agent-core/src/runtime/model-profiles.ts#L15)

Model Capability Profiles

Describes what each model needs at the API level and prompt level.
This makes AgentSession and buildAdaptivePrompt model-agnostic:
instead of scattering `if (model.includes('gpt-5'))` checks, callers
declare what a model needs via a profile.

Resolution order (first wins):
  1. Explicit `modelProfile` on AzureModelProviderConfig (deployer knows their model)
  2. Name-based detection via getDefaultProfile(modelId) (well-known slugs)
  3. STANDARD_PROFILE (safe default — preserves current GPT-5.4 behavior)

## Properties

| Property | Type |
|---|---|
| `supportsReasoningEffort` | `boolean` |
| `supportsTemperature` | `boolean` |
| `supportsStrictTools` | `boolean` |
| `defaults` | `{
    /**
     * Reasoning effort applied when the agent has tools and the caller
     * hasn't explicitly set reasoningEffort.
     * GPT-5.4: 'medium' (defaults to 'none' otherwise, skipping tool calls).
     * Claude / GPT-4.x: undefined (field not sent).
     */
    reasoningEffort?: 'none' | 'low' | 'medium' | 'high';

    /**
     * toolChoice for the FIRST turn only.
     * After turn 1, the session resets to 'auto' to prevent loops.
     * GPT-5.4: 'required' (forces at least one tool call on turn 1).
     * Claude / GPT-4.x: undefined.
     *
     * IMPORTANT: Do NOT set 'required' when built-in tools (web_search,
     * code_interpreter) are in the tool list — the API rejects mixed types
     * with tool_choice: 'required'.
     */
    toolChoiceFirstTurn?: 'required' | 'auto';

    /**
     * Whether to request strict schema validation for tool calls.
     * GPT-5.4: true.
     */
    strictToolSchemas?: boolean;

    /**
     * Whether to run tool calls in parallel.
     * GPT-5.4: true (default behavior, but explicit is safer).
     */
    parallelToolCalls?: boolean;
  }` |
| `needsToolPersistence` | `boolean` |
| `needsApplyPatchFormat` | `boolean` |
| `needsPreambleGuidance` | `boolean` |
| `guidanceLevel` | `'minimal' | 'standard' | 'verbose'` |
