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 spårar betydande Python ändringar i alla 2026-versioner, så se det när du uppgraderar mellan versioner 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.


Ej släppt

🔴 Foundry Invocations använder som standard JSON och inramad SSE

PR:#8894

InvocationsHostServer returnerar nu lyckade svar utan strömning i formatet {"response": "..."} i stället för ren text. Direktuppspelning använder nu inramade server-skickade händelser: delta för textuppdateringar, done efter att det slutliga svaret har slutförts och AgentSession sparats och error för fel. En ström kan generera delta före ett fel, så behandla done, inte ett delta, som lyckat slutförande.

Uppdatera klienter för att parsa JSON och SSE. Det session_id i en done-händelse är plattformens sandbox-rutt-ID, inte det serialiserade AgentSession.session_id. Begäranden inom samma session serialiseras endast inom en värdprocess, och en konflikt i tillståndet mellan processer kan fortfarande uppstå efter effekter från externa verktyg.

Befintliga anropare kan tillfälligt ange legacy_wire_format=True för att bevara det tidigare oformaterade svaret och den råa strömmen av textsegment. Kompatibilitetsläget är föråldrat och returnerar inte felmeddelanden som om de vore lyckad text. Applikationer kan också acceptera anpassade nyttolaster med parse_request som returnerar InvocationRun och filtrera anroparalternativ med prepare_options; värden validerar reserverade kontroller efter hooken. Mer information finns i Foundry Hosted Agents.


🔴 Objektattribut för deklarativt arbetsflöde kräver säkra namn

PR:#8893

Python fristående WorkflowState och fabriksskapade deklarativa arbetsflödestillstånd använder nu samma princip för objektattribut. När en punkt noterad sökväg passerar ett Python objekt måste varje attributsegment matcha [A-Za-z][A-Za-z0-9_]*. Ett osäkert segment, till exempel _private, display-nameeller ett värde med avslutande blanksteg, returnerar uppslagsstandarden utan att komma åt attributet.

Ordlistenycklarna är oförändrade. Läser till exempel Local.obj._private inte längre ett objektattribut, men Local.bag._private läser "_private" fortfarande nyckeln när Local.bag är en ordlista. Exponera offentliga objektattribut som matchar det mönster som stöds eller lagra oregelbundna namn, inklusive UUID:er och avstavade värden, som ordlistenycklar. Mer information finns i Objektattributsökvägar.


🔴 Värdtjänsten för Foundry Responses separerar historik, lagring och bakgrundskörning

PR:#8794

ResponsesHostServer behandlar nu anroparens fält, det yttre svarsarkivet store , modellhistoriken och den providerbaserade bakgrundskörningen som separata alternativ. Byt namn på konstruktorns store= argument till response_store=. Det gamla namnet är fortfarande ett inaktuellt alias och anger inte anroparens lagringsbeteende per begäran.

Granska din history_source konfiguration. "agent_server" Standardläget rekonstruerar den yttre svarsavskriften och inaktiverar nedströmslagring. Använd "service" för att fortsätta en privat session för lagringsprovider, eller "agent" för att behålla en agentägd historikprovider eller standard för underordnad lagring. Begäranden med store=false skriver inte längre värdhanterat tillstånd eller historik för nedströmstjänster.

Leverantörsbaserad bakgrundspollning kräver nu history_source="service" och background_source="provider". Styrningen är tillfälligt otillgänglig och aktiverar steerable_conversations höjningar RuntimeError under värdbygget. Mer information om migrering och konfiguration finns i Foundry Hosted Agents.


🔴 Gemini använder GOOGLE_* inställningar och lägger till Inbäddning 2

PR:#8798

GeminiChatClient läser inte längre GEMINI_API_KEY eller GEMINI_MODEL, och exporten av GeminiSettings tas bort. Byt namn på konfigurationen till GOOGLE_API_KEY och GOOGLE_MODELeller skicka värdena explicit. Konfigurera inbäddningar med GOOGLE_EMBEDDING_MODEL.

Den nya GeminiEmbeddingClient standardinställningen är gemini-embedding-2. Inbäddningsanrop för text kräver en explicit aktivitetstyp, till exempel RETRIEVAL_DOCUMENT för indexering och RETRIEVAL_QUERY för sökning. Vektor-upserts, sökningar och genererade sökverktyg accepterar nu inbäddningsalternativ per åtgärd, medan vektorfältdimensioner förblir auktoritativa.

Konfiguration och exempel finns i Google Gemini - och Vector Store-integreringar.


🔴 Foundry-anropssessioner använder nu beständig lagring

PR:#8593

InvocationsHostServer sparar nu det serialiserade tillståndet för AgentSession via AgentSessionStoreProvider i stället för att behålla godtyckliga aktiva sessionsobjekt under processens livstid. Standardprovidern använder Foundry-lagring vid drift i värdmiljö och filbaserad lagring lokalt, med en separat invocation_sessions logisk lagringsplats.

Gör anpassade sessionstillstånd serialiserbara och registrera codecs för anpassade typer med register_state_type(). Återställt tillstånd bevarar inte Python objektidentitet. Nya standarddatala ger låter sessioner löpa ut 30 dagar efter senaste skrivtillfället; anpassade leverantörer styr lagringstiden. Samordna överlappande begäranden för samma session och använd separata lokala lagringsrötter eller leverantörer för oberoende program. Mer information finns i Foundry Hosted Agents.


🔴 Godkännanden för lokala verktyg kräver sessionen som utfärdar dem

PR:#8750

En lokal function_approval_response auktoriserar nu endast ett verktygsanrop när det matchar en väntande godkännandebegäran som registrerats i samma auktoritativa AgentSession. Överför samma session till den körning som genererar godkännandebegäran och den körning som återupptar begäran. Utan den sessionen släpper ramverket det obundna svaret och loggar en varning.

Drifthanterade godkännanden och omspelade konversationer vars verktygsanrop redan har slutgiltiga resultat är oförändrade. Ange disable_approval_response_binding=True endast när programmet tillämpar motsvarande bindning innan meddelanden når agenten. Det rekommenderade sessionsbaserade flödet finns i Verktygsgodkännande.


🔴 Beständiga godkännandeavskrifter måste använda typerade godkännandekontroller

PR:#8579

Python behandlar nu alla matchade function_result som terminaler, oavsett text. Ett resultat som innehåller [APPROVAL_PENDING] representerar inte längre ett väntande godkännande och kan inte hålla godkännandebehörigheten uppspelningsbar.

Om programmet lagrar eller manuellt återspelar tillståndslösa transkript, tar du bort syntetiskt väntande function_result-innehåll. Representera väntande arbete med ett definitivt vänteläge och typade function_approval_request-kontroller. Behåll faktiska slutförda funktionsresultat i historiken, även när deras text råkar innehålla [APPROVAL_PENDING].


🔴 MCP-körningskontext och godkännandehuvuden är nu avgränsade

PR:#8589

Genererade Python MCP-verktygsanrop ger header_provider nu endast nyckelordsargument för betrodd värdkörning. Verktygsargument som tillhandahålls av modellen förs inte längre vidare till leverantören, även när namnen krockar. Flytta rubrikindata till function_invocation_kwargs, en leverantörsstängning eller en ContextVar. Om verktyget ansluts innan en körning tillhandahåller körningsvärden använder du en closure eller en annan källa vid konstruktionstillfället.

Deklarativ InvokeAzureAgent-körning kopierar inte längre det omgivande arbetsflödet och klientens samling med nyckelord till additional_function_arguments. Skicka verktygsargument explicit i agentalternativ när verktyget behöver dem.

För deklarativa InvokeMcpTool åtgärder som kräver godkännande kopplar körtiden nu de utvärderade rubrikerna till godkännandet. Ändrade autentiseringsuppgifter, ändrade huvuden, äldre obundna godkännanden eller verifieringstillstånd som saknas skapar en begäran om ersättningsgodkännande med ett nytt begärande-ID innan det skickas. Hantera ersättningsbegäran och skydda lagring av kontrollpunkter för arbetsflöden. Mer information finns i lokal MCP-autentisering och deklarativa MCP-verktyg.


🔴 Det deklarativa PowerFx-tillståndet avvisar cykler och upprätthåller traverseringsgränser

PR:#8511

Python deklarativa arbetsflöden avvisar nu cykliskt tillstånd och tillämpar fasta gränser för varje tillståndsbläddering: djup 64 med roten på djup 0, 10 000 besökta värden och 1 048 576 aggregerade strängtecken och binära byte. Upprepade referenser och alias räknas varje gång. Överträdelser utlöser ValueError vid skrivning av tillstånd, ögonblicksbilder eller konvertering till PowerFx.

Ta bort cykler och minska eller dela upp överdimensionerade värden innan du skriver dem till arbetsflödestillstånd. Tillämpa separata gränser för körning av PowerFx-uttryck och programdefinierade hookar för kopiering eller konvertering, eftersom traverseringsgränserna inte begränsar dessa. Mer information finns i Begränsningar för powerFx-tillståndsbläddering.


🔴 HTTP-begäranden för arbetsflöden kräver absoluta HTTP(S)-URL:er

PR:#8588

DefaultHttpRequestHandler Python avvisar nu relativa url:er och url:er som inte är HTTP(S). Den normaliserar URL:en och skriver frågan innan den anropar client_provider. Providern tar emot den sammansatta URL:en i info.url och en tom info.query_parameters. Befintlig URL-frågeordning och byte bevaras, standardvärden för valda klienter gäller fortfarande och omdirigeringar förblir klientstyrda.

Använd absoluta URL:er för HTTP- eller HTTPS-arbetsflöden. Uppdatera leverantörerna så att de inspekterar info.url i stället för att läsa info.query_parameters, och konfigurera standardvärden och omdirigeringsbeteende på den returnerade httpx.AsyncClient. Mer information finns i HttpRequestAction.


🔴 Lab installeras separat och Foundry stöder Projekt 2.6

PR:#8188

agent-framework och agent-framework-core[all] installerar inte längre det experimentella agent-framework-lab-paketet. Installera varje labbmodul uttryckligen.

pip install "agent-framework-lab[gaia]"
pip install "agent-framework-lab[tau2]"
pip install "agent-framework-lab[lightning]"

Lab löser nu sina experimentella beroenden oberoende av släppta Agent Framework-paket. Paketet agent-framework-foundry stöder azure-ai-projects>=2.2.0,<2.7.0 och använder en OpenAI 3-kompatibel agent-framework-openai version. Med den här separationen kan Foundry-program använda Azure AI Projects 2.4 till 2.6 utan att åsidosätta Labs OpenAI 2-kompatibla beroendebegränsningar.


🔴 GitHub Copilot filhooks för arbetsytor är valfria

PR:#7517

GitHubCopilotAgent läses inte längre in .github/hooks/ från arbetskatalogen som standard. Aktivera endast hookar för en arbetskatalog som du har förtroende för.

from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

agent = GitHubCopilotAgent(
    default_options=GitHubCopilotOptions(enable_file_hooks=True),
)

Filhooks kör kommandon på värdsystemet och omfattas inte av on_permission_request eller andra återanrop för godkännande av verktyg. När det finns hookar och du utelämnar enable_file_hooks, använder agenten False som standard och loggar en varning endast en gång. Att uttryckligen ange enable_file_hooks=False inaktiverar hooks utan den varningen. Konfigurationsvägledning finns i Kontrollera filkrokar för arbetsytor.


🔴 Filbaserad lagring använder normalisering av delad sökväg

PR:#8123

Filstödda sessioner, minne och att göra-lagring härleder nu mappnamn via en mappning med delad lagringsnyckel. ID:er och omfång som innehåller versaler, sökvägsavgränsare, Unicode eller andra osäkra tecken kan peka på en annan plats efter en uppgradering.

Befintliga data flyttas inte automatiskt. Om du behöver bevara den migrerar du de gamla filerna eller katalogerna till den nyligen härledda platsen. Behandla FileMemoryProvider.scope som en ogenomskinlig namnområdesnyckel, inte som en kapslad sökväg. Till exempel motsvarar tenants/alice en kodad mapp.

TodoFileStore använder den delade mappningen för ägar-ID:t, men den avvisar sessions-ID:t som innehåller / eller \. Kanonisera dessa sessions-ID:n innan du migrerar todo-data.


🔴 SecretString ärver inte längre från str

PR:#8127

SecretString maskerar nu strängkonvertering, formatering och sammanfogning. API:er som kräver en faktisk str, inklusive JSON-serialisering, accepterar inte längre omslutningen implicit. Extrahera värdet explicit vid gränsen som kräver autentiseringsuppgifterna:

Before:

payload = json.dumps({"api_key": secret})

After:

payload = json.dumps({"api_key": secret.get_secret_value()})

Det extraherade värdet är en vanlig sträng och skyddas inte längre från oavsiktlig loggning eller formatering.


🔴 Indata för mellanprogram kräver en sekvens och Agent Hooks installeras separat

PR:#7918

Agentkonstruktorer, mellanprogramsindata per körning och create_harness_agent() accepterar inte längre ett enda mellanprogramsvärde. Skicka mellanprogram som en sekvens. Ett Agent Hooks-paket stöds fortfarande som ett element i den sekvensen.

agent-framework-core[agent-hooks]-tillägget tas bort. Installera agent-hooks-sdk direkt.

Before:

agent = Agent(client=client, middleware=hooks)

After:

pip install agent-hooks-sdk
agent = Agent(client=client, middleware=[hooks])

python-1.16.0 (27 augusti 2026)

Viktig information:python-1.16.0

🟡 Programmatisk konfiguration av OpenTelemetry-provider

PR:#7703

configure_otel_providers() accepterar nu tjänstmetadata, resursattribut och OTLP-exportörsalternativ direkt. Explicita tjänstmetadata har företräde framför miljövärden. Resursattribut sammanfogas över miljöattribut. Signalspecifika OTLP-slutpunkter och rubrikvariabler förblir mer specifika än grundläggande programmatiska inställningar.


python-1.15.0 (21 augusti 2026)

Viktig information:python-1.15.0

🔴 Semantiska konventioner för OpenTelemetry GenAI samlade

PR:#7673

Agent Framework använder nu de senaste experimentella GenAI-span-attributen som standard, inklusive gen_ai.provider.name i stället för gen_ai.system. Ange ett värde för OTEL_SEMCONV_STABILITY_OPT_IN som utelämnar den skiftlägeskänsliga token gen_ai_latest_experimental för att välja v1.36-spanattribut. V1.36-meddelandet och alternativhändelserna väljs oberoende av varandra, förblir aktiverade som standard när känsliga data samlas in och fortsätter att använda gen_ai.system. Ställ in ENABLE_MESSAGE_EVENTS=false för att undertrycka dem.


🟡 Funktionsmellanprogram kan avbrytas med MiddlewareFailure

PR:#7562

Middleware för funktioner kan utlösa MiddlewareFailure när körningen måste avbrytas i stället för att resultera i ett återställningsbart verktygsfel. Funktionsanropsloopen vidarebefordrar detta undantag till anroparen och avbryter pågående parallella verktygsanrop. Fånga inte det här undantaget i mellanprogram eftersom det gör att körningen kan fortsätta.

Mellanprogram för agenter och chatt vidarebefordrar redan vanliga undantag. Använd MiddlewareFailure när funktionens mellanprogram specifikt behöver allvarligt, felslutet beteende.


python-1.14.0 (14 augusti 2026)

Viktig information:python-1.14.0

🟡 Krypterat resonemang anmäler sig till Foundry-chatten

PR:#7536

FoundryChatClient inte längre begär reasoning.encrypted_content som standard. Standardvärdet undviker fel på modeller som inte stöds. För kompatibla distributioner väljer du med default_options={"include": ["reasoning.encrypted_content"]}.


🔴 [Beta] Tillståndet för Foundry Hosted Agent flyttas till Foundry State Store

PR:#7533

PR #7533 tar bort FoundrySessionStore(path) från beta-agent-framework-foundry-hosting-paketet. Värden använder nu FoundryAgentSessionStore och standardvärden som stöds av Foundry State Store för agentsessioner, kontrollpunkter för arbetsflöden och funktionsgodkännanden.

  • Ta bort import och konstruktion av FoundrySessionStore.
  • Låt ResponsesHostServer skapa standardleverantörerna. För anpassad lagring anger du agent_session_store_provider, checkpoint_store_provider eller function_approval_store_provider.
  • Befintligt filbackat tillstånd migreras inte automatiskt.

För den aktuella leverantörsmodellen, se Bevara tillstånd och hantera långvariga konversationer.


🔴 Skapa funktionella arbetsflödesdefinitioner innan du kör dem

PR:#7521

PR #7521 ändrar @workflow så att den returnerar en tillståndslös FunctionalWorkflowDefinition. Anropa .build() för att skapa en tillståndskänslig FunctionalWorkflow. Skapa arbetsflödet innan du anropar .run() eller .as_agent()och skicka kontrollpunktslagring till .build().

Before:

@workflow(checkpoint_storage=storage)
async def pipeline(data: str) -> str:
    return await process(data)

result = await pipeline.run("input")
agent = pipeline.as_agent()

After:

@workflow
async def pipeline(data: str) -> str:
    return await process(data)

workflow_instance = pipeline.build(checkpoint_storage=storage)
result = await workflow_instance.run("input")
agent = workflow_instance.as_agent()

Skapa en separat arbetsflödesinstans för varje logisk anropare eller session så att körnings- och återspelningstillståndet förblir isolerat.


🟡 Agent Hooks lägger till ett fail-closed-kontrakt för avlyssning

PR:#7515

Agent Framework lägger till experimentellt stöd för AGENT-HOOKS-0.1-kontraktet via create_agent_hooks_middleware() och create_agent_hooks_middleware_from_emitter(). Middleware-paketet omfattar intercepteringspunkter för agenter, modeller och funktioner med fail-closed-verkställighet av beslut, återskrivning av transformationer, buffrad strömning och beslutsstyrd persistens.

För det aktuella paketet och mellanprogramskontraktet installerar du agent-hooks-sdk direkt och skickar det returnerade paketet i en sekvens, till exempel middleware=[hooks]. Mer information finns under Agent hooks.


python-1.8.0 (4 juni 2026)

Viktig information:python-1.8.0

🔴 github-copilot-sdk uppgraderad till v1.0.0 med icke-bakåtkompatibla API-ändringar

PR:#6292

PR #6292 uppgraderar agent-framework-github-copilot från github-copilot-sdk 1.0.0b2 till den stabila utgåvan 1.0.0 och anpassar sig till alla brytande API-ändringar som införts i GA-versionen.

  • SubprocessConfig borttagen — använd RuntimeConnection.for_stdio(path=...) + namngivna argument i CopilotClient (connection, log_level, base_directory).
  • Importera sökvägar som flyttats – copilot.generated.session_events → copilot.session_events.
  • Inställningarna har bytt namn – copilot_home → base_directory; miljövariabeln är nu GITHUB_COPILOT_BASE_DIRECTORY (var GITHUB_COPILOT_COPILOT_HOME).
  • Behörighetshanterare – använd konkreta beslutstyper PermissionRequestResult(kind=...)i stället för . Den inbyggda PermissionHandler.approve_all ersätter manuella godkännandemönster.
  • Standardhanteraren för avslag – returnerar nu PermissionDecisionUserNotAvailable() (i enlighet med SDK:ns fallback-beteende).
  • Behörighetshanterartyp — stöder nu både synkrona och asynkrona återanrop (Callable[..., PermissionRequestResult | Awaitable[PermissionRequestResult]]).

Before:

from copilot import CopilotClient, SubprocessConfig
from copilot.generated.session_events import PermissionRequest
from copilot.session import PermissionRequestResult

# Client construction
client = CopilotClient(SubprocessConfig(cli_path="/path/to/cli", log_level="debug", copilot_home="/custom/home"))

# Permission handler
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
    if request.kind == "shell":
        return PermissionRequestResult(kind="approved")
    return PermissionRequestResult(kind="denied-interactively-by-user")

# Agent
agent = GitHubCopilotAgent(default_options={"copilot_home": "/custom/home", "on_permission_request": approve_shell})

After:

from copilot import CopilotClient, RuntimeConnection
from copilot.generated.rpc import PermissionDecisionDeniedInteractivelyByUser, PermissionDecisionUserNotAvailable
from copilot.session import PermissionHandler, PermissionRequestResult
from copilot.session_events import PermissionRequest

# Client construction
client = CopilotClient(connection=RuntimeConnection.for_stdio(path="/path/to/cli"), log_level="debug", base_directory="/custom/home")

# Permission handler — use concrete decision types or PermissionHandler.approve_all
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
    if request.kind == "shell":
        return PermissionHandler.approve_all(request, context)
    return PermissionDecisionUserNotAvailable()

# Agent
agent = GitHubCopilotAgent(default_options={"base_directory": "/custom/home", "on_permission_request": approve_shell})

🟡 Gradvis visning av verktyg via FunctionInvocationContext

PR:#6233

Lägger till stöd för att gradvis exponera verktyg under en körning med hjälp av FunctionInvocationContext. Verktyg kan nu läggas till eller tas bort dynamiskt baserat på tidigare verktygsresultat inom samma agentkörning.

Fullständig dokumentation, inklusive mönster, varningar och verktygsordningsexempel, finns i Kontrollera verktygets tillgänglighet.


🟡 MCP-baserad kompetensidentifiering (McpSkillsSource)

PR:#6169

Lägger till McpSkillsSource till agent-framework-core, vilket möjliggör upptäckt och laddning av färdigheter via MCP-servrar.


🟡 Inbyggt stöd i Bedrock för strukturerad utdata via Converse API

PR:#6052

agent-framework-bedrock implementerar nu inbyggt strukturerat utdatastöd via API:et AWS Bedrock Converse, vilket gör det möjligt response_format att arbeta med Bedrock-modeller.


🟡 Foundry Adaptive Evals-integration (generering av bedömningsmall)

PR:#6101

Lägger till integration med Foundry Adaptive Evals i agent-framework-foundry för automatiserad generering av bedömningskriterier i utvärderingsarbetsflöden.


🟡 Mistral AI-inbäddningsklientpaket

PR:#5480

Nytt agent-framework-mistral paket som tillhandahåller en Mistral AI-inbäddningsklient.


🟡 agent-framework-declarative uppflyttad till release-kandidat

PR:#6256

agent-framework-declarative-paketet flyttas upp från betastadiet till release candidate-stadiet.


python-1.7.0 (28 maj 2026)

Viktig information:python-1.7.0

🔴 Deklarativ: borttagna Python-åtgärder och alias-typer omdöpta till C#-standardnamn

PR:#6126

PR #6126 tar bort deklarativa åtgärder som är unika för Python och byter namn på aliastyper så att de matchar de kanoniska namnen i C# för enhetlighet mellan språk.

  • De deklarativa åtgärdstyper som endast finns i Python och som inte hade någon C#-motsvarighet tas bort.
  • Åtgärdsaliastyperna är nu anpassade till namngivningskonventionerna för C#. uppdatera befintliga deklarativa YAML/JSON-filer i enlighet med detta.

🟡 HarnessAgent och bakgrundsagenter och Harness-provider

PR:#6041, #6069

Lägger till HarnessAgent till agent-framework-core, vilket möjliggör agentmönster med stöd av harness för bakgrundsbearbetning.


🟡 A2AAgentSession med refererade aktivitets-ID och support där inmatning krävs

PR:#5980

Lägger till A2AAgentSession i agent-framework-a2a och agent-framework-core, med stöd för refererade uppgifts-ID:n och flöden som kräver indata för interaktioner enligt A2A-protokollet.


🟡 Experimentell prompt-agent-konvertering och distributions-API:er

PR:#5959

Lägger till experimentella API:er för att agent-framework-foundry konvertera promptdefinitioner till agenter och distribuera dem programmatiskt.


python-1.6.0 (21 maj 2026)

Viktig information:python-1.6.0

🔴 Instrumentation aktiverad som standard

PR:#5865

PR #5865 aktiverar OpenTelemetry-instrumentation som standard i agent-framework-core och agent-framework-foundry.

  • Agentkörningar genererar nu telemetriintervall automatiskt utan explicit anmälning.
  • Om du tidigare har inaktiverat instrumentation eller har anpassade telemetripipelines kontrollerar du att standardbeteendet inte står i konflikt.
  • Om du vill inaktivera anger du enable_instrumentation=False där det är tillämpligt.

Before:

from agent_framework import Agent
from agent_framework.observability import configure_otel_providers

# Had to explicitly enable instrumentation
configure_otel_providers(enable_console_exporters=True)

agent = Agent(client=client, enable_instrumentation=True)

After:

from agent_framework import Agent

# Instrumentation is now on by default — no opt-in needed
agent = Agent(client=client)

# To explicitly disable:
agent = Agent(client=client, enable_instrumentation=False)

🟡 Shell-verktyg med stöd för lokal körning och Docker-körning

PR:#5664

Lägger till ett inbyggt skalverktyg i agent-framework-core som stöder både lokal körning och Docker-baserad körning i sandlåda.


🟡 Nytt agent-framework-monty CodeAct-providerpaket

PR:#5915

Introducerar agent-framework-monty-paketet för Monty-baserade CodeAct-integrationer (alfastadiet).


python-1.4.0 (14 maj 2026)

Viktig information:python-1.4.0

🔴 [Experimentellt Skills API] Anpassa upptäckt av mappar för fil-skill så att den överensstämmer med specifikationen för agentskills.io

PR:#5807

PR #5807 uppdaterar API:et för experimentella färdigheter för att justera identifieringen av filbaserade kunskapsmappar med agentskills.io specifikationen.

  • Logiken för upplösning av kompetensmappar har ändrats; uppdatera anpassade katalogstrukturer för färdigheter om du använder det experimentella skills-API:et.

🔴 [API för experimentella färdigheter] Extrahera metadata för kunskapsspecifikation till SkillFrontmatter

PR:#5775

PR #5775 flyttar metadata för kunskapsspecifikation till en dedikerad SkillFrontmatter dataklass.

  • Om du har direkt åtkomst till kunskapsmetadatafält uppdaterar du referenser för att använda SkillFrontmatter attribut.

🔴 DevUI: Skärpa standardåtkomstkontroller och CORS-hållning

PR:#5740

PR #5740 stramar åt standardåtkomstkontrollen och CORS-konfigurationen för agent-framework-devui.

  • Standardinställda CORS-ursprung är nu mer restriktiva.
  • Om din DevUI-konfiguration är beroende av åtkomst över ursprungsgränser från anpassade domäner, konfigurera uttryckligen vilka ursprung som tillåts.

🔴 A2A: Migrera till a2a-sdk v1.0

PR:#5752

PR #5752 migrerar agent-framework-a2a till a2a-sdk v1.0.

  • A2A-protokolltyperna och transport-API:erna följer a2a-sdk 1.0-konventionerna.
  • Uppdatera all kod som interagerar direkt med A2A-protokolltyper.

🟡 AG-UI: kanal för visning av verktygsresultat och uppgradering till release candidate

PR:#5762, #5844

Lägger till visningskanal för verktygsresultat till agent-framework-ag-ui och flyttar paketet till release candidate-stadiet.


python-1.3.0 (7 maj 2026)

Viktig information:python-1.3.0

🔴 [API för experimentella färdigheter] Omstrukturera agentkunskaper till arkitektur med flera källor

PR:#5584

PR #5584 omstrukturerar API:et för experimentella skills för att stödja inläsning av skills från flera källor.

  • Kunskapsregistrerings- och identifieringslogik har ändrats för funktionen för experimentella färdigheter.
  • Om du använder API:et för experimentella kunskaper läser du igenom de nya inläsningskonventionerna för flera källor.

🟡 ClassSkill för klassbaserade kunskapsdefinitioner

PR:#5678

Lägger ClassSkill till agent-framework-core för klassbaserade kunskapsdefinitioner med deklarativa metadata och automatisk metodidentifiering.


🟡 Informationsflödeskontroll– skydd för snabbinmatning

PR:#5331

Lägger till en mekanism för kontroll av informationsflöde i agent-framework-core som hjälper till att skydda mot promptinjektionsattacker.


🟡 github-copilot-sdk uppgraderad till v1.0.0b2

PR:#5665

Uppgraderar agent-framework-github-copilot till github-copilot-sdk>=1.0.0b2, lägger till instruction_directories, copilot_home-konfiguration och vidarebefordran av körningsalternativ vid återupptagning av session.


🟡 Tvinga approval_mode i Claude- och GitHub Copilot-agenter

PR:#5562

agent-framework-claude och agent-framework-github-copilot kräver nu dekoratören approval_mode för funktionsverktyg, i linje med andra agentimplementeringar.


🟡 stöd för val av verktyg i OpenAI och Gemini allowed_tools

PR:#5322

Lägger till stöd för allowed_tools verktygsval i agent-framework-openai, så att du kan begränsa vilka verktyg modellen kan anropa.


python-1.2.2 (29 april 2026)

Viktig information:python-1.2.2

🔴 Orkestreringsterminalutdata standardiserade som AgentResponse

PR:#5301

PR #5301 standardiserar utdata från orkestreringsterminalen till AgentResponse så att Workflow.as_agent() endast returnerar det slutliga svaret.

  • Sekventiella godkännandeflöden (with_request_info) och samtidiga (intermediate_outputs=True) flöden följer nu samma utdatakontrakt.
  • Om du använder orkestreringsresultat direkt kan du förvänta dig AgentResponse objekt i stället för råtext eller blandade typer.

Before:

# Orchestration returned mixed types (raw strings, dicts, etc.)
result = await workflow.as_agent().run("Draft a report")
text = str(result)  # had to handle various types

After:

# Orchestration now always returns AgentResponse
result = await workflow.as_agent().run("Draft a report")
text = result.text  # consistent AgentResponse API

🟡 Azure AI Content Understanding-kontextprovider

PR:#4829

Nytt alfapaket agent-framework-azure-contentunderstanding – analyserar bifogade filer automatiskt (dokument, bilder, ljud, video) och matar in strukturerade resultat i LLM-kontexten.


🟡 Stöd för varaktiga arbetsflöden via Foundry-hosting

PR:#5531

Lägger till stöd för värdbaserat varaktigt arbetsflöde i agent-framework-foundry-hostingoch sprider fullständig konversationshistorik till arbetsflödesagenter.


python-1.1.0 (21 april 2026)

Viktig information:python-1.1.0

🔴 CosmosCheckpointStorage begränsad pickle-deserialisering som standard

PR:#5200

CosmosCheckpointStorage använder nu begränsad pickle-deserialisering som standard, i linje med beteendet i FileCheckpointStorage.

  • Om dina kontrollpunkter innehåller programdefinierade typer skickar du dem via allowed_checkpoint_types=["my_app.models:MyState"].
  • Utan detta kommer deserialisering av anpassade typer att generera WorkflowCheckpointException.

Before:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

storage = CosmosCheckpointStorage(endpoint=endpoint, database="mydb", container="checkpoints")

After:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

storage = CosmosCheckpointStorage(
    endpoint=endpoint,
    database="mydb",
    container="checkpoints",
    allowed_checkpoint_types=["my_app.models:MyState"],
)

🟡 GeminiChatClient har lagts till

PR:#4847

Nytt agent-framework-gemini paket med GeminiChatClient stöd för Google Gemini API och Vertex AI.


🟡 Hyperlight CodeAct-paket

PR:#5185

Nytt agent-framework-hyperlight paket för Hyperlight-baserad KodAct-kodkörning i begränsat läge.


🟡 Stöd för Foundry Toolboxes

PR:#5346

Lägger till stöd för Foundry Toolboxes i agent-framework-foundry, vilket aktiverar konfigurationer av hanterade verktyg från Azure AI Foundry.


🟡 finish_reason på AgentResponse och AgentResponseUpdate

PR:#5211

Lägger finish_reason till fält i AgentResponse och AgentResponseUpdate, så att konsumenterna kan kontrollera varför modellen slutade generera.


🟡 Stöd för värdbaserad agent V2 i Foundry

PR:#5379

Lägger till stöd för värdbaserad agent V2 i agent-framework-foundry för de senaste funktionerna i Foundry-agenttjänsten.


python-1.0.1 (9 april 2026)

Viktig information:python-1.0.1

🔴 FileCheckpointStorage begränsad deserialisering av pickle (säkerhetshärdning)

PR:#4941

Deserialisering av checkpoints sker nu som standard via en begränsad avpicklare, som endast tillåter en inbyggd uppsättning säkra Python-typer och alla agent_framework-ramverkstyper.

  • Om ditt program lagrar anpassade typer i kontrollpunkter skickar du deras "module:qualname" identifierare via den nya allowed_checkpoint_types konstruktorparametern – annars ökar WorkflowCheckpointExceptionbelastningen .
  • Mer information finns i Säkerhetsöverväganden .

Before:

from agent_framework.workflows import FileCheckpointStorage

storage = FileCheckpointStorage(directory="./checkpoints")

After:

from agent_framework import FileCheckpointStorage

storage = FileCheckpointStorage(
    directory="./checkpoints",
    allowed_checkpoint_types=["my_app.models:MyState", "my_app.models:TaskResult"],
)

🔴 Korrigering av arbetsflödeskontexthantering för överlämning

PR:#5136

PR #5136 åtgärdar hantering av arbetsflödeskontexter för överlämning. Det här är en ändring i beteende – agenter för överlämning bibehåller nu korrekt isolerat sammanhang vid övergångar.


🟡 Cosmos DB NoSQL kontrollpunktslagring för arbetsflöden

PR:#4916

Nytt agent-framework-azure-cosmos-paket som tillhandahåller Cosmos DB NoSQL-backad kontrollpunktslagring för Python arbetsflöden.


python-1.0.0 (2 april 2026)

Viktig information:python-1.0.0

Det här avsnittet innehåller viktiga Python-ändringar som landade efter python-1.0.0rc6 och nu är en del av python-1.0.0.

🔴 Message(..., text=...) byggnationen är nu helt borttagen

PR:#5062

PR #5062 slutför den tidigare upprensningen av Python meddelandemodellen genom att ta bort de sista kodsökvägarna på ramverkssidan som fortfarande konstruerar Message-objekt med text=....

  • Skapa textmeddelanden som Message(role="user", contents=["Hello"]) i stället för Message(role="user", text="Hello").
  • Detta gäller var du än skapar meddelanden direkt, inklusive arbetsflödesbegäranden, anpassade mellanprogramsvar, orkestreringshjälpare och migreringskod.
  • Oformaterade strängar inuti contents=[...] normaliseras fortfarande till textinnehåll automatiskt, så contents=["Hello"] förblir det enklaste formuläret med endast text.

Before:

message = Message(role="assistant", text="Hello")

After:

message = Message(role="assistant", contents=["Hello"])

🟡 Utgivna Python-paket kräver inte längre --pre

PR:#5062

PR #5062 höjer upp de viktigaste Python-paketen till 1.0.0 och uppdaterar installationsvägledningen för att skilja utgivna paket från paket som fortfarande är förhandsversioner.

  • agent-framework, agent-framework-core, agent-framework-openai och agent-framework-foundry är nu utgivna paket och kräver inte längre --pre.
  • Beta-anslutningar såsom agent-framework-ag-ui, agent-framework-azurefunctions, agent-framework-copilotstudio, agent-framework-foundry-local, agent-framework-github-copilot, agent-framework-mem0, och agent-framework-ollama kräver fortfarande --pre.
  • Om ett enda installationskommando innehåller ett betapaket, behåll --pre i det kommandot.

🔴 Foundry äger nu Python-inbäddningar och modeller-slutpunktsinställningar

PR:#5056

PR #5056 tar bort det fristående agent-framework-azure-ai paketet och flyttar Python-inbäddningsytan till agent-framework-foundry och agent_framework.foundry.

  • Använd FoundryEmbeddingClient, FoundryEmbeddingOptionsoch FoundryEmbeddingSettings från agent_framework.foundry.
  • Installera agent-framework-foundry för Foundry-chatt, tjänstehanterade agenter, minnesleverantörer och embeddingar.
  • agent_framework.azure exporterar AzureAIInferenceEmbeddingClientinte längre , AzureAIInferenceEmbeddingOptions, AzureAIInferenceEmbeddingSettingseller AzureAISettings.
  • Foundry-inbäddningar använder nu FOUNDRY_MODELS_ENDPOINT, FOUNDRY_MODELS_API_KEY, FOUNDRY_EMBEDDING_MODEL och valfri FOUNDRY_IMAGE_EMBEDDING_MODEL.
  • FoundryChatClient och FoundryAgent använder fortfarande inställningarna för projektslutpunkten, till exempel FOUNDRY_PROJECT_ENDPOINT och FOUNDRY_MODEL.

Before:

import os

from agent_framework.azure import AzureAIInferenceEmbeddingClient

client = AzureAIInferenceEmbeddingClient(
    endpoint=os.environ["AZURE_AI_SERVICES_ENDPOINT"],
    model=os.environ["AZURE_AI_EMBEDDING_NAME"],
    credential=credential,
)

After:

import os

from agent_framework.foundry import FoundryEmbeddingClient

client = FoundryEmbeddingClient(
    endpoint=os.environ["FOUNDRY_MODELS_ENDPOINT"],
    api_key=os.environ["FOUNDRY_MODELS_API_KEY"],
    model=os.environ["FOUNDRY_EMBEDDING_MODEL"],
)

🔴 Arbetsflöden dirigerar nu runtime-kwargs via explicita bucketar

PR:#5010

PR #5010 uppdaterar Python workflow.run(...) så att runtime kwargs skickas explicit som function_invocation_kwargs= och client_kwargs= i stället för generisk vidarebefordran **kwargs.

  • En platt mappning behandlas som global och vidarebefordras till varje matchande agentexekutor i arbetsflödet.
  • Om en eller flera nycklar på den översta nivån matchar körar-ID:n behandlas hela mappningen som mål per utförare och varje utförare får endast sin egen post.
  • Anpassade AgentExecutor(id="...") och andra explicita arbetsflödesexekutor-ID:er är de nycklar som du riktar in dig på.
  • Samma globala vs-målregler gäller för både function_invocation_kwargs och client_kwargs.

Before:

await workflow.run(
    "Draft the report",
    db_config={"connection_string": "..."},
    user_preferences={"format": "markdown"},
)

After:

await workflow.run(
    "Draft the report",
    function_invocation_kwargs={
        "researcher": {
            "db_config": {"connection_string": "..."},
        },
        "writer": {
            "user_preferences": {"format": "markdown"},
        },
    },
)

🟡 GitHubCopilotAgent kör nu kontextprovidrar runt varje anrop

PR:#5013

PR #5013 åtgärdar ett gap i Pythons beteende där GitHubCopilotAgent accepterades context_providers men dessa i själva verket inte anropades.

  • before_run() körs nu innan Copilot-prompten visas.
  • Meddelanden och instruktioner som lagts till av leverantören ingår i prompten som når Copilot CLI.
  • after_run() körs nu när det slutliga svaret har sammanställts, inklusive strömningsvägen.

Om du redan har skickat context_providers till GitHubCopilotAgentkrävs ingen migrering – krokarna fungerar nu konsekvent med resten av Python-agentytan.


🟡 Strukturerade utdata accepterar nu JSON-schemamappningar utöver Pydantic-modeller

PR:#5022

PR #5022 breddar python-strukturerad utdataparsing så response_format kan vara antingen en Pydantisk modell eller en JSON-schemamappning.

  • Pydantic-modeller parsas fortfarande till typade modellinstanser på response.value.
  • JSON-schemamappningar parsas nu till JSON-kompatibla Python-värden på response.value (vanligtvis dict eller list).
  • Samma parsningsregler gäller när du samlar in det slutliga svaret från en dataström.

Det här är en förbättring snarare än en bakåtkompatibilitetsbrytande ändring, men det är bra att veta om du redan lagrar scheman som JSON-liknande uppslagstabeller.


python-1.0.0rc6

Det här avsnittet innehåller viktiga Python-ändringar som levererades med eller spårades för python-1.0.0rc6.

🔴 Modellval är standardiserat på model

PR:#4999

PR #4999 slutför rensningen av modellval på Python-sidan mellan konstruktorer, inskrivna alternativ, agentstandarder, svarsobjekt och miljövariabler.

  • Använd model överallt där du tidigare använde model_id.
  • Agent.default_options och per körning options={...} förväntar sig nu "model", inte "model_id".
  • Svarsobjekt visar response.model, inte response.model_id.
  • OpenAI-inställningar använder OPENAI_MODELnu , OPENAI_CHAT_MODEL, OPENAI_CHAT_COMPLETION_MODELoch OPENAI_EMBEDDING_MODEL.
  • Azure OpenAI-inställningar använder AZURE_OPENAI_MODELnu , AZURE_OPENAI_CHAT_MODEL, AZURE_OPENAI_CHAT_COMPLETION_MODELoch AZURE_OPENAI_EMBEDDING_MODEL.
  • Anthropic använder ANTHROPIC_CHAT_MODELnu , och Foundry Local använder FOUNDRY_LOCAL_MODEL.
  • Anthropic-paketet lägger också till omslutningar som hostas av leverantören, såsom AnthropicFoundryClient, AnthropicBedrockClient, och AnthropicVertexClient.

Before:

from agent_framework.anthropic import AnthropicClient

client = AnthropicClient(model_id="claude-sonnet-4-5-20250929")
response = await client.get_response(
    "Hello!",
    options={"model_id": "claude-sonnet-4-5-20250929"},
)

After:

from agent_framework.anthropic import AnthropicClient

client = AnthropicClient(model="claude-sonnet-4-5-20250929")
response = await client.get_response(
    "Hello!",
    options={"model": "claude-sonnet-4-5-20250929"},
)

🔴 Kontextprovidrar kan lägga till mellanprogram och spara historik per modellanrop

PR:#4992

PR #4992 uppdaterar pipelinen för Python-kontextprovidern och hur ramverkshanterad historik kan sparas under körningar med flera anrop.

  • ContextProvider och HistoryProvider är nu de kanoniska Python-basklasserna.
  • BaseContextProvider och BaseHistoryProvider förblir tillfälligt inaktuella alias för kompatibilitet, men ny kod bör migreras till de nya namnen.
  • SessionContext kan nu samla in providertillagd chatt eller funktionsmellanprogram via extend_middleware() och exponera den utplattade listan via get_middleware().
  • Agent(..., require_per_service_call_history_persistence=True) kör historikprovidrar runt varje modellanrop istället för efter att hela run() har körts en gång.
  • Det här läget är avsett för ramverkshanterad lokal historik och kan inte kombineras med en befintlig tjänsthanterad konversation som session.service_session_id eller options={"conversation_id": ...}.

Before:

from agent_framework import BaseHistoryProvider

class CustomHistoryProvider(BaseHistoryProvider):
    ...

After:

from agent_framework import Agent, HistoryProvider

class CustomHistoryProvider(HistoryProvider):
    ...

agent = Agent(
    client=client,
    context_providers=[CustomHistoryProvider()],
    require_per_service_call_history_persistence=True,
)

🔴 Inaktuella Azure-/OpenAI-kompatibilitetsytor har tagits bort

PR:#4990

PR #4990 slutför den providerledande migreringen från #4818 genom att ta bort de återstående inaktuella Python-kompatibilitetsytorna som hade varit tillgängliga under tidigare förhandsversioner.

  • agent_framework.azure exporterar inte längre AzureOpenAI* eller de äldre AzureAI* agent-/klient-/providergränssnitten.
  • Python OpenAI Assistants-kompatibilitetstyper är inte längre en del av den aktuella agent_framework.openai ytan.
  • Använd OpenAIChatClient, OpenAIChatCompletionClientoch OpenAIEmbeddingClient för direkta OpenAI- eller Azure OpenAI-scenarier.
  • Använd FoundryChatClient för Foundry-projektinferens och FoundryAgent för Prompt Agents eller HostedAgents.
  • Det aktuella agent_framework.azure namnområdet omfattar nu de återstående Azure-integreringarna, till exempel Azure AI-sökning, Cosmos-historik, Azure Functions och varaktiga arbetsflöden. Foundry chat, agenttjänster, minneshantering och inbäddningsklienter finns under agent_framework.foundry.

Om du migrerar äldre Python-kod använder du följande ersättningar:

  • AzureOpenAIResponsesClient → OpenAIChatClient
  • AzureOpenAIChatClient → OpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClient → OpenAIEmbeddingClient
  • AzureAIAgentClient / AzureAIClient / AzureAIProjectAgentProvider / AzureAIAgentsProvider FoundryChatClient→ eller FoundryAgent, beroende på om din app äger agentdefinitionen
  • OpenAIAssistantsClient / OpenAIAssistantProvider OpenAIChatClient→ för aktuellt Python OpenAI-arbete eller FoundryAgent om du behöver en tjänsthanterad agent i Foundry

🔴 Leverantörsledande klientdesign och paketdelning

PR:#4818

PR #4818 omorganiserar Python-providerytan runt providerspecifika paket och namnområden.

  • OpenAI-klienter finns nu i agent-framework-openai-paketet, men importeras fortfarande från namnområdet agent_framework.openai.
  • Microsoft Foundry-klienter finns nu i agent-framework-foundry paketet och agent_framework.foundry namnområdet.
  • Foundry Local tillgängliggörs också från agent_framework.foundry som FoundryLocalClient.
  • OpenAIResponsesClient har bytt namn till OpenAIChatClient.
  • OpenAIChatClient har bytt namn till OpenAIChatCompletionClient.
  • Klientkonfigurationen är standardiserad på modeloch ersätter äldre parametrar som model_id, deployment_nameoch model_deployment_name.
  • För ny kod från Azure OpenAI, använd agent_framework.openai-klienterna. De tidigare AzureOpenAI* kompatibilitetsshimsen togs bort senare i #4990.
  • För ny Foundry-kod använder du FoundryChatClient för direkt projektinferens, FoundryAgent för Prompt Agents och Hosted Agents, och FoundryLocalClient för lokala körmiljöer.
  • AzureAIClient, AzureAIProjectAgentProvider, AzureAIAgentClient, AzureAIAgentsProvider, och Python Assistants-kompatibilitetsytan flyttades till kompatibilitetssökvägar under omstruktureringen och togs senare bort i #4990.
  • Exempeltäckningen omorganiserades för att matcha den nya providerledande layouten, inklusive Foundry-exempel under samples/02-agents/providers/foundry/.

Paketkartläggning

Scenario Install Primärt namnområde
OpenAI och Azure OpenAI pip install agent-framework-openai agent_framework.openai
Microsoft Foundry-projektslutpunkter, agenttjänst, minne och inbäddningar pip install agent-framework-foundry agent_framework.foundry
Gjuteriet Local pip install agent-framework-foundry-local --pre agent_framework.foundry

Before:

from agent_framework.openai import OpenAIResponsesClient

client = OpenAIResponsesClient(model_id="gpt-5.4")

After:

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient(model="gpt-5.4")

Om du tidigare använde Azure OpenAI direkt mappar du de gamla dedikerade klasserna till de nya providerledande OpenAI-klasserna:

  • AzureOpenAIResponsesClient → OpenAIChatClient
  • AzureOpenAIChatClient → OpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClient → OpenAIEmbeddingClient
  • AzureOpenAIAssistantsClient OpenAIChatClient för direkt migrering av svars-API eller FoundryAgent om du behöver en tjänsthanterad Foundry-agent

Kodändringen är främst en klassnamnsflytt plus deployment_name → model. För Azure OpenAI-kompatibilitet använder du explicita Azure-indata på de nya OpenAI-klienterna. credential= är nu den föredragna Azure-autentiseringsytan, medan en anropsbar api_key förblir en kompatibilitetssökväg:

Före (AzureOpenAIResponsesClient):

from agent_framework.azure import AzureOpenAIResponsesClient

client = AzureOpenAIResponsesClient(
    endpoint=azure_endpoint,
    deployment_name=deployment_name,
    credential=credential,
)

Efter (OpenAIChatClient):

from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential

api_version = "your-azure-openai-api-version"

client = OpenAIChatClient(
    azure_endpoint=azure_endpoint,
    model=deployment_name,
    credential=AzureCliCredential(),
    api_version=api_version,
)

Före (AzureOpenAIChatClient):

from agent_framework.azure import AzureOpenAIChatClient

client = AzureOpenAIChatClient(
    endpoint=azure_endpoint,
    deployment_name=deployment_name,
    credential=credential,
)

Efter (OpenAIChatCompletionClient):

from agent_framework.openai import OpenAIChatCompletionClient
from azure.identity import AzureCliCredential

api_version = "your-azure-openai-api-version"

client = OpenAIChatCompletionClient(
    azure_endpoint=azure_endpoint,
    model=deployment_name,
    credential=AzureCliCredential(),
    api_version=api_version,
)

Om du vill flytta från Azure OpenAI-slutpunkter till en Microsoft Foundry-projektslutpunkt använder du den Foundry-orienterade ytan i stället:

Före (Azure OpenAI-slutpunkt):

from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential

client = AzureOpenAIResponsesClient(
    deployment_name="gpt-4.1",
    credential=AzureCliCredential(),
)

Efter Foundry-projektet:

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential

client = FoundryChatClient(
    project_endpoint="https://your-project.services.ai.azure.com",
    model="gpt-4.1",
    credential=AzureCliCredential(),
)

agent = Agent(client=client)

För lokala Microsoft Foundry-runtime-miljöer använder du Foundry-namnområdet plus den lokala anslutningsmodulen.

from agent_framework.foundry import FoundryLocalClient

client = FoundryLocalClient(model="phi-4-mini")

Om du utelämnar model, anger du FOUNDRY_LOCAL_MODEL i din miljö.

Uppdatera även miljö-/konfigurationsnamn där det är tillämpligt:

  • Använd OPENAI_CHAT_MODEL för OpenAIChatClient, OPENAI_CHAT_COMPLETION_MODEL för OpenAIChatCompletionClient, med OPENAI_MODEL som en delad reserv.
  • Azure OpenAI använder AZURE_OPENAI_CHAT_MODEL nu för OpenAIChatClient, AZURE_OPENAI_CHAT_COMPLETION_MODEL för OpenAIChatCompletionClientoch AZURE_OPENAI_MODEL som delad återställning.
  • Använd azure_endpoint för Azure OpenAI-resurs-URL:er, eller base_url om du redan har en fullständig .../openai/v1 URL och ange api_version för den Azure OpenAI API-yta som du använder
  • Anta Foundry-specifika inställningar som FOUNDRY_PROJECT_ENDPOINT, FOUNDRY_MODEL, FOUNDRY_AGENT_NAMEoch FOUNDRY_AGENT_VERSION för cloud Foundry-klienter
  • Använd ANTHROPIC_CHAT_MODEL för antropisk och FOUNDRY_LOCAL_MODEL för Foundry Local

Den här ändringen landade först under python-1.0.0rc6 cykeln.


🔴 Kärnberoenden är nu avsiktligt minimala

PR:#4904

PR #4904 följer providerpaketet som delas upp från #4818 genom att banta ned agent-framework-core och ta bort fler transitiva providerberoenden från kärnpaketet.

  • agent-framework-core är nu avsiktligt minimal.
  • Om du importerar agent_framework.openai, installerar du agent-framework-openai.
  • Om du importerar agent_framework.foundry, installerar du agent-framework-foundry för Foundry-projektinferen, tjänsthanterade agenter, minnesproviders och inbäddningar. Använd agent-framework-foundry-local --pre för lokala körningar.
  • Om du använder MCP-verktyg, Agent.as_mcp_server()eller andra MCP-integreringar vid en minimal installation installerar du mcp --pre manuellt. För WebSocket MCP-stöd, installera mcp[ws] --pre.
  • Om du vill ha den breda upplevelsen "allt ingår" installerar du metapaketet agent-framework.

Detta omdesignar inte providerytan. Det ändrar vad som installeras som standard när du endast installerar kärnan.

Tidigare (endast kärninstallationer medförde ofta mer leverantörsfunktioner transitivt):

pip install agent-framework-core

Efter (installera providerpaketet som du faktiskt använder):

pip install agent-framework-core
pip install agent-framework-openai

or:

pip install agent-framework-core
pip install agent-framework-foundry

Om du uppgraderar ett befintligt projekt som tidigare var beroende av core plus lazy provider-importer granskar du dina importer och gör providerpaketen explicita i din miljö eller beroendefiler. Gör samma sak för MCP-beroenden om du förlitar dig på MCP-verktyg eller MCP-serverhosting.


🔴 Generiska OpenAI-klienter föredrar nu explicita routningssignaler

PR:#4925

PR #4925 ändrar hur de allmänna agent_framework.openai klienterna bestämmer mellan OpenAI och Azure OpenAI.

  • Generiska OpenAI-klienter växlar inte längre till Azure bara för att AZURE_OPENAI_* det finns miljövariabler.
  • Om OPENAI_API_KEY har konfigurerats förblir de allmänna klienterna på OpenAI om du inte skickar en explicit Azure-routningssignal som credential eller azure_endpoint.
  • Om det bara finns AZURE_OPENAI_* inställningar kan de allmänna klienterna fortfarande återgå till Azure-miljöbaserad routning.
  • Det föredragna Azure OpenAI-mönstret är nu att skicka explicita Azure-inställningar plus credential=AzureCliCredential() på OpenAIChatClient, OpenAIChatCompletionClientoch inbäddningsklienten.
  • Inaktuella AzureOpenAI* omslutningar bevarar sitt kompatibilitetsbeteende, så befintlig omslutningsbaserad kod följer inte de nya reglerna för allmän klientprioritet.

Innan (OpenAIChatClient kunde dirigeras till Azure eftersom Azure env vars fanns):

import os
from agent_framework.openai import OpenAIChatClient

os.environ["OPENAI_API_KEY"] = "sk-openai"
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://your-resource.openai.azure.com"
os.environ["AZURE_OPENAI_CHAT_MODEL"] = "gpt-4o-mini"

client = OpenAIChatClient(model="gpt-4o-mini")

Efter (generisk OpenAI finns kvar på OpenAI; skicka explicita Azure-indata för att tvinga Azure-routning):

import os
from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential

client = OpenAIChatClient(
    model=os.environ["AZURE_OPENAI_CHAT_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
)

Om din miljö innehåller både OPENAI_* värden och AZURE_OPENAI_* granskar du alla allmänna agent_framework.openai klientkonstruktioner och gör providervalet explicit. Azure-providerexemplen uppdaterades för att skicka Azure-indata direkt av den anledningen.

Azure-inbäddningar följer nu samma routningsmodell:

import os
from agent_framework.openai import OpenAIEmbeddingClient
from azure.identity import AzureCliCredential

client = OpenAIEmbeddingClient(
    model=os.environ["AZURE_OPENAI_EMBEDDING_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
)

Mappa för inbäddningsscenarier:

  • AzureOpenAIEmbeddingClient → OpenAIEmbeddingClient
  • AZURE_OPENAI_EMBEDDING_MODEL → model
  • OPENAI_EMBEDDING_MODEL förblir OpenAI:s miljövariabel för inbäddning

python-1.0.0rc5 /python-1.0.0b260319 (19 mars 2026)

🔴 Chattklientpipeline omordnad: FunctionInvocation omsluter nu ChatMiddleware

PR:#4746

Ordningsföljden för ChatClient-pipelinen har ändrats. FunctionInvocation är nu det yttersta lagret och omsluter ChatMiddleware, vilket innebär att chattmellanprogramvara körs per modellanrop (inklusive varje iteration av verktygsanropsloopen) istället för en gång runt hela funktionsanropssekvensen.

Gammal pipelineordning:

ChatMiddleware → FunctionInvocation → RawChatClient

Ny pipelineordning:

FunctionInvocation → ChatMiddleware → ChatTelemetry → RawChatClient

Om du har ett anpassat chatt-mellanprogram som förutsatte att det endast kördes en gång per agentanrop (där hela verktygsanropsloopen omsluts), skall du uppdatera det så att det är säkert för upprepad körning. Chattmellanprogram anropas nu för varje enskild LLM-begäran, inklusive begäranden som skickar verktygsresultat tillbaka till modellen.

ChatTelemetry är nu ett separat lager från ChatMiddleware i pipelinen och körs närmast RawChatClient.

🔴 Public runtime kwargs uppdelat i tydliga buckets

PR:#4581

Offentliga Python-agent- och chatt-API:er betraktar inte längre generell offentlig **kwargs vidarebefordran som den huvudsakliga mekanismen för körningsdatahantering. Körningsvärden delas nu efter syfte:

  • Använd function_invocation_kwargs för värden som endast verktyg eller funktionsmellanprogram ska se.
  • Används client_kwargs för konfiguration av klientlager och mellanprogram för klienter.
  • Åtkomst till verktygs-/körningsdata via FunctionInvocationContext (ctx.kwargs och ctx.session).
  • Definiera verktyg med en inmatad kontextparameter i stället för **kwargs. Inmatade kontextparametrar visas inte i schemat som modellen ser.
  • När du delegerar till en underagent som ett verktyg ska du använda agent.as_tool(propagate_session=True) om den underordnade agenten måste dela uppringarens session.

Before:

from typing import Any

from agent_framework import tool


@tool
def send_email(address: str, **kwargs: Any) -> str:
    return f"Queued email for {kwargs['user_id']}"


response = await agent.run(
    "Send the update to finance@example.com",
    user_id="user-123",
    request_id="req-789",
)

After:

from agent_framework import FunctionInvocationContext, tool


@tool
def send_email(address: str, ctx: FunctionInvocationContext) -> str:
    user_id = ctx.kwargs["user_id"]
    session_id = ctx.session.session_id if ctx.session else "no-session"
    return f"Queued email for {user_id} in {session_id}"


response = await agent.run(
    "Send the update to finance@example.com",
    session=agent.create_session(),
    function_invocation_kwargs={
        "user_id": "user-123",
        "request_id": "req-789",
    },
)

Om du implementerar anpassade offentliga run() eller get_response() metoder lägger du till function_invocation_kwargs och client_kwargs till dessa signaturer. För verktyg föredrar du en parameter som kommenteras som FunctionInvocationContext – den kan heta ctx, contexteller något annat kommenterat namn. Om du anger en explicit schema-/indatamodell identifieras även en oannoterad parameter med namnet ctx . Samma kontextobjekt är tillgängligt för funktionsmellanprogram, och det är där runtime-funktionen kwargs och sessionstillståndet nu är live. Verktygsdefinitioner som fortfarande bara förlitar sig på **kwargs använder en äldre kompatibilitetssökväg och tas bort.


python-1.0.0rc4 /python-1.0.0b260311 (11 mars 2026)

Viktig information:python-1.0.0rc4

🔴 Azure AI-integreringar är nu mål azure-ai-projects för 2.0 GA

PR:#4536

Python Azure AI-integreringarna förutsätter nu GA 2.0-ytan azure-ai-projects .

  • Beroendeintervallet som stöds är nu azure-ai-projects>=2.0.0,<3.0.
  • foundry_features passthrough har tagits bort från skapandet av Azure AI-agenten.
  • Förhandsgranskningsbeteendet används allow_preview=True nu på klienter/leverantörer som stöds.
  • Blandade beta-/GA-kompatibilitetsshims har tagits bort, så uppdatera alla importer och typnamn till 2.0 GA SDK-ytan.

🔴 GitHub Copilot-verktygshanterare använder ToolInvocation / ToolResult nu och Python 3.11+

PR:#4551

agent-framework-github-copilot spårar nu github-copilot-sdk>=0.1.32.

  • Verktygshanterare får en ToolInvocation dataklass i stället för en rå dict.
  • Returnera ToolResult med hjälp av snake_case fält som result_type och text_result_for_llm.
  • Paketet agent-framework-github-copilot kräver nu Python 3.11+.

Before:

from typing import Any


def handle_tool(invocation: dict[str, Any]) -> dict[str, Any]:
    args = invocation.get("arguments", {})
    return {
        "resultType": "success",
        "textResultForLlm": f"Handled {args.get('city', 'request')}",
    }

After:

from copilot.tools import ToolInvocation, ToolResult


def handle_tool(invocation: ToolInvocation) -> ToolResult:
    args = invocation.arguments
    return ToolResult(
        result_type="success",
        text_result_for_llm=f"Handled {args.get('city', 'request')}",
    )

python-1.0.0rc3 / python-1.0.0b260304 (4 mars 2026)

Viktig information:python-1.0.0rc3

🔴 Kompetensleverantören slutförde sitt arbete med koddefinierad Skill / SkillResource

PR:#4387

Python Agent Skills stöder nu koddefinierade Skill och SkillResource objekt tillsammans med filbaserade kunskaper, och den offentliga providerytan är standardiserad på SkillsProvider.

  • Om du fortfarande importerar den äldre förhandsversionen/interna FileAgentSkillsProvider, växla till SkillsProvider.
  • Filbaserad resurssökning förlitar sig inte längre på backtick-citerade referenser i SKILL.md; i stället upptäcks resurser från kompetenskatalogen.

Om du hade en förhandsversion/intern kod som importerade FileAgentSkillsProvider, bör du växla till det nuvarande offentliga gränssnittet.

from agent_framework import Skill, SkillResource, SkillsProvider

python-1.0.0rc2 /python-1.0.0b260226 (26 februari 2026)

Viktig information:python-1.0.0rc2

🔴 Deklarativa arbetsflöden ersätter InvokeTool med InvokeFunctionTool

PR:#3716

Deklarativa Python-arbetsflöden använder inte längre den gamla InvokeTool åtgärdstyp. Ersätt den med InvokeFunctionTool och registrera Python-anropsbara med WorkflowFactory.register_tool().

Before:

actions:
  - kind: InvokeTool
    toolName: send_email

After:

factory = WorkflowFactory().register_tool("send_email", send_email)
actions:
  - kind: InvokeFunctionTool
    functionName: send_email

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()

PRs:#3843, #4032, #8709

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 import load_settings
from agent_framework.openai import OpenAISettings

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

Important

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 .

Ogiltiga numeriska eller booleska värden från en miljövariabel eller .env fil genererar en ValueError som identifierar inställningen och källan. De återgår inte längre tyst till ett inkompatibelt värde.


🟡 Å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 BedrockChatClient

🟡 AzureAIClient varnade för att den inte stöder körningsåsättsättningar

PR:#3919

Vid denna ändring loggade AzureAIClient en varning när körtidskonfigurationerna tools eller structured_output skilde sig från agentens konfiguration vid skapandet. Python-ytan har sedan dess tagits bort. För aktuell Python-kod använder FoundryChatClient du när du behöver appägd verktygs-/körningskonfiguration eller OpenAIChatClient för direktsvars-API-scenarier som 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.azure 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 Ersättning
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 OpenAIChatClient

client = OpenAIChatClient()
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.

  • AgentThread → AgentSession
  • 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=[...]
  • ChatMessageStore har tagits bort. Använd HistoryProvider (eller InMemoryHistoryProvider för standardfallet i minnet), som båda exporteras från agent_framework. Om ingen kontextleverantör skickas injicerar agenten automatiskt InMemoryHistoryProvider.

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.


🟡 Foundry-projektslutpunkter som ursprungligen blev tillgängliga via AzureOpenAIResponsesClient

PR:#3814

Den här förhandsgranskningsfunktionen möjliggjorde ursprungligen att AzureOpenAIResponsesClient kunde ansluta till Foundry-projektslutpunkter. Det aktuella Python-vägledning använder FoundryChatClient för Foundry-projektinferens eller FoundryAgent för tjänsthanterade Foundry-agenter i stället för det borttagna AzureOpenAIResponsesClient.

from azure.identity import DefaultAzureCredential
from agent_framework.foundry import FoundryChatClient

client = FoundryChatClient(
    project_endpoint="https://<your-project>.services.ai.azure.com",
    model="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, ChatResponseoch ChatOptionsbyts 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 på .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 (TName → NameT)

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(input_message, stream=True):
    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(input_message, stream=True):
    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("Write a blog post about AI agents.", stream=True):
    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],
    stream=True,
):
    ...

🔴 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!)

Tip

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 import FunctionTool, tool

@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_manager → with_manager
  • participant_factories → register_participant

Before:

from agent_framework.workflows import MagenticBuilder

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

After:

from agent_framework.orchestrations 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 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 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 AgentFrameworkAgent

agui_agent = AgentFrameworkAgent(agent=agent)
async for event in agui_agent.run(request):
    ...

🟡 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.openai import OpenAIChatClient

client = OpenAIChatClient(...)
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=True):
    if event.type == "output":
        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.orchestrations import (
    GroupChatOrchestrator,
    HandoffAgentExecutor,
)

# 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": "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 förblir den aktuella pluralsekvensparametern för providrar
  • 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 import Agent

agent = Agent(
    name="my-agent",  # display_name removed
    client=client,
    context_providers=[provider1, provider2],
    middleware=[my_middleware],  # must be a list now
)

# For reusable provider composition, 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

Release Versionsanteckningar Type Växel PR
Ej släppt — 🔴 Bryta Det deklarativa Power Fx-tillståndet avvisar cykler och tillämpar fasta gränser per genomgång #8511
Ej släppt — 🔴 Bryta HTTP-begäranden för arbetsflöden kräver absoluta HTTP(S)-URL:er och leverantörer får den normaliserade, sammansatta URL:en #8588
Ej släppt — 🔴 Bryta Indata till middleware kräver en sekvens; installera agent-hooks-sdk direkt i stället för att använda det borttagna core extra #7918
1.15.0 Notes 🟡 Förbättring MiddlewareFailure lägger till allvarligt, felslutet beteende för funktionsmellanprogram #7562
1.14.0 Notes 🟡 Förbättring Krypterat resonemang är valfritt för Foundry Chat #7536
1.14.0 Notes 🟡 Förbättring Agent Hooks lägger till experimentell AGENT-HOOKS-0.1-intercepterande middleware #7515
1.8.0 Notes 🔴 Bryta github-copilot-sdk uppgraderad till v1.0.0: SubprocessConfig borttagen (använd RuntimeConnection + kwargs), importsökvägar flyttas till copilot.session_events, copilot_home → base_directory, behörighetshanterare använder konkreta beslutstyper #6292
1.8.0 Notes 🟡 Förbättring Gradvis exponering av verktyg via FunctionInvocationContext #6233
1.8.0 Notes 🟡 Förbättring MCP-baserad kompetensidentifiering (McpSkillsSource) #6169
1.8.0 Notes 🟡 Förbättring Inbyggt stöd för strukturerade utdata via Converse API #6052
1.8.0 Notes 🟡 Förbättring Foundry Adaptive Evals-integrationen (generering av bedömningsmatris) #6101
1.8.0 Notes 🟡 Förbättring Mistral AI-inbäddningsklientpaket #5480
1.8.0 Notes 🟡 Förbättring agent-framework-declarative uppflyttad till release-kandidat #6256
1.7.0 Notes 🔴 Bryta Deklarativt: Python-specifika åtgärder borttagna och aliasslag omdöpta till C#-standardnamn #6126
1.7.0 Notes 🟡 Förbättring HarnessAgent och bakgrundsagenter och harness-leverantör har lagts till #6041
1.7.0 Notes 🟡 Förbättring A2AAgentSession med angivna uppgifts-ID:n och support som kräver inmatning #5980
1.6.0 Notes 🔴 Bryta Instrumentation aktiverad som standard för kärn- och gjuteripaket #5865
1.6.0 Notes 🟡 Förbättring Shell-verktyg med stöd för lokal körning och Docker-körning #5664
1.6.0 Notes 🟡 Förbättring Nytt agent-framework-monty CodeAct-providerpaket #5915
1.4.0 Notes 🔴 Bryta [Experimentella färdigheter] Anpassa upptäckten av färdighetsmappar för filer enligt agentskills.io-specifikationen #5807
1.4.0 Notes 🔴 Bryta [Experimentella färdigheter] Extrahera metadata för kunskapsspecifikation till SkillFrontmatter #5775
1.4.0 Notes 🔴 Bryta DevUI: Skärpa standardåtkomstkontroller och CORS-hållning #5740
1.4.0 Notes 🔴 Bryta A2A: Migrera till a2a-sdk v1.0 #5752
1.3.0 Notes 🔴 Bryta [Experimentella färdigheter] Omstrukturera agentkunskaper till arkitektur med flera källor #5584
1.3.0 Notes 🟡 Förbättring ClassSkill för klassbaserade färdighetsdefinitioner med deklarativa metadata #5678
1.3.0 Notes 🟡 Förbättring Informationsflödeskontroll– skydd för snabbinmatning #5331
1.3.0 Notes 🟡 Förbättring github-copilot-sdk har uppgraderats till v1.0.0b2 med instruction_directories och copilot_home #5665
1.2.2 Notes 🔴 Bryta Orkestreringsterminalutdata standardiserade som AgentResponse; Workflow.as_agent() returnerar endast slutligt svar #5301
1.2.2 Notes 🟡 Förbättring Azure AI Content Understanding-paket för kontextprovider #4829
1.1.0 Notes 🔴 Bryta CosmosCheckpointStorage begränsad pickle-deserialisering som standard #5200
1.1.0 Notes 🟡 Förbättring GeminiChatClient lades till #4847
1.1.0 Notes 🟡 Förbättring Hyperlight CodeAct-paket #5185
1.1.0 Notes 🟡 Förbättring Stöd för Foundry Toolboxes #5346
1.1.0 Notes 🟡 Förbättring finish_reason på AgentResponse och AgentResponseUpdate #5211
1.0.1 Notes 🔴 Bryta FileCheckpointStorage begränsad pickle-deserialisering (säkerhetshärdning) #4941
1.0.1 Notes 🔴 Bryta Korrigering av överlämningsarbetsflödets kontexthantering #5136
1.0.1 Notes 🟡 Förbättring Cosmos DB NoSQL kontrollpunktslagring för arbetsflöden #4916
1.0.0 Notes 🔴 Bryta Message(..., text=...) konstruktionen är helt borttagen. skapa textmeddelanden med contents=[...] i stället #5062
1.0.0 Notes 🟡 Förbättring Utgivna Python-paket (agent-framework, agent-framework-core, agent-framework-openai, agent-framework-foundry) kräver inte längre --pre, men beta-anslutningar gör det fortfarande #5062
1.0.0 Notes 🔴 Bryta Python-inbäddningar har flyttats till agent_framework.foundry; använd agent-framework-foundry, FoundryEmbeddingClientoch FOUNDRY_MODELS_* inställningar i stället för det borttagna agent-framework-azure-ai paketet #5056
1.0.0 Notes 🔴 Bryta workflow.run() använder nu explicit function_invocation_kwargs / client_kwargs, med global vs per executor-mål som bestäms av kör-ID:t #5010
1.0.0 Notes 🟡 Förbättring GitHubCopilotAgent anropar nu kontextproviderkrokar before_run / after_run och innehåller providertillagd promptkontext #5013
1.0.0 Notes 🟡 Förbättring Python-strukturerade utdata accepterar nu JSON-schemamappningar som response_format, med parsad JSON som visas på response.value #5022
1.0.0rc6 Endast PR 🔴 Bryta Inaktuella Azure/OpenAI-kompatibilitetsytor har tagits bort. använd providerledande OpenAI-klienter eller Foundry Python-klienter i stället #4990
1.0.0rc6 Endast PR 🔴 Bryta Providerledande refaktorisering: dela agent-framework-openai, agent-framework-foundry och agent-framework-foundry-local; byt namn på OpenAI-klienter; flytta Foundry till agent_framework.foundry; avskriva kompabilitetsvägar för Azure AI och assistenter. #4818
1.0.0rc6 Endast PR 🔴 Bryta agent-framework-core är nu avsiktligt smal; installera explicita providerpaket som agent-framework-openai eller agent-framework-foundryoch installera mcp manuellt för MCP-verktyg vid minimala installationer, eller använd agent-framework metapaketet för den bredare standardupplevelsen #4904
1.0.0rc6 Endast PR 🔴 Bryta Generiska agent_framework.openai klienter föredrar nu explicita routningssignaler. OpenAI förblir på OpenAI när OPENAI_API_KEY har angetts, och Azure-scenarier bör skicka explicita Azure-routningsindata som credential eller azure_endpointoch sedan konfigurera api_version #4925
1.0.0rc5 / 1.0.0b260318 Ej tillgänglig (schemalagd) 🔴 Bryta Offentliga runtime-kwargs har delats upp i function_invocation_kwargs och client_kwargs; verktyg använder nu FunctionInvocationContext / ctx.session #4581
1.0.0rc4 / 1.0.0b260311 Notes 🔴 Bryta Azure AI-integreringar riktar sig nu mot azure-ai-projects 2.0 GA; foundry_features har tagits bort och allow_preview är förhandsversionens valbara funktion. #4536
1.0.0rc4 / 1.0.0b260311 Notes 🔴 Bryta GitHub Copilot-integrering använder ToolInvocation / ToolResultnu ; agent-framework-github-copilot kräver Python 3.11+ #4551
1.0.0rc3 / 1.0.0b260304 Notes 🔴 Bryta Färdighetsleverantören lägger till koddefinierade Skill / SkillResource; äldre FileAgentSkillsProvider-importer och backtick-resursreferenser måste uppdateras. #4387
1.0.0rc2 / 1.0.0b260226 Notes 🔴 Bryta Deklarativa arbetsflöden ersätter InvokeTool med InvokeFunctionTool och WorkflowFactory.register_tool() #3716
1.0.0rc1 / 1.0.0b260219 Notes 🔴 Bryta Enhetlig hantering av Azure-autentiseringsuppgifter i Azure-paket #4088
1.0.0rc1 / 1.0.0b260219 Notes 🔴 Bryta Python-undantagshierarki omdesignad under AgentFrameworkException #4082
1.0.0rc1 / 1.0.0b260219 Notes 🔴 Bryta Providerns status är nu definierad av source_id #3995
1.0.0rc1 / 1.0.0b260219 Notes 🔴 Bryta Anpassade get_response() implementeringar måste acceptera Sequence[Message] #3920
1.0.0rc1 / 1.0.0b260219 Notes 🔴 Bryta FunctionTool[Any] schemapassthrough shim borttaget #3907
1.0.0rc1 / 1.0.0b260219 Notes 🔴 Bryta Inställningar har flyttats från AFBaseSettings /pydantiska inställningar till TypedDict + load_settings() #3843, #4032
1.0.0rc1 / 1.0.0b260219 Notes 🟡 Förbättring Överlämning av arbetsflöden för resonemangsmodell och serialisering av historik har åtgärdats #4083
1.0.0rc1 / 1.0.0b260219 Notes 🟡 Förbättring Berggrund har lagts till i core[all]; standardinställningar för verktygsval har åtgärdats #3953
1.0.0rc1 / 1.0.0b260219 Notes 🟡 Förbättring AzureAIClient varnar för körningstidsåsidosättningar som inte stöds #3919
1.0.0rc1 / 1.0.0b260219 Notes 🟡 Förbättring workflow.as_agent() infogar lokal historik när leverantörer inte har ställts in #3918
1.0.0rc1 / 1.0.0b260219 Notes 🟡 Förbättring OpenTelemetry-spårningskontext sprids till MCP-begäranden #3780
1.0.0rc1 / 1.0.0b260219 Notes 🟡 Förbättring Stöd för varaktigt arbetsflöde har lagts till för Azure Functions #3630
1.0.0b260212 Notes 🔴 Bryta Hosted*Toolklasser har tagits bort; skapa värdbaserade verktyg via klientmetoder get_*_tool() #3634
1.0.0b260212 Notes 🔴 Bryta Pipeline för sessions-/kontextprovider slutförd: AgentThread borttagen, använd AgentSession + context_providers #3850
1.0.0b260212 Notes 🔴 Bryta Kontrollpunktsmodell/lagringsrefaktor (workflow_id borttagen, previous_checkpoint_id tillagd, lagringsbeteendet har ändrats) #3744
1.0.0b260212 Notes 🟡 Förbättring AzureOpenAIResponsesClient kan skapas från Foundry-projektslutpunkten eller AIProjectClient #3814
1.0.0b260212 Notes 🔴 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 Notes 🔴 Bryta SharedState State→ ; API:er för arbetsflödestillstånd är synkrona och kontrollpunktstillståndsfältet har bytt namn #3667
1.0.0b260210 Notes 🔴 Bryta Orkestreringsverktyg har flyttats till agent_framework.orchestrations paketet #3685
1.0.0b260210 Notes 🟡 Förbättring Bakgrundssvar och continuation_token understöd har lagts till i Python-agentsvar #3808
1.0.0b260210 Notes 🟡 Förbättring Typer av sessions-/kontextförhandsgranskning har lagts till sida vid sida (SessionContext, BaseContextProvider) #3763
1.0.0b260210 Notes 🟡 Förbättring Uppdateringar av strömmade kodtolkar innehåller nu inkrementella kodändringar #3775
1.0.0b260210 Notes 🟡 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 Notes 🔴 Bryta ChatAgent → Agent, ChatMessage → Message, RawChatAgent → RawAgent, ChatClientProtocol → SupportsChatGetResponse #3747
1.0.0b260210 Notes 🔴 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 Notes 🔴 Bryta API:er förenade kring run/get_response och ResponseStream #3379
1.0.0b260210 Notes 🔴 Bryta AgentRunContext har bytt namn till AgentContext #3714
1.0.0b260210 Notes 🔴 Bryta AgentProtocol har bytt namn till SupportsAgentRun #3717
1.0.0b260210 Notes 🔴 Bryta Parametern Middleware next har bytt namn till call_next #3735
1.0.0b260210 Notes 🔴 Bryta TypeVar-namngivning standardiserad (TName → NameT) #3770
1.0.0b260210 Notes 🔴 Bryta Arbetsflöde som agent för utdata/dataströmsbeteende i linje med aktuellt agentsvarsflöde #3649
1.0.0b260210 Notes 🔴 Bryta Fluent builder-metoder har flyttats till konstruktorparametrar i 6 byggverktyg #3693
1.0.0b260210 Notes 🔴 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 Notes 🟡 Förbättring BaseAgent stöd har lagts till för Claude Agent SDK-integreringar #3509
1.0.0b260128 Notes 🔴 Bryta AIFunction → FunctionTool, @ai_function → @tool #3413
1.0.0b260128 Notes 🔴 Bryta Fabriksmönster för GroupChat/Magentic; with_standard_manager → with_manager, participant_factories → register_participant #3224
1.0.0b260128 Notes 🔴 Bryta Github → GitHub #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 Notes 🔴 Bryta response_format verifieringsfel genereras nu ValidationError #3274
1.0.0b260123 Notes 🔴 Bryta AG-UI körningslogik förenklad #3322
1.0.0b260123 Notes 🟡 Förbättring Antropisk klient lägger till response_format stöd för strukturerade utdata #3301
1.0.0b260123 Notes 🟡 Förbättring Azure AI-konfiguration utökad med reasoning och rai_config stöd #3403, #3265
1.0.0b260116 Notes 🔴 Bryta create_agent → as_agent #3249
1.0.0b260116 Notes 🔴 Bryta source_executor_id → executor_id #3166
1.0.0b260116 Notes 🟡 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 Notes 🔴 Bryta Alternativ som TypedDict och Generic #3140
1.0.0b260114 Notes 🔴 Bryta display_name borttagen; context_providers → context_provider (singular); middleware måste vara en lista #3139
1.0.0b260114 Notes 🔴 Bryta AgentRunResponse / AgentRunResponseUpdate har bytt namn till AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 Notes 🟡 Förbättring Deklarativ arbetsflödeskörning har lagts till för YAML-definierade arbetsflöden #2815
1.0.0b260114 Notes 🟡 Förbättring FÖRBÄTTRINGAR av MCP-inläsning/tillförlitlighet (hantering av anslutningsförlust, sidnumrering, representationskontroller) #3154
1.0.0b260114 Notes 🟡 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