Dela via


Guide för viktiga ändringar i Python 2026

I det här dokumentet visas alla betydande ändringar i Python-versioner sedan början av 2026, inklusive icke-bakåtkompatibla ändringar och viktiga förbättringar som kan påverka koden. Varje ändring markeras som:

  • 🔴 Breaking – Kräver kodändringar för uppgradering
  • 🟡 Förbättring – Ny kapacitet eller förbättring; befintlig kod fortsätter att fungera

Det här dokumentet tas bort när vi når den stabila versionen 1.0.0, så se det när du uppgraderar mellan versioner 2026 för att se till att du inte missar några viktiga ändringar. Detaljerade uppgraderingsinstruktioner om specifika ämnen (t.ex. alternativmigrering) finns i de länkade uppgraderingsguiderna eller de länkade PR:erna.


python-1.0.0rc1 /python-1.0.0b260219 (19 februari 2026)

Release:agent-framework-core och agent-framework-azure-ai befordras till 1.0.0rc1. Alla andra paket har uppdaterats till 1.0.0b260219.

🔴 Enhetlig hantering av Azure-autentiseringsuppgifter i alla paket

PR:#4088

Parametrarna ad_token, ad_token_provideroch /och get_entra_auth_token har ersatts med en enhetlig credential parameter för alla Azure-relaterade Python-paket. Den nya metoden använder azure.identity.get_bearer_token_provider för automatisk cachelagring och uppdatering av token.

Berörda klasser:AzureOpenAIChatClient, AzureOpenAIResponsesClient, AzureOpenAIAssistantsClient, AzureAIClient, AzureAIAgentClient, , AzureAIProjectAgentProvider, AzureAIAgentsProvider, AzureAISearchContextProvider, PurviewClient, , PurviewPolicyMiddleware. PurviewChatPolicyMiddleware

Before:

from azure.identity import AzureCliCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    AzureCliCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAIResponsesClient(
    azure_ad_token_provider=token_provider,
    ...
)

After:

from azure.identity import AzureCliCredential

client = AzureOpenAIResponsesClient(
    credential=AzureCliCredential(),
    ...
)

Parametern credential accepterar TokenCredential, AsyncTokenCredential eller en anropsbar tokenleverantör. Cachelagring och uppdatering av token hanteras automatiskt.


🔴 Omdesignad Python-undantagshierarki

PR:#4082

Den platta ServiceException familjen har ersatts med domänomfattande undantagsgrenar under en enda AgentFrameworkException rot. Detta ger anroparna exakta except mål och tydlig felsemantik.

Ny hierarki:

AgentFrameworkException
├── AgentException
│   ├── AgentInvalidAuthException
│   ├── AgentInvalidRequestException
│   ├── AgentInvalidResponseException
│   └── AgentContentFilterException
├── ChatClientException
│   ├── ChatClientInvalidAuthException
│   ├── ChatClientInvalidRequestException
│   ├── ChatClientInvalidResponseException
│   └── ChatClientContentFilterException
├── IntegrationException
│   ├── IntegrationInitializationError
│   ├── IntegrationInvalidAuthException
│   ├── IntegrationInvalidRequestException
│   ├── IntegrationInvalidResponseException
│   └── IntegrationContentFilterException
├── ContentError
├── WorkflowException
│   ├── WorkflowRunnerException
│   ├── WorkflowValidationError
│   └── WorkflowActionError
├── ToolExecutionException
├── MiddlewareTermination
└── SettingNotFoundError

Undantag har tagits bort:ServiceExceptionServiceInitializationError, ServiceResponseExceptionServiceContentFilterException, ServiceInvalidAuthError, ServiceInvalidExecutionSettingsError, ServiceInvalidRequestError, ServiceInvalidResponseError, AgentExecutionException, AgentInvocationError, AgentInitializationError, AgentSessionException, ChatClientInitializationError, CheckpointDecodingError.

Before:

from agent_framework.exceptions import ServiceException, ServiceResponseException

try:
    result = await agent.run("Hello")
except ServiceResponseException:
    ...
except ServiceException:
    ...

After:

from agent_framework.exceptions import AgentException, AgentInvalidResponseException, AgentFrameworkException

try:
    result = await agent.run("Hello")
except AgentInvalidResponseException:
    ...
except AgentException:
    ...
except AgentFrameworkException:
    # catch-all for any Agent Framework error
    ...

Anmärkning

Init-valideringsfel använder nu inbyggda funktioner istället för anpassade undantag. Agent Framework-undantag är reserverade för fel på domännivå.


🔴 Providertillstånd som omfattas av source_id

PR:#3995

Providerkrokar får nu en provideromfattande tillståndsordlista (state.setdefault(provider.source_id, {})) i stället för det fullständiga sessionstillståndet. Det innebär att providerimplementeringar som tidigare har använt kapslat tillstånd via state[self.source_id]["key"] nu måste komma åt state["key"] direkt.

Dessutom InMemoryHistoryProvider har standardvärdet source_id ändrats från "memory" till "in_memory".

Before:

# In a custom provider hook:
async def on_before_agent(self, state: dict, **kwargs):
    my_data = state[self.source_id]["my_key"]

# InMemoryHistoryProvider default source_id
provider = InMemoryHistoryProvider("memory")

After:

# Provider hooks receive scoped state — no nested access needed:
async def on_before_agent(self, state: dict, **kwargs):
    my_data = state["my_key"]

# InMemoryHistoryProvider default source_id changed
provider = InMemoryHistoryProvider("in_memory")

🔴 Justering av meddelandeinmatning för chatt/agent (run jämfört med get_response)

PR:#3920

Chattklientimplementeringar get_response tar nu konsekvent emot Sequence[Message]. agent.run(...) förblir flexibel (str, Content, Messageeller sekvenser av dessa) och normaliserar indata innan du anropar chattklienter.

Before:

async def get_response(self, messages: str | Message | list[Message], **kwargs): ...

After:

from collections.abc import Sequence
from agent_framework import Message

async def get_response(self, messages: Sequence[Message], **kwargs): ...

🔴 FunctionTool[Any] generisk inställning har tagits bort för schema passthrough

PR:#3907

Schemabaserade verktygssökvägar förlitar sig inte längre på det tidigare FunctionTool[Any] allmänna beteendet. Använd FunctionTool direkt och ange antingen en pydantisk BaseModel eller explicita scheman där det behövs (till exempel med @tool(schema=...)).

Before:

placeholder: FunctionTool[Any] = FunctionTool(...)

After:

placeholder: FunctionTool = FunctionTool(...)

🔴 Pydantiska inställningar ersatta med TypedDict + load_settings()

PR:#3843, #4032

Den pydantic-settings-baserade AFBaseSettings klassen har ersatts med ett enkelt, funktionsbaserat inställningssystem med TypedDict och load_settings(). Beroendet pydantic-settings har tagits bort helt.

Alla inställningsklasser (t.ex. OpenAISettings, , AzureOpenAISettings, AnthropicSettings) är nu TypedDict definitioner och inställningsvärden nås via ordlistesyntax i stället för attributåtkomst.

Before:

from agent_framework.openai import OpenAISettings

settings = OpenAISettings()  # pydantic-settings auto-loads from env
api_key = settings.api_key
model_id = settings.model_id

After:

from agent_framework.openai import OpenAISettings, load_settings

settings = load_settings(OpenAISettings, env_prefix="OPENAI_")
api_key = settings["api_key"]
model_id = settings["model_id"]

Viktigt!

Agent Framework läser inte in värden automatiskt från .env filer. Du måste uttryckligen välja att antingen .env läsa in:

  • Anropa load_dotenv() från python-dotenv paketet i början av ditt program
  • Skicka env_file_path=".env" till load_settings()
  • Ange miljövariabler direkt i gränssnittet eller IDE

Lösningsordningen load_settings är: explicit åsidosätter → .env filvärden (när env_file_path anges) → miljövariabler → standardvärden. Om du anger env_file_pathmåste filen finnas eller så aktiveras en FileNotFoundError .


🟡 Åtgärda överlämning av resonemangsmodellarbetsflöde och serialisering av historik

PR:#4083

Åtgärdar flera fel när du använder resonemangsmodeller (t.ex. gpt-5-mini, gpt-5.2) i arbetsflöden med flera agenter. Motiveringsobjekt från SVARS-API:et är nu korrekt serialiserade och ingår endast i historiken när en function_call också finns, vilket förhindrar API-fel. Krypterat/dolt resonemangsinnehåll genereras nu korrekt och fältformatet summary korrigeras. service_session_id Rensas också vid överlämning för att förhindra läckage mellan agenttillstånd.


🟡 Bedrock har lagts till core[all] och standardvalen för verktyg har åtgärdats

PR:#3953

Amazon Bedrock ingår nu i extrafunktionerna agent-framework-core[all] och finns tillgänglig via den agent_framework.amazon lata importytan. Beteendet för val av verktyg har också åtgärdats: inte satta verktygsvalsvärden förblir nu inte satta så att tjänsteleverantörer använder standardvärden för deras tjänster, medan uttryckligen angivna värden bevaras.

from agent_framework.amazon import BedrockClient

🟡 AzureAIClient varnar för åsidosättningar av körtid som inte stöds

PR:#3919

AzureAIClient loggar nu en varning när körningstid tools eller structured_output skiljer sig från agentens konfiguration vid skapandetiden. Azure AI Agent Service stöder inte ändringar av körningsverktyg eller svarsformat – använd AzureOpenAIResponsesClient i stället om du behöver dynamiska åsidosättningar.


🟡 workflow.as_agent() nu används lokal historik som standard när leverantörer inte är angivna

PR:#3918

När workflow.as_agent() skapas utan context_providerslägger den nu till InMemoryHistoryProvider("memory") som standard. Om kontextprovidrar uttryckligen tillhandahålls bevaras listan oförändrad.

workflow_agent = workflow.as_agent(name="MyWorkflowAgent")
# Default local history provider is injected when none are provided.

🟡 OpenTelemetry-spårningskontext som vidarebefordras till MCP-begäranden

PR:#3780

När OpenTelemetry har installerats matas spårningskontexten (t.ex. W3C traceparent) automatiskt in i MCP-begäranden via params._meta. Detta möjliggör distribuerad spårning från slutpunkt till slutpunkt över agent-→ MCP-serveranrop. Inga kodändringar behövs – det här är additivt beteende som aktiveras när det finns en giltig span-kontext.


🟡 Stöd för varaktigt arbetsflöde för Azure Functions

PR:#3630

Paketet agent-framework-azurefunctions har nu stöd för att köra Workflow grafer på Azure Durable Functions. Skicka en workflow parameter till AgentFunctionApp för att automatiskt registrera agententiteter, aktivitetsfunktioner och HTTP-slutpunkter.

from agent_framework.azurefunctions import AgentFunctionApp

app = AgentFunctionApp(workflow=my_workflow)
# Automatically registers:
#   POST /api/workflow/run          — start a workflow
#   GET  /api/workflow/status/{id}  — check status
#   POST /api/workflow/respond/{id}/{requestId} — HITL response

Stöder fan-out/fan-in, delat tillstånd och mönster för människa i loopen med konfigurerbar timeout och automatiskt avvisande vid förfallodatum.


python-1.0.0b260212 (12 februari 2026)

Viktig information:python-1.0.0b260212

🔴 Hosted*ToolKlasser som ersätts av klientmetoder get_*_tool()

PR:#3634

De värdbaserade verktygsklasserna togs bort till förmån för fabriksmetoder med klientomfattning. Detta gör tillgängligheten av verktyg explicit per leverantör.

Klassen har tagits bort Replacement
HostedCodeInterpreterTool client.get_code_interpreter_tool()
HostedWebSearchTool client.get_web_search_tool()
HostedFileSearchTool client.get_file_search_tool(...)
HostedMCPTool client.get_mcp_tool(...)
HostedImageGenerationTool client.get_image_generation_tool(...)

Before:

from agent_framework import HostedCodeInterpreterTool, HostedWebSearchTool

tools = [HostedCodeInterpreterTool(), HostedWebSearchTool()]

After:

from agent_framework.openai import OpenAIResponsesClient

client = OpenAIResponsesClient()
tools = [client.get_code_interpreter_tool(), client.get_web_search_tool()]

🔴 Pipeline för sessions-/kontextprovider slutförd (AgentSession, context_providers)

PR:#3850

Python-sessionen och kontextprovidermigreringen slutfördes. AgentThread och de gamla typerna av kontextprovider har tagits bort.

  • AgentThreadAgentSession
  • agent.get_new_thread()agent.create_session()
  • agent.get_new_thread(service_thread_id=...)agent.get_session(service_session_id=...)
  • context_provider= / chat_message_store_factory= mönster ersätts av context_providers=[...]

Before:

thread = agent.get_new_thread()
response = await agent.run("Hello", thread=thread)

After:

session = agent.create_session()
response = await agent.run("Hello", session=session)

🔴 Kontrollpunktsmodell och lagringsbeteende omstrukturerat

PR:#3744

Interna kontrollpunkter har gjorts om, vilket påverkar kompatibiliteten för bevarade kontrollpunkter och anpassade lagringsimplementeringar:

  • WorkflowCheckpoint lagrar nu levande objekt (serialisering sker i kontrollpunktslagring)
  • FileCheckpointStorage använder nu pickle-serialisering
  • workflow_id togs bort och previous_checkpoint_id lades till
  • Inaktuella kontrollpunktskrokar har tagits bort

Om du bevarar kontrollpunkter mellan versioner återskapar eller migrerar du befintliga kontrollpunktsartefakter innan du återupptar arbetsflöden.


🟡 AzureOpenAIResponsesClient stöder Microsoft Foundry-projektslutpunkter

PR:#3814

Nu kan du skapa AzureOpenAIResponsesClient med en slutpunkt för Foundry-projekt eller AIProjectClient, inte bara direkta Azure OpenAI-slutpunkter.

from azure.identity import DefaultAzureCredential
from agent_framework.azure import AzureOpenAIResponsesClient

client = AzureOpenAIResponsesClient(
    project_endpoint="https://<your-project>.services.ai.azure.com",
    deployment_name="gpt-4o-mini",
    credential=DefaultAzureCredential(),
)

🔴 Mellanprogram call_next accepterar inte längre context

PR:#3829

Fortsättning av mellanprogram tar nu inga argument. Om mellanprogrammet fortfarande anropar call_next(context)uppdaterar du det till call_next().

Before:

async def telemetry_middleware(context, call_next):
    # ...
    return await call_next(context)

After:

async def telemetry_middleware(context, call_next):
    # ...
    return await call_next()

python-1.0.0b260210 (10 februari 2026)

Viktig information:python-1.0.0b260210

🔴 Metoder för arbetsflödesfabriker har tagits bort från WorkflowBuilder

PR:#3781

register_executor() och register_agent() har tagits bort från WorkflowBuilder. Alla builder-metoder (add_edge, add_fan_out_edges, add_fan_in_edges, add_chain, add_switch_case_edge_group, ) add_multi_selection_edge_groupoch start_executor accepterar inte längre strängnamn – de kräver kör- eller agentinstanser direkt.

För tillståndsisolering omsluter du instansiering av executor/agent och arbetsflöden i en hjälpmetod så att varje anrop genererar nya instanser.

WorkflowBuilder med utförare

Before:

workflow = (
    WorkflowBuilder(start_executor="UpperCase")
    .register_executor(lambda: UpperCaseExecutor(id="upper"), name="UpperCase")
    .register_executor(lambda: ReverseExecutor(id="reverse"), name="Reverse")
    .add_edge("UpperCase", "Reverse")
    .build()
)

After:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = WorkflowBuilder(start_executor=upper).add_edge(upper, reverse).build()

WorkflowBuilder med agenter

Before:

builder = WorkflowBuilder(start_executor="writer_agent")
builder.register_agent(factory_func=create_writer_agent, name="writer_agent")
builder.register_agent(factory_func=create_reviewer_agent, name="reviewer_agent")
builder.add_edge("writer_agent", "reviewer_agent")

workflow = builder.build()

After:

writer_agent = create_writer_agent()
reviewer_agent = create_reviewer_agent()

workflow = WorkflowBuilder(start_executor=writer_agent).add_edge(writer_agent, reviewer_agent).build()

Tillståndsisolering med hjälpmetoder

För arbetsflöden som behöver isolerad status per anrop, omslut konstruktionen i en hjälpmetod:

def create_workflow() -> Workflow:
    """Each call produces fresh executor instances with independent state."""
    upper = UpperCaseExecutor(id="upper")
    reverse = ReverseExecutor(id="reverse")

    return WorkflowBuilder(start_executor=upper).add_edge(upper, reverse).build()

workflow_a = create_workflow()
workflow_b = create_workflow()

🔴 ChatAgent har bytt namn till Agent, ChatMessage bytt namn till Message

PR:#3747

Python-kärntyper har förenklats genom att det redundanta Chat prefixet tas bort. Inga bakåtkompatibilitetsalias tillhandahålls.

Före Efter
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

Uppdatera importer

Before:

from agent_framework import ChatAgent, ChatMessage

After:

from agent_framework import Agent, Message

Referenser för uppdateringstyp

Before:

agent = ChatAgent(
    chat_client=client,
    name="assistant",
    instructions="You are a helpful assistant.",
)

message = ChatMessage(role="user", contents=[Content.from_text("Hello")])

After:

agent = Agent(
    client=client,
    name="assistant",
    instructions="You are a helpful assistant.",
)

message = Message(role="user", contents=[Content.from_text("Hello")])

Anmärkning

ChatClient, ChatResponse, ChatOptionsoch ChatMessageStorebyts inte namn på av den här ändringen.


🔴 Typer av API-granskningsuppdateringar mellan svars-/meddelandemodeller

PR:#3647

Den här versionen innehåller en bred, icke-bakåtkompatibel rensning av meddelande-/svarsskrivning och hjälp-API:er.

  • Role och FinishReason är nu NewType omslag över str med RoleLiteral/FinishReasonLiteral för kända värden. Behandla dem som strängar (ingen .value användning).
  • Message konstruktionen är standardiserad på Message(role, contents=[...]); strängar i contents konverteras automatiskt till textinnehåll.
  • ChatResponse och AgentResponse konstruktorer centreras nu på messages= (enkel Message eller sekvens); äldre text= konstruktoranvändning togs bort från svar.
  • ChatResponseUpdate och AgentResponseUpdate accepterar text=inte längre ; använd contents=[Content.from_text(...)].
  • Uppdateringssammanslagning av hjälparnamn har förenklats.
  • try_parse_value togs bort från ChatResponse och AgentResponse.

Namn på hjälpmetod

Före Efter
ChatResponse.from_chat_response_updates(...) ChatResponse.from_updates(...)
ChatResponse.from_chat_response_generator(...) ChatResponse.from_update_generator(...)
AgentResponse.from_agent_run_response_updates(...) AgentResponse.from_updates(...)

Uppdatera konstruktionen för svarsuppdatering

Before:

update = AgentResponseUpdate(text="Processing...", role="assistant")

After:

from agent_framework import AgentResponseUpdate, Content

update = AgentResponseUpdate(
    contents=[Content.from_text("Processing...")],
    role="assistant",
)

Ersätt try_parse_value med try/except.value

Before:

if parsed := response.try_parse_value(MySchema):
    print(parsed.name)

After:

from pydantic import ValidationError

try:
    parsed = response.value
    if parsed:
        print(parsed.name)
except ValidationError as err:
    print(f"Validation failed: {err}")

🔴 Enhetlig run/get_response modell och ResponseStream användning

PR:#3379

Python-API:er konsoliderades runt agent.run(...) och client.get_response(...), med strömning som representeras av ResponseStream.

Before:

async for update in agent.run_stream("Hello"):
    print(update)

After:

stream = agent.run("Hello", stream=True)
async for update in stream:
    print(update)

🔴 Kärnkontext/protokolltypsbyten

PR:#3714, #3717

Före Efter
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

Uppdatera importer och skriv anteckningar i enlighet med detta.


🔴 Fortsättningsparameter för mellanprogram har bytt namn till call_next

PR:#3735

Mellanprogramssignaturer bör nu användas call_next i stället för next.

Before:

async def my_middleware(context, next):
    return await next(context)

After:

async def my_middleware(context, call_next):
    return await call_next(context)

🔴 TypeVar-namn standardiserade (TNameNameT)

PR:#3770

Kodbasen följer nu en konsekvent TypeVar-namngivningsstil där suffix T används.

Before:

TMessage = TypeVar("TMessage")

After:

MessageT = TypeVar("MessageT")

Om du underhåller anpassade omslutningar kring ramverksgenika justerar du dina lokala TypeVar-namn med den nya konventionen för att minska anteckningsomsättningen.


🔴 Utdata och direktuppspelningsändringar för agentbaserat arbetsflöde

PR:#3649

workflow.as_agent() beteende har uppdaterats för att justera utdata och direktuppspelning med standardagentens svarsmönster. Granska användare av arbetsflöde som agent som är beroende av äldre utdata/uppdateringshantering och uppdatera dem till det aktuella AgentResponse/AgentResponseUpdate flödet.


🔴 Fluent Builder-metoder har flyttats till konstruktorparametrar

PR:#3693

Fluent-metoder med en enskild konfiguration för 6 byggare (WorkflowBuilder, SequentialBuilder, ConcurrentBuilder, GroupChatBuilder, MagenticBuilder, HandoffBuilder) har migrerats till konstruktorparametrar. Fluent-metoder som var den enda konfigurationssökvägen för en inställning tas bort till förmån för konstruktorargument.

WorkflowBuilder

set_start_executor(), with_checkpointing()och with_output_from() tas bort. Använd konstruktorparametrar i stället.

Before:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = (
    WorkflowBuilder(start_executor=upper)
    .add_edge(upper, reverse)
    .set_start_executor(upper)
    .with_checkpointing(storage)
    .build()
)

After:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = (
    WorkflowBuilder(start_executor=upper, checkpoint_storage=storage)
    .add_edge(upper, reverse)
    .build()
)

SequentialBuilder / ConcurrentBuilder

participants(), register_participants(), with_checkpointing()och with_intermediate_outputs() tas bort. Använd konstruktorparametrar i stället.

Before:

workflow = SequentialBuilder().participants([agent_a, agent_b]).with_checkpointing(storage).build()

After:

workflow = SequentialBuilder(participants=[agent_a, agent_b], checkpoint_storage=storage).build()

GroupChatBuilder

participants(), register_participants(), with_orchestrator(), with_termination_condition(), with_max_rounds(), with_checkpointing()och with_intermediate_outputs() tas bort. Använd konstruktorparametrar i stället.

Before:

workflow = (
    GroupChatBuilder()
    .with_orchestrator(selection_func=selector)
    .participants([agent1, agent2])
    .with_termination_condition(lambda conv: len(conv) >= 4)
    .with_max_rounds(10)
    .build()
)

After:

workflow = GroupChatBuilder(
    participants=[agent1, agent2],
    selection_func=selector,
    termination_condition=lambda conv: len(conv) >= 4,
    max_rounds=10,
).build()

MagenticBuilder

participants(), register_participants(), with_manager(), with_plan_review(), with_checkpointing()och with_intermediate_outputs() tas bort. Använd konstruktorparametrar i stället.

Before:

workflow = (
    MagenticBuilder()
    .participants([researcher, coder])
    .with_manager(agent=manager_agent)
    .with_plan_review()
    .build()
)

After:

workflow = MagenticBuilder(
    participants=[researcher, coder],
    manager_agent=manager_agent,
    enable_plan_review=True,
).build()

HandoffBuilder

with_checkpointing() och with_termination_condition() tas bort. Använd konstruktorparametrar i stället.

Before:

workflow = (
    HandoffBuilder(participants=[triage, specialist])
    .with_start_agent(triage)
    .with_termination_condition(lambda conv: len(conv) > 5)
    .with_checkpointing(storage)
    .build()
)

After:

workflow = (
    HandoffBuilder(
        participants=[triage, specialist],
        termination_condition=lambda conv: len(conv) > 5,
        checkpoint_storage=storage,
    )
    .with_start_agent(triage)
    .build()
)

Valideringsändringar

  • WorkflowBuilder kräver start_executor nu som konstruktorargument (tidigare angivet via fluent-metoden)
  • SequentialBuilder, ConcurrentBuilder, GroupChatBuilder, och MagenticBuilder kräver nu antingen participants eller participant_factories under konstruktion - att inte använda någon av dem resulterar i ValueError

Anmärkning

HandoffBuilder redan godkänts participants/participant_factories som konstruktorparametrar och har inte ändrats i detta avseende.


🔴 Arbetsflödeshändelser samlades till en enda WorkflowEvent med type diskriminator

PR:#3690

Alla enskilda underklasser för arbetsflödeshändelser har ersatts av en enda allmän WorkflowEvent[DataT] klass. I stället för att använda isinstance() kontroller för att identifiera händelsetyper kontrollerar du nu strängliteralen event.type (t.ex. "output", "request_info", "status"). Detta följer samma mönster som klasskonsolideringen Content från python-1.0.0b260123.

Borttagna händelseklasser

Följande exporterade händelseunderklasser finns inte längre:

Äldre klass Nytt event.type värde
WorkflowOutputEvent "output"
RequestInfoEvent "request_info"
WorkflowStatusEvent "status"
WorkflowStartedEvent "started"
WorkflowFailedEvent "failed"
ExecutorInvokedEvent "executor_invoked"
ExecutorCompletedEvent "executor_completed"
ExecutorFailedEvent "executor_failed"
SuperStepStartedEvent "superstep_started"
SuperStepCompletedEvent "superstep_completed"

Uppdatera importer

Before:

from agent_framework import (
    WorkflowOutputEvent,
    RequestInfoEvent,
    WorkflowStatusEvent,
    ExecutorCompletedEvent,
)

After:

from agent_framework import WorkflowEvent
# Individual event classes no longer exist; use event.type to discriminate

Uppdatera händelsetypkontroller

Before:

async for event in workflow.run_stream(input_message):
    if isinstance(event, WorkflowOutputEvent):
        print(f"Output from {event.executor_id}: {event.data}")
    elif isinstance(event, RequestInfoEvent):
        requests[event.request_id] = event.data
    elif isinstance(event, WorkflowStatusEvent):
        print(f"Status: {event.state}")

After:

async for event in workflow.run_stream(input_message):
    if event.type == "output":
        print(f"Output from {event.executor_id}: {event.data}")
    elif event.type == "request_info":
        requests[event.request_id] = event.data
    elif event.type == "status":
        print(f"Status: {event.state}")

Direktuppspelning med AgentResponseUpdate

Before:

from agent_framework import AgentResponseUpdate, WorkflowOutputEvent

async for event in workflow.run_stream("Write a blog post about AI agents."):
    if isinstance(event, WorkflowOutputEvent) and isinstance(event.data, AgentResponseUpdate):
        print(event.data, end="", flush=True)
    elif isinstance(event, WorkflowOutputEvent):
        print(f"Final output: {event.data}")

After:

from agent_framework import AgentResponseUpdate

async for event in workflow.run_stream("Write a blog post about AI agents."):
    if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
        print(event.data, end="", flush=True)
    elif event.type == "output":
        print(f"Final output: {event.data}")

Skriv anteckningar

Before:

pending_requests: list[RequestInfoEvent] = []
output: WorkflowOutputEvent | None = None

After:

from typing import Any
from agent_framework import WorkflowEvent

pending_requests: list[WorkflowEvent[Any]] = []
output: WorkflowEvent | None = None

Anmärkning

WorkflowEvent är generisk (WorkflowEvent[DataT]), men för samlingar med blandade händelser, använd WorkflowEvent[Any] eller oparametriserad WorkflowEvent.


🔴 workflow.send_responses* Bort; Använda workflow.run(responses=...)

PR:#3720

send_responses() och send_responses_streaming() togs bort från Workflow. Fortsätt pausade arbetsflöden genom att skicka svar direkt till run().

Before:

async for event in workflow.send_responses_streaming(
    checkpoint_id=checkpoint_id,
    responses=[approved_response],
):
    ...

After:

async for event in workflow.run(
    checkpoint_id=checkpoint_id,
    responses=[approved_response],
):
    ...

🔴 SharedState omdöpt till State; API:er för arbetsflödestillstånd är synkrona

PR:#3667

Tillstånds-API:er kräver awaitinte längre och namngivning standardiserades:

Före Efter
ctx.shared_state ctx.state
await ctx.get_shared_state("k") ctx.get_state("k")
await ctx.set_shared_state("k", v) ctx.set_state("k", v)
checkpoint.shared_state checkpoint.state

🔴 Orkestreringsbyggare har flyttats till agent_framework.orchestrations

PR:#3685

Orkestreringsbyggare finns nu i ett dedikerat paketnamnområde.

Before:

from agent_framework import SequentialBuilder, GroupChatBuilder

After:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟡 Långvariga bakgrundssvar och fortsättningstokener

PR:#3808

Bakgrundssvar stöds nu för Python-agenten som körs via options={"background": True} och continuation_token.

response = await agent.run("Long task", options={"background": True})
while response.continuation_token is not None:
    response = await agent.run(options={"continuation_token": response.continuation_token})

🟡 Förhandsgranskningstyper för sessions-/kontextprovider har lagts till sida vid sida

PR:#3763

Nya typer av sessions-/kontextpipelines introducerades tillsammans med äldre API:er för inkrementell migrering, inklusive SessionContext och BaseContextProvider.


🟡 Kodtolkaruppspelning innehåller nu inkrementella koddelta

PR:#3775

Strömmande kodtolkar visar nu koddelta-uppdateringar i det strömmade innehållet så att användargränssnitt kan återge genererad kod progressivt.


🟡 @tool stöder explicit schemahantering

PR:#3734

Verktygsdefinitioner kan nu använda explicit schemahantering när härledda schemautdata behöver anpassas.


python-1.0.0b260130 (30 januari 2026)

Viktig information:python-1.0.0b260130

🟡 ChatOptions och ChatResponse/AgentResponse nu generiskt över svarsformat

PR:#3305

ChatOptions, ChatResponse, och AgentResponse är nu generiska typer som parametriseras av svarsformattypen. Detta möjliggör bättre typinferens när du använder strukturerade utdata med response_format.

Before:

from agent_framework import ChatOptions, ChatResponse
from pydantic import BaseModel

class MyOutput(BaseModel):
    name: str
    score: int

options: ChatOptions = {"response_format": MyOutput}  # No type inference
response: ChatResponse = await client.get_response("Query", options=options)
result = response.value  # Type: Any

After:

from agent_framework import ChatOptions, ChatResponse
from pydantic import BaseModel

class MyOutput(BaseModel):
    name: str
    score: int

options: ChatOptions[MyOutput] = {"response_format": MyOutput}  # Generic parameter
response: ChatResponse[MyOutput] = await client.get_response("Query", options=options)
result = response.value  # Type: MyOutput | None (inferred!)

Tips/Råd

Det här är en icke-banbrytande förbättring. Befintlig kod utan typparametrar fortsätter att fungera. Du behöver inte ange typerna i kodfragmentet ovan för alternativen och svaret. de visas här för tydlighetens skull.


🟡 BaseAgent stöd har lagts till för Claude Agent SDK

PR:#3509

Python SDK innehåller nu en BaseAgent implementering för Claude Agent SDK som möjliggör förstklassig adapterbaserad användning i Agent Framework.


python-1.0.0b260128 (28 januari 2026)

Viktig information:python-1.0.0b260128

🔴 AIFunction bytt namn till FunctionTool och @ai_function bytt namn till @tool

PR:#3413

Klassen och dekoratören har bytt namn för tydlighet och konsekvens med branschterminologi.

Before:

from agent_framework.core import ai_function, AIFunction

@ai_function
def get_weather(city: str) -> str:
    """Get the weather for a city."""
    return f"Weather in {city}: Sunny"

# Or using the class directly
func = AIFunction(get_weather)

After:

from agent_framework.core import tool, FunctionTool

@tool
def get_weather(city: str) -> str:
    """Get the weather for a city."""
    return f"Weather in {city}: Sunny"

# Or using the class directly
func = FunctionTool(get_weather)

🔴 Fabriksmönster har lagts till i GroupChat och Magentic; API-namnbyten

PR:#3224

Deltagarfabriken och orkestreringsfabriken har lagts till i gruppchatten. Innehåller även namnbyten:

  • with_standard_managerwith_manager
  • participant_factoriesregister_participant

Before:

from agent_framework.workflows import MagenticBuilder

builder = MagenticBuilder()
builder.with_standard_manager(manager)
builder.participant_factories(factory1, factory2)

After:

from agent_framework.workflows import MagenticBuilder

builder = MagenticBuilder()
builder.with_manager(manager)
builder.register_participant(factory1)
builder.register_participant(factory2)

🔴 Github har bytt namn till GitHub

PR:#3486

Klass- och paketnamn har uppdaterats för att använda rätt hölje.

Before:

from agent_framework_github_copilot import GithubCopilotAgent

agent = GithubCopilotAgent(...)

After:

from agent_framework_github_copilot import GitHubCopilotAgent

agent = GitHubCopilotAgent(...)

python-1.0.0b260127 (27 januari 2026)

Viktig information:python-1.0.0b260127

🟡 BaseAgent stöd har lagts till för GitHub Copilot SDK

PR:#3404

Python SDK innehåller nu en BaseAgent implementering för GitHub Copilot SDK-integreringar.


python-1.0.0b260123 (23 januari 2026)

Viktig information:python-1.0.0b260123

🔴 Innehållstyper förenklade till en enda klass med classmethod-konstruktorer

PR:#3252

Ersatte alla gamla innehållstyper (härledda från BaseContent) med en enda Content klass med classmethods för att skapa specifika typer.

Komplett migreringsreferens

Gammal typ Ny metod
TextContent(text=...) Content.from_text(text=...)
DataContent(data=..., media_type=...) Content.from_data(data=..., media_type=...)
UriContent(uri=..., media_type=...) Content.from_uri(uri=..., media_type=...)
ErrorContent(message=...) Content.from_error(message=...)
HostedFileContent(file_id=...) Content.from_hosted_file(file_id=...)
FunctionCallContent(name=..., arguments=..., call_id=...) Content.from_function_call(name=..., arguments=..., call_id=...)
FunctionResultContent(call_id=..., result=...) Content.from_function_result(call_id=..., result=...)
FunctionApprovalRequestContent(...) Content.from_function_approval_request(...)
FunctionApprovalResponseContent(...) Content.from_function_approval_response(...)

Ytterligare nya metoder (ingen direkt föregångare):

  • Content.from_text_reasoning(...) — För innehåll om resonemang/tänkande
  • Content.from_hosted_vector_store(...) — För referenser till vektorlager
  • Content.from_usage(...) — För användning/tokeninformation
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) — För MCP-serververktyg
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) — För kodtolkare
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) — För bildgenerering

Typkontroll

Använd egenskapen isinstance() i stället för type kontroller:

Before:

from agent_framework.core import TextContent, FunctionCallContent

if isinstance(content, TextContent):
    print(content.text)
elif isinstance(content, FunctionCallContent):
    print(content.name)

After:

from agent_framework.core import Content

if content.type == "text":
    print(content.text)
elif content.type == "function_call":
    print(content.name)

Grundläggande exempel

Before:

from agent_framework.core import TextContent, DataContent, UriContent

text = TextContent(text="Hello world")
data = DataContent(data=b"binary", media_type="application/octet-stream")
uri = UriContent(uri="https://example.com/image.png", media_type="image/png")

After:

from agent_framework.core import Content

text = Content.from_text("Hello world")
data = Content.from_data(data=b"binary", media_type="application/octet-stream")
uri = Content.from_uri(uri="https://example.com/image.png", media_type="image/png")

🔴 Anteckningstyper som är förenklade till Annotation och TextSpanRegion TypedDicts

PR:#3252

Ersatte klassbaserade anteckningstyper med enklare TypedDict definitioner.

Gammal typ Ny typ
CitationAnnotation (klass) Annotation (TypedDict med type="citation")
BaseAnnotation (klass) Annotation (TypedDict - en typ av ordbok i Python)
TextSpanRegion (klass med SerializationMixin) TextSpanRegion (TypedDict - en typ av ordbok i Python)
Annotations (typ alias) Annotation
AnnotatedRegions (typ alias) TextSpanRegion

Before:

from agent_framework import CitationAnnotation, TextSpanRegion

region = TextSpanRegion(start_index=0, end_index=25)
citation = CitationAnnotation(
    annotated_regions=[region],
    url="https://example.com/source",
    title="Source Title"
)

After:

from agent_framework import Annotation, TextSpanRegion

region: TextSpanRegion = {"start_index": 0, "end_index": 25}
citation: Annotation = {
    "type": "citation",
    "annotated_regions": [region],
    "url": "https://example.com/source",
    "title": "Source Title"
}

Anmärkning

Eftersom Annotation och TextSpanRegion är nu TypedDicts skapar du dem som ordlistor i stället för klassinstanser.


🔴 response_format valideringsfel som nu är synliga för användare

PR:#3274

ChatResponse.value och AgentResponse.value skickar nu ValidationError när schemaverifieringen misslyckas i stället för att returnera None.

Before:

response = await agent.run(query, options={"response_format": MySchema})
if response.value:  # Returns None on validation failure - no error details
    print(response.value.name)

After:

from pydantic import ValidationError

# Option 1: Catch validation errors
try:
    print(response.value.name)  # Raises ValidationError on failure
except ValidationError as e:
    print(f"Validation failed: {e}")

# Option 2: Safe parsing (returns None on failure)
if result := response.try_parse_value(MySchema):
    print(result.name)

🔴 AG-UI körningslogik förenklad; MCP- och Anthropic klientkorrigeringar

PR:#3322

Metodens run signatur och beteende i AG-UI har förenklats.

Before:

from agent_framework.ag_ui import AGUIEndpoint

endpoint = AGUIEndpoint(agent=agent)
result = await endpoint.run(
    request=request,
    run_config={"streaming": True, "timeout": 30}
)

After:

from agent_framework.ag_ui import AGUIEndpoint

endpoint = AGUIEndpoint(agent=agent)
result = await endpoint.run(
    request=request,
    streaming=True,
    timeout=30
)

🟡 Antropisk klient stöder response_format nu strukturerade utdata

PR:#3301

Nu kan du använda strukturerad utdataparsing med antropiska klienter via response_format, liknande OpenAI- och Azure-klienter.


🟡 Azure AI-konfiguration expanderad (reasoning, rai_config)

PR:#3403, #3265

Azure AI-stöd utökades med stöd för resonemangskonfiguration och rai_config när agenten skapades.


python-1.0.0b260116 (16 januari 2026)

Viktig information:python-1.0.0b260116

🔴 create_agent har bytt namn till as_agent

PR:#3249

Metoden har bytt namn för att få bättre klarhet i dess syfte.

Before:

from agent_framework.core import ChatClient

client = ChatClient(...)
agent = client.create_agent()

After:

from agent_framework.core import ChatClient

client = ChatClient(...)
agent = client.as_agent()

🔴 WorkflowOutputEvent.source_executor_id har bytt namn till executor_id

PR:#3166

Attributet har bytt namn för att bibehålla API-konsistens.

Before:

async for event in workflow.run_stream(...):
    if isinstance(event, WorkflowOutputEvent):
        executor = event.source_executor_id

After:

async for event in workflow.run_stream(...):
    if isinstance(event, WorkflowOutputEvent):
        executor = event.executor_id

🟡 AG-UI stöder tjänsthanterad sessionskontinuitet

PR:#3136

AG-UI bevarar nu tjänsthanterad konversationsidentitet (till exempel Foundry-hanterade sessioner/trådar) för att säkerställa kontinuitet över flera omgångar.


python-1.0.0b260114 (14 januari 2026)

Viktig information:python-1.0.0b260114

🔴 Orkestreringar omstrukturerade

PR:#3023

Omfattande refaktorisering och förenkling av orkestreringar i Agent Framework-arbetsflöden:

  • Gruppchatt: Dela upp orchestreringsverkställaren i dedikerade agentbaserade och funktionsbaserade (BaseGroupChatOrchestrator, GroupChatOrchestrator, AgentBasedGroupChatOrchestrator). Förenklad till stjärntopologi med sändningsmodell.
  • Överlämning: Stöd för enkel nivå, koordinator och anpassad exekverare har tagits bort. Har flyttats till sändningsmodellen med HandoffAgentExecutor.
  • Sekventiell och samtidig: Förenklad mekanism för information om förfrågningar för att förlita sig på underarbetsflöden via AgentApprovalExecutor och AgentRequestInfoExecutor.

Before:

from agent_framework.workflows import GroupChat, HandoffOrchestrator

# Group chat with custom coordinator
group = GroupChat(
    participants=[agent1, agent2],
    coordinator=my_coordinator
)

# Handoff with single tier
handoff = HandoffOrchestrator(
    agents=[agent1, agent2],
    tier="single"
)

After:

from agent_framework.workflows import (
    GroupChatOrchestrator,
    HandoffAgentExecutor,
    AgentApprovalExecutor
)

# Group chat with star topology
group = GroupChatOrchestrator(
    participants=[agent1, agent2]
)

# Handoff with executor-based approach
handoff = HandoffAgentExecutor(
    agents=[agent1, agent2]
)

🔴 Alternativ som introduceras som TypedDict och Generic

PR:#3140

Alternativ skrivs nu med TypedDict för bättre typsäkerhet och IDE-automatisk komplettering.

📖 Fullständiga migreringsinstruktioner finns i guiden För inskrivna alternativ.

Before:

response = await client.get_response(
    "Hello!",
    model_id="gpt-4",
    temperature=0.7,
    max_tokens=1000,
)

After:

response = await client.get_response(
    "Hello!",
    options={
        "model_id": "gpt-4",
        "temperature": 0.7,
        "max_tokens": 1000,
    },
)

🔴 display_name borttagen; context_provider till singular; middleware måste vara en lista

PR:#3139

  • display_name parametern har tagits bort från agenter
  • context_providers (plural, accepterande lista) ändras till context_provider (singular, endast 1 tillåten)
  • middleware kräver nu en lista (accepterar inte längre en enskild instans)
  • AggregateContextProvider har tagits bort från koden (använd exempelimplementering om det behövs)

Before:

from agent_framework.core import Agent, AggregateContextProvider

agent = Agent(
    name="my-agent",
    display_name="My Agent",
    context_providers=[provider1, provider2],
    middleware=my_middleware,  # single instance was allowed
)

aggregate = AggregateContextProvider([provider1, provider2])

After:

from agent_framework.core import Agent

# Only one context provider allowed; combine manually if needed
agent = Agent(
    name="my-agent",  # display_name removed
    context_provider=provider1,  # singular, only 1
    middleware=[my_middleware],  # must be a list now
)

# For multiple context providers, create your own aggregate
class MyAggregateProvider:
    def __init__(self, providers):
        self.providers = providers
    # ... implement aggregation logic

🔴 AgentRunResponse* har bytt namn till AgentResponse*

PR:#3207

AgentRunResponse och AgentRunResponseUpdate har bytt namn till AgentResponse och AgentResponseUpdate.

Before:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

After:

from agent_framework import AgentResponse, AgentResponseUpdate

🟡 Deklarativ arbetsflödeskörning har lagts till för YAML-definierade arbetsflöden

PR:#2815

En grafbaserad körning har lagts till för att köra deklarativa YAML-arbetsflöden, vilket möjliggör orkestrering med flera agenter utan anpassad körningskod.


🟡 Förbättringar av MCP-inläsning/tillförlitlighet

PR:#3154

MCP-integreringar förbättrade beteendet vid anslutningsförluster, stöd för sidindelning när data laddas in, och styralternativ för representation.


🟡 Foundry A2ATool stöder nu anslutningar utan en mål-URL

PR:#3127

A2ATool kan nu lösa Foundry-backade A2A-anslutningar via projektanslutningsmetadata även när en direkt mål-URL inte har konfigurerats.


python-1.0.0b260107 (7 januari 2026)

Viktig information:python-1.0.0b260107

Inga betydande ändringar i den här versionen.


python-1.0.0b260106 (6 januari 2026)

Viktig information:python-1.0.0b260106

Inga betydande ändringar i den här versionen.


Sammanfattningstabell

Lansering Versionsanteckningar Typ Förändring PR
post-1.0.0b260212 (oavsläppt) N/A 🔴 Bryta Chatt-/agentmeddelandeinmatning justerat: anpassade get_response() implementeringar måste acceptera Sequence[Message] #3920
post-1.0.0b260212 (oavsläppt) N/A 🔴 Bryta FunctionTool[Any] kompatibilitetsmellanlägg borttaget för schemaöverföring; använd FunctionTool med explicita scheman efter behov #3907
post-1.0.0b260212 (oavsläppt) N/A 🟡 Förbättring workflow.as_agent() injicerar InMemoryHistoryProvider("memory") som standard när kontextprovidrar inte är inställda #3918
1.0.0b260212 Notes 🔴 Bryta Hosted*Toolklasser har tagits bort; skapa värdbaserade verktyg via klientmetoder get_*_tool() #3634
1.0.0b260212 🔴 Bryta Pipeline för sessions-/kontextprovider slutförd: AgentThread borttagen, använd AgentSession + context_providers #3850
1.0.0b260212 🔴 Bryta Kontrollpunktsmodell/lagringsrefaktor (workflow_id borttagen, previous_checkpoint_id tillagd, lagringsbeteendet har ändrats) #3744
1.0.0b260212 🟡 Förbättring AzureOpenAIResponsesClient kan skapas från Foundry-projektslutpunkten eller AIProjectClient #3814
1.0.0b260212 🔴 Bryta Fortsättning av mellanprogram accepterar inte längre context; uppdatera call_next(context) till call_next() #3829
1.0.0b260210 Notes 🔴 Bryta send_responses() / send_responses_streaming() Bort; Använda workflow.run(responses=...) #3720
1.0.0b260210 🔴 Bryta SharedState State→ ; API:er för arbetsflödestillstånd är synkrona och kontrollpunktstillståndsfältet har bytt namn #3667
1.0.0b260210 🔴 Bryta Orkestreringsverktyg har flyttats till agent_framework.orchestrations paketet #3685
1.0.0b260210 🟡 Förbättring Bakgrundssvar och continuation_token understöd har lagts till i Python-agentsvar #3808
1.0.0b260210 🟡 Förbättring Typer av sessions-/kontextförhandsgranskning har lagts till sida vid sida (SessionContext, BaseContextProvider) #3763
1.0.0b260210 🟡 Förbättring Uppdateringar av strömmade kodtolkar innehåller nu inkrementella kodändringar #3775
1.0.0b260210 🟡 Förbättring @tool dekoratör lägger till explicit stöd för schemahantering #3734
1.0.0b260210 Notes 🔴 Bryta register_executor() / register_agent() borttaget från WorkflowBuilder; använd instanser direkt, hjälpmetoder för tillståndsisolering #3781
1.0.0b260210 🔴 Bryta ChatAgent AgentChatMessageMessage, RawChatAgentRawAgent, ChatClientProtocolSupportsChatGetResponse #3747
1.0.0b260210 🔴 Bryta Api-granskning av typer: Role/FinishReason typändringar, precisering av svar/uppdateringskonstruktor, namnbyte av hjälpare till from_updates, och borttagning av try_parse_value #3647
1.0.0b260210 🔴 Bryta API:er förenade kring run/get_response och ResponseStream #3379
1.0.0b260210 🔴 Bryta AgentRunContext har bytt namn till AgentContext #3714
1.0.0b260210 🔴 Bryta AgentProtocol har bytt namn till SupportsAgentRun #3717
1.0.0b260210 🔴 Bryta Parametern Middleware next har bytt namn till call_next #3735
1.0.0b260210 🔴 Bryta TypeVar-namngivning standardiserad (TNameNameT) #3770
1.0.0b260210 🔴 Bryta Arbetsflöde som agent för utdata/dataströmsbeteende i linje med aktuellt agentsvarsflöde #3649
1.0.0b260210 🔴 Bryta Fluent builder-metoder har flyttats till konstruktorparametrar i 6 byggverktyg #3693
1.0.0b260210 🔴 Bryta Arbetsflödeshändelser enhetligade till en enda WorkflowEvent med type som diskriminator; isinstance()event.type == "..." #3690
1.0.0b260130 Notes 🟡 Förbättring ChatOptions / ChatResponse / AgentResponse generiskt över svarsformat #3305
1.0.0b260130 🟡 Förbättring BaseAgent stöd har lagts till för Claude Agent SDK-integreringar #3509
1.0.0b260128 Notes 🔴 Bryta AIFunctionFunctionTool, @ai_function@tool #3413
1.0.0b260128 🔴 Bryta Fabriksmönster för GroupChat/Magentic; with_standard_managerwith_manager, participant_factoriesregister_participant #3224
1.0.0b260128 🔴 Bryta GithubGitHub #3486
1.0.0b260127 Notes 🟡 Förbättring BaseAgent stöd har lagts till för GitHub Copilot SDK-integreringar #3404
1.0.0b260123 Notes 🔴 Bryta Innehållstyper konsoliderade till en klass Content med classmethods #3252
1.0.0b260123 🔴 Bryta response_format verifieringsfel genereras nu ValidationError #3274
1.0.0b260123 🔴 Bryta AG-UI körningslogik förenklad #3322
1.0.0b260123 🟡 Förbättring Antropisk klient lägger till response_format stöd för strukturerade utdata #3301
1.0.0b260123 🟡 Förbättring Azure AI-konfiguration utökad med reasoning och rai_config stöd #3403, #3265
1.0.0b260116 Notes 🔴 Bryta create_agentas_agent #3249
1.0.0b260116 🔴 Bryta source_executor_idexecutor_id #3166
1.0.0b260116 🟡 Förbättring AG-UI stöder tjänsthanterad session/trådkontinuitet #3136
1.0.0b260114 Notes 🔴 Bryta Orkestreringar omstrukturerade (Gruppchatt, Överlämning, Sekventiell, Samtidig) #3023
1.0.0b260114 🔴 Bryta Alternativ som TypedDict och Generic #3140
1.0.0b260114 🔴 Bryta display_name borttagen; context_providerscontext_provider (singular); middleware måste vara en lista #3139
1.0.0b260114 🔴 Bryta AgentRunResponse / AgentRunResponseUpdate har bytt namn till AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 🟡 Förbättring Deklarativ arbetsflödeskörning har lagts till för YAML-definierade arbetsflöden #2815
1.0.0b260114 🟡 Förbättring FÖRBÄTTRINGAR av MCP-inläsning/tillförlitlighet (hantering av anslutningsförlust, sidnumrering, representationskontroller) #3154
1.0.0b260114 🟡 Förbättring Foundry A2ATool stöder anslutningar utan explicit mål-URL #3127
1.0.0b260107 Notes Inga betydande ändringar
1.0.0b260106 Notes Inga betydande ändringar

Nästa steg