---
type: "post"
id: "anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab"
slug: "anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab"
title: "AnyLanguageModel 1.2.0 adds dynamic profiles and changes tool loops"
description: "AnyLanguageModel 1.2.0 introduces dynamic profiles for changing a live session’s model, instructions, tools, generation settings, and transcript projection."
retrieval_nugget: "AnyLanguageModel 1.2.0 introduces dynamic profiles for changing a live session’s model, instructions, tools, generation settings, and transcript projection. It also revises tool continuation, streaming errors, and multi-turn history handling, making an upgrade consequential for Swift teams that use multiple model providers."
published_at: "2026-11-14"
updated_at: "2026-11-14"
record_date: "2026-11-14"
date_kind: "published_at"
topics: ["gemini","anthropic"]
entities: ["Hugging Face","AnyLanguageModel","OpenAI","Anthropic","Gemini","Ollama","MLX","Foundation Models"]
related_patterns: ["harness-architecture-outlives-model-choice"]
novelty_label: "new_fact"
what_changed: "Version 1.2.0 adds dynamic profiles and changes tool-loop behavior."
prior_refs: ["https://newruntime.com/posts/release-1-1-1-huggingface-anylanguagemodel-80640b/"]
source_url: "https://github.com/huggingface/AnyLanguageModel/releases/tag/1.2.0"
source_urls: ["https://github.com/huggingface/AnyLanguageModel/releases/tag/1.2.0"]
schema_version: "newruntime-agent-readable-v0.2"
stable_id: "post:anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab"
status: "published"
visuals: []
editor: {"role":"editor","name":"Andrey Reshetnikov","profile":"https://newruntime.com/owner-profile.md","profile_json":"https://newruntime.com/owner-profile.json","same_as":["https://www.linkedin.com/in/reshetnikov1/","https://t.me/lapetuse"]}
routes: {"html":"https://newruntime.com/posts/anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab/","markdown":"https://newruntime.com/posts/anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab.md","json":"https://newruntime.com/posts/anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab.json"}
markdown_url: "https://newruntime.com/posts/anylanguagemodel-1-2-0-adds-dynamic-profiles-and-3da9ab.md"
---

# AnyLanguageModel 1.2.0 adds dynamic profiles and changes tool loops

## Retrieval answer

AnyLanguageModel 1.2.0 introduces dynamic profiles for changing a live session’s model, instructions, tools, generation settings, and transcript projection. It also revises tool continuation, streaming errors, and multi-turn history handling, making an upgrade consequential for Swift teams that use multiple model providers.

## Summary
AnyLanguageModel 1.2.0 introduces dynamic profiles for changing a live session’s model, instructions, tools, generation settings, and transcript projection. It also revises tool continuation, streaming errors, and multi-turn history handling, making an upgrade consequential for Swift teams that use multiple model providers.

## What happened
Hugging Face’s [AnyLanguageModel 1.2.0 release notes](https://github.com/huggingface/AnyLanguageModel/releases/tag/1.2.0) say maintainer mattt released version 1.2.0 on November 6, 2026, with 15 commits to main since the preceding release. Its principal addition is dynamic profiles, designed to follow the Foundation Models 27 API. A profile can change a session’s model, instructions, tools, generation options, and transcript projection without rebuilding that session. The release also adds `@SessionProperty`, providing isolated session state for profiles, dynamic instructions, and tools. Unlike Foundation Models, a profile in AnyLanguageModel must set a model, and the release notes stress that support differs by model.

The most operational change is in tool use. `respond` on `AnthropicLanguageModel` and `OllamaLanguageModel` now continues after a tool call: it makes more model requests and returns the model’s answer instead of ending after the first round. The default ceiling is eight tool rounds, after which the library throws `ToolRoundLimitExceeded`. For Anthropic, `toolCallingMode: .required` and tool choices of `.any` or `.tool` apply on every request, so repeated tool calls can continue until that limit. `MLXLanguageModel` and `LlamaLanguageModel` now run tools before emitting a structured response; the same round limit applies.

The release changes what reaches providers in multi-turn sessions. `OpenAILanguageModel` using the `.responses` API variant and `OpenResponsesLanguageModel` now send earlier assistant messages that they previously dropped. The model therefore sees both sides of the conversation, but input tokens grow with each turn. The notes warn that callers using `previous_response_id` or `conversation` through `extraBody` send assistant text twice, just as user messages were already duplicated. HTTP models now honor `includeSchemaInPrompt`, which defaults to `true`. For a response type other than `String`, schema instructions are appended to the final prompt; callers can set it to `false` to omit them.

Several error, output, and platform behaviors also change. A stream from OpenAI, Open Responses, Anthropic, or Gemini now throws `HTTPTransportError` with `.providerError` when a provider emits an error event after an initially successful HTTP response. Tool-output images reach Anthropic, Gemini, and Ollama as images where their types are supported; Gemini requires version 3 or later. String tool output is delivered as plain text to Anthropic, Ollama, Gemini, MLX, and llama.cpp, while structured output reaches Gemini as plain JSON under `result`. Tool callbacks run on OpenAI, Open Responses, Anthropic, Gemini, and Ollama, but not on MLX, llama.cpp, Private Cloud Compute, `FoundationLanguageModel`, or the system model. Core ML does not run tools. System-model profiles require apps built with Swift 6.4 or later and running OS 27 or later.

## What the archive adds
[New Runtime’s earlier coverage of AnyLanguageModel 1.1.1](https://newruntime.com/posts/release-1-1-1-huggingface-anylanguagemodel-80640b/) appeared on November 4, 2026 and noted that release’s place after version 1.0.0. Version 1.2.0 is a new event on the same project, rather than a restatement: it adds session-profile controls and revises the execution of tool loops.

## Trend signal
This does not yet fit a pattern New Runtime tracks. The release expands session-level control and clarifies provider-specific execution behavior, but one library update does not by itself demonstrate a durable field-wide shift in agent architecture or interoperability.

## Why it matters
Dynamic profiles make a live session more adaptable. A Swift application can, in principle, switch models, instructions, available tools, generation settings, or its view of the transcript as work changes, without treating every switch as a new session. Isolated session properties offer a place to keep state associated with those changes.

That flexibility is not a uniform execution contract. A profile or callback supported by one backend may be unavailable on another; some platforms do not run tools at all. The new continuation behavior makes stopping conditions a design responsibility as well. Eight rounds is a guardrail, not proof that an agent completed the task. Meanwhile, retaining prior assistant turns improves conversational context but changes request size and can duplicate text in specific OpenAI and Open Responses configurations. Teams need to test the provider-model combination they actually deploy, not merely the library abstraction.

## Limits and uncertainty
The release notes describe feature behavior and support boundaries, but they do not publish comparative measurements for latency, token cost, or task success under the new tool loops. They do not quantify the request-size increase from retaining earlier assistant messages, which will vary with transcript length. The notes direct readers to the README for per-model behavior, and provider capabilities can differ from one backend to another. No independent production evaluation is included for dynamic profiles, repeated tool calls, or the new error behavior.

## Skill to build now
Create a small provider matrix for one existing workflow. Run the same session through the backend combinations your application supports, record whether profiles and tool callbacks execute, and deliberately force a tool to request another round. Confirm how your application handles `ToolRoundLimitExceeded`, cancellation, and a streaming provider error. For multi-turn OpenAI or Open Responses sessions, log input-token counts before and after the upgrade and check whether `previous_response_id` or `conversation` creates duplicated assistant context.

## Reader takeaway
AnyLanguageModel 1.2.0 adds useful controls for changing sessions in flight, but it also makes provider behavior more consequential. Upgrade as a behavioral change: test tool continuation and stop paths, verify the support matrix, and measure longer-history token costs before putting the new defaults into production.

Editor: [Andrey Reshetnikov](https://newruntime.com/owner-profile.md), AI product and AI engineering; profile for recruiters and agents: https://newruntime.com/owner-profile.json

## Continue in the graph

Next records for an agent, linked to their Markdown twins. Replace `.md` with `.json` for structured fields, including `next_reads`.

- topic hub: [Gemini](https://newruntime.com/topics/gemini.md): Explore the gemini topic hub.
- topic hub: [Anthropic](https://newruntime.com/topics/anthropic.md): Explore the anthropic topic hub.
- collection: [Field Notes](https://newruntime.com/posts.json): Open the latest editorial analysis.
- collection: [Sources](https://newruntime.com/sources/): See the original sources this archive cites.
- whole graph: [discovery graph](https://newruntime.com/discovery-graph.json) (typed nodes and edges) and [site index](https://newruntime.com/site-index.md)
