<!--
{
  "availability" : [
    "iOS: 26.0.0 -",
    "iPadOS: 26.0.0 -",
    "macCatalyst: 26.0.0 -",
    "macOS: 26.0.0 -",
    "visionOS: 26.0.0 -",
    "watchOS: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "FoundationModels",
  "identifier" : "/documentation/FoundationModels/LanguageModelSession",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Foundation Models"
    ],
    "preciseIdentifier" : "s:16FoundationModels20LanguageModelSessionC"
  },
  "title" : "LanguageModelSession"
}
-->

# LanguageModelSession

An object that represents a session that interacts with a language model.

```
final class LanguageModelSession
```

## Overview

A session is a single context that you use to generate content with, and maintains state between
requests. You can reuse the existing instance or create a new one each time you call the model. When
you create a session you can provide instructions that tell the model what its role is and
provide guidance on how to respond.

```swift
let session = LanguageModelSession(instructions: """
    You are a motivational workout coach that provides quotes to inspire \
    and motivate athletes.
    """
)
let prompt = "Generate a motivational quote for my next workout."
let response = try await session.respond(to: prompt)
```

The framework records each call to the model in a [`Transcript`](/documentation/FoundationModels/Transcript) that includes all prompts and
responses. If your session exceeds the available context size, it throws
[`LanguageModelError.contextSizeExceeded(_:)`](/documentation/FoundationModels/LanguageModelError/contextSizeExceeded(_:)). For more information on managing
the context window size, see [Managing the context window](/documentation/FoundationModels/managing-the-context-window).

Use Instruments to analyze token consumption while your app is running and to look for
opportunities to improve performance, like with [`prewarm(promptPrefix:)`](/documentation/FoundationModels/LanguageModelSession/prewarm(promptPrefix:)). For more
information on Instruments, see
[Analyzing the runtime performance of your Foundation Models app](/documentation/FoundationModels/analyzing-the-runtime-performance-of-your-foundation-models-app).

## Topics

### Creating a session

[`convenience(model:tools:instructions:)`](/documentation/FoundationModels/LanguageModelSession/init(model:tools:instructions:))

Creates a session in a blank slate state with an instructions builder.

[`convenience(model:tools:transcript:)`](/documentation/FoundationModels/LanguageModelSession/init(model:tools:transcript:))

Creates a session by rehydrating from a transcript.

### Creating a session with a dynamic profile

[`convenience init(profile: sending some LanguageModelSession.DynamicProfile, history: some Collection<Transcript.Entry>)`](/documentation/FoundationModels/LanguageModelSession/init(profile:history:))

Creates a session with a profile.

[`convenience init(model: some LanguageModel, dynamicInstructions: sending some DynamicInstructions, history: some Collection<Transcript.Entry>)`](/documentation/FoundationModels/LanguageModelSession/init(model:dynamicInstructions:history:))

Creates a session with dynamic instructions.

[`protocol DynamicProfile`](/documentation/FoundationModels/LanguageModelSession/DynamicProfile)

A dynamic profile that contains one or more profiles.

[`protocol DynamicProfileModifier`](/documentation/FoundationModels/LanguageModelSession/DynamicProfileModifier)

A protocol for creating reusable wrappers around dynamic profile content.

[`struct ConditionalDynamicProfile`](/documentation/FoundationModels/LanguageModelSession/ConditionalDynamicProfile)

A dynamic profile that resolves to one of two profiles, depending on a condition.

[`struct DynamicProfileBuilder`](/documentation/FoundationModels/LanguageModelSession/DynamicProfileBuilder)

A type that represents a dynamic profile builder.

[`struct DynamicProfileModifierContent`](/documentation/FoundationModels/LanguageModelSession/DynamicProfileModifierContent)

A type that represents the dynamic profile a modifier applies to.

[`struct ModifiedDynamicProfile`](/documentation/FoundationModels/LanguageModelSession/ModifiedDynamicProfile)

A dynamic profile with a modifier applied to it.

[`struct AnyDynamicProfile`](/documentation/FoundationModels/LanguageModelSession/AnyDynamicProfile)

A type-erased dynamic profile.

[`struct Profile`](/documentation/FoundationModels/LanguageModelSession/Profile)

A profile that contains dynamic instructions.

### Preloading the model

[`func prewarm(promptPrefix: Prompt?)`](/documentation/FoundationModels/LanguageModelSession/prewarm(promptPrefix:))

Loads the resources required for this session into memory ahead of a request.

### Accessing session properties

[`var properties: SessionPropertyValues`](/documentation/FoundationModels/LanguageModelSession/properties)

The values of the session’s managed properties.

### Inspecting the accumulated usage

[`var usage: LanguageModelSession.Usage`](/documentation/FoundationModels/LanguageModelSession/usage-swift.property)

The total accumulated usage across all responses generated by this session.

[`struct Usage`](/documentation/FoundationModels/LanguageModelSession/Usage-swift.struct)

Information about how many tokens were used by a response.

### Configuring the transcript error handling policy

[`var transcriptErrorHandlingPolicy: TranscriptErrorHandlingPolicy?`](/documentation/FoundationModels/LanguageModelSession/transcriptErrorHandlingPolicy)

The session’s policy for managing the transcript when errors occur.

[`struct TranscriptErrorHandlingPolicy`](/documentation/FoundationModels/TranscriptErrorHandlingPolicy)

Options for controlling how a language model session manages the transcript when errors occur.

### Generating a response

[`var isResponding: Bool`](/documentation/FoundationModels/LanguageModelSession/isResponding)

A Boolean value that indicates whether a response is being generated.

[`func respond(options: GenerationOptions, prompt: () throws -> Prompt) async throws -> LanguageModelSession.Response<String>`](/documentation/FoundationModels/LanguageModelSession/respond(options:prompt:))

Produces a response to a prompt.

[`func respond<Content>(generating: Content.Type, includeSchemaInPrompt: Bool, options: GenerationOptions, prompt: () throws -> Prompt) async throws -> LanguageModelSession.Response<Content>`](/documentation/FoundationModels/LanguageModelSession/respond(generating:includeSchemaInPrompt:options:prompt:))

Produces a generable object as a response to a prompt.

[`func respond(schema: GenerationSchema, includeSchemaInPrompt: Bool, options: GenerationOptions, prompt: () throws -> Prompt) async throws -> LanguageModelSession.Response<GeneratedContent>`](/documentation/FoundationModels/LanguageModelSession/respond(schema:includeSchemaInPrompt:options:prompt:))

Produces a generated content type as a response to a prompt and schema.

[`func respond(to:options:)`](/documentation/FoundationModels/LanguageModelSession/respond(to:options:))

Produces a response to a prompt.

[`func respond(to:generating:includeSchemaInPrompt:options:)`](/documentation/FoundationModels/LanguageModelSession/respond(to:generating:includeSchemaInPrompt:options:))

Produces a generable object as a response to a prompt.

[`func respond(to:schema:includeSchemaInPrompt:options:)`](/documentation/FoundationModels/LanguageModelSession/respond(to:schema:includeSchemaInPrompt:options:))

Produces a generated content type as a response to a prompt and schema.

[`struct Response`](/documentation/FoundationModels/LanguageModelSession/Response)

A structure that stores the output of a response call.

### Generating a response with metadata

[`func respond(options: GenerationOptions, contextOptions: ContextOptions, metadata: [String : any ConvertibleToGeneratedContent], prompt: () throws -> Prompt) async throws -> LanguageModelSession.Response<String>`](/documentation/FoundationModels/LanguageModelSession/respond(options:contextOptions:metadata:prompt:))

Produces a response to a prompt.

[`func respond<Content>(generating: Content.Type, options: GenerationOptions, contextOptions: ContextOptions, metadata: [String : any ConvertibleToGeneratedContent], prompt: () throws -> Prompt) async throws -> LanguageModelSession.Response<Content>`](/documentation/FoundationModels/LanguageModelSession/respond(generating:options:contextOptions:metadata:prompt:))

Produces a generable object as a response to a prompt.

[`func respond(schema: GenerationSchema, options: GenerationOptions, contextOptions: ContextOptions, metadata: [String : any ConvertibleToGeneratedContent], prompt: () throws -> Prompt) async throws -> LanguageModelSession.Response<GeneratedContent>`](/documentation/FoundationModels/LanguageModelSession/respond(schema:options:contextOptions:metadata:prompt:))

Produces a generated content type as a response to a prompt and schema.

[`func respond(to:options:contextOptions:metadata:)`](/documentation/FoundationModels/LanguageModelSession/respond(to:options:contextOptions:metadata:))

Produces a response to a prompt.

[`func respond(to:generating:options:contextOptions:metadata:)`](/documentation/FoundationModels/LanguageModelSession/respond(to:generating:options:contextOptions:metadata:))

Produces a generable object as a response to a prompt.

[`func respond(to:schema:options:contextOptions:metadata:)`](/documentation/FoundationModels/LanguageModelSession/respond(to:schema:options:contextOptions:metadata:))

Produces a generated content type as a response to a prompt and schema.

### Streaming a response

[`func streamResponse(options: GenerationOptions, prompt: () throws -> Prompt) rethrows -> sending LanguageModelSession.ResponseStream<String>`](/documentation/FoundationModels/LanguageModelSession/streamResponse(options:prompt:))

Produces a response stream to a prompt.

[`func streamResponse<Content>(generating: Content.Type, includeSchemaInPrompt: Bool, options: GenerationOptions, prompt: () throws -> Prompt) rethrows -> sending LanguageModelSession.ResponseStream<Content>`](/documentation/FoundationModels/LanguageModelSession/streamResponse(generating:includeSchemaInPrompt:options:prompt:))

Produces a response stream to a prompt.

[`func streamResponse(schema: GenerationSchema, includeSchemaInPrompt: Bool, options: GenerationOptions, prompt: () throws -> Prompt) rethrows -> sending LanguageModelSession.ResponseStream<GeneratedContent>`](/documentation/FoundationModels/LanguageModelSession/streamResponse(schema:includeSchemaInPrompt:options:prompt:))

Produces a response stream to a prompt and schema.

[`func streamResponse(to:options:)`](/documentation/FoundationModels/LanguageModelSession/streamResponse(to:options:))

Produces a response stream to a prompt.

[`func streamResponse(to:generating:includeSchemaInPrompt:options:)`](/documentation/FoundationModels/LanguageModelSession/streamResponse(to:generating:includeSchemaInPrompt:options:))

Produces a response stream to a prompt.

[`func streamResponse(to:schema:includeSchemaInPrompt:options:)`](/documentation/FoundationModels/LanguageModelSession/streamResponse(to:schema:includeSchemaInPrompt:options:))

Produces a response stream to a prompt and schema.

[`struct ResponseStream`](/documentation/FoundationModels/LanguageModelSession/ResponseStream)

An async sequence of snapshots of partially generated content.

### Streaming a response with metadata

[`func streamResponse(options: GenerationOptions, contextOptions: ContextOptions, metadata: [String : any ConvertibleToGeneratedContent], prompt: () throws -> Prompt) rethrows -> sending LanguageModelSession.ResponseStream<String>`](/documentation/FoundationModels/LanguageModelSession/streamResponse(options:contextOptions:metadata:prompt:))

Produces a response stream to a prompt.

[`func streamResponse<Content>(generating: Content.Type, options: GenerationOptions, contextOptions: ContextOptions, metadata: [String : any ConvertibleToGeneratedContent], prompt: () throws -> Prompt) rethrows -> sending LanguageModelSession.ResponseStream<Content>`](/documentation/FoundationModels/LanguageModelSession/streamResponse(generating:options:contextOptions:metadata:prompt:))

Produces a response stream to a prompt.

[`func streamResponse(schema: GenerationSchema, options: GenerationOptions, contextOptions: ContextOptions, metadata: [String : any ConvertibleToGeneratedContent], prompt: () throws -> Prompt) rethrows -> sending LanguageModelSession.ResponseStream<GeneratedContent>`](/documentation/FoundationModels/LanguageModelSession/streamResponse(schema:options:contextOptions:metadata:prompt:))

Produces a response stream to a prompt and schema.

[`func streamResponse(to:options:contextOptions:metadata:)`](/documentation/FoundationModels/LanguageModelSession/streamResponse(to:options:contextOptions:metadata:))

Produces a response stream to a prompt.

[`func streamResponse(to:generating:options:contextOptions:metadata:)`](/documentation/FoundationModels/LanguageModelSession/streamResponse(to:generating:options:contextOptions:metadata:))

Produces a response stream to a prompt.

[`func streamResponse(to:schema:options:contextOptions:metadata:)`](/documentation/FoundationModels/LanguageModelSession/streamResponse(to:schema:options:contextOptions:metadata:))

Produces a response stream to a prompt and schema.

### Accessing the transcript

[`var transcript: Transcript`](/documentation/FoundationModels/LanguageModelSession/transcript)

A full history of interactions, including user inputs and model responses.

### Generating feedback

[`func logFeedbackAttachment(sentiment: LanguageModelFeedback.Sentiment?, issues: [LanguageModelFeedback.Issue], desiredOutput: Transcript.Entry?) -> Data`](/documentation/FoundationModels/LanguageModelSession/logFeedbackAttachment(sentiment:issues:desiredOutput:))

Logs and serializes a feedback attachment that can be submitted to Apple.

[`func logFeedbackAttachment(sentiment: LanguageModelFeedback.Sentiment?, issues: [LanguageModelFeedback.Issue], desiredResponseContent: (any ConvertibleToGeneratedContent)?) -> Data`](/documentation/FoundationModels/LanguageModelSession/logFeedbackAttachment(sentiment:issues:desiredResponseContent:))

Logs and serializes a feedback attachment that includes the content you expected.

[`func logFeedbackAttachment(sentiment: LanguageModelFeedback.Sentiment?, issues: [LanguageModelFeedback.Issue], desiredResponseText: String?) -> Data`](/documentation/FoundationModels/LanguageModelSession/logFeedbackAttachment(sentiment:issues:desiredResponseText:))

Logs and serializes a feedback attachment that includes the response text you expected.

[`struct LanguageModelFeedback`](/documentation/FoundationModels/LanguageModelFeedback)

Feedback appropriate for logging or attaching to Feedback Assistant.

### Session properties

[`struct SessionProperty`](/documentation/FoundationModels/LanguageModelSession/SessionProperty)

A property wrapper that provides access to properties from within profiles, dynamic
instructions, and tools.

### Errors

[`enum Error`](/documentation/FoundationModels/LanguageModelSession/Error)

A failure caused by incorrect use of a language model session.

[`struct ToolCallError`](/documentation/FoundationModels/LanguageModelSession/ToolCallError)

An error that occurs while a language model is calling a tool.

[`enum GenerationError`](/documentation/FoundationModels/LanguageModelSession/GenerationError)

An error that may occur while generating a response.

## Relationships

### Conforms To

[`Observable`](/documentation/Observation/Observable)

[`Sendable`](/documentation/Swift/Sendable)

[`Escapable`](/documentation/Swift/Escapable)

[`Copyable`](/documentation/Swift/Copyable)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)