diff --git a/python/samples/semantic-kernel-migration/azure_ai_agent/01_basic_azure_ai_agent.py b/python/samples/semantic-kernel-migration/azure_ai_agent/01_basic_azure_ai_agent.py index 5b85fc6722..7c41841e09 100644 --- a/python/samples/semantic-kernel-migration/azure_ai_agent/01_basic_azure_ai_agent.py +++ b/python/samples/semantic-kernel-migration/azure_ai_agent/01_basic_azure_ai_agent.py @@ -25,7 +25,7 @@ async def run_semantic_kernel() -> None: async with AzureCliCredential() as credential, AzureAIAgent.create_client(credential=credential) as client: settings = AzureAIAgentSettings() # Reads env vars for region/deployment. # SK builds the remote agent definition then wraps it with AzureAIAgent. - definition = await client.agents.as_agent( + definition = await client.agents.create_agent( model=settings.model_deployment_name, name="Support", instructions="Answer customer questions in one paragraph.", diff --git a/python/samples/semantic-kernel-migration/azure_ai_agent/02_azure_ai_agent_with_code_interpreter.py b/python/samples/semantic-kernel-migration/azure_ai_agent/02_azure_ai_agent_with_code_interpreter.py index 93074bd856..8dbfcc7fe3 100644 --- a/python/samples/semantic-kernel-migration/azure_ai_agent/02_azure_ai_agent_with_code_interpreter.py +++ b/python/samples/semantic-kernel-migration/azure_ai_agent/02_azure_ai_agent_with_code_interpreter.py @@ -25,7 +25,7 @@ async def run_semantic_kernel() -> None: async with AzureCliCredential() as credential, AzureAIAgent.create_client(credential=credential) as client: settings = AzureAIAgentSettings() # Register the hosted code interpreter tool with the remote agent. - definition = await client.agents.as_agent( + definition = await client.agents.create_agent( model=settings.model_deployment_name, name="Analyst", instructions="Use the code interpreter for numeric work.", @@ -46,9 +46,7 @@ async def run_agent_framework() -> None: AzureCliCredential() as credential, AzureAIAgentsProvider(credential=credential) as provider, ): - # Create a client to access hosted tool factory methods - client = AzureAIAgentClient(agents_client=provider._agents_client) - code_interpreter_tool = client.get_code_interpreter_tool() + code_interpreter_tool = AzureAIAgentClient.get_code_interpreter_tool() agent = await provider.create_agent( name="Analyst", diff --git a/python/samples/semantic-kernel-migration/azure_ai_agent/03_azure_ai_agent_threads_and_followups.py b/python/samples/semantic-kernel-migration/azure_ai_agent/03_azure_ai_agent_threads_and_followups.py index ecd4a2b0b4..9e83364024 100644 --- a/python/samples/semantic-kernel-migration/azure_ai_agent/03_azure_ai_agent_threads_and_followups.py +++ b/python/samples/semantic-kernel-migration/azure_ai_agent/03_azure_ai_agent_threads_and_followups.py @@ -19,7 +19,7 @@ async def run_semantic_kernel() -> None: async with AzureCliCredential() as credential, AzureAIAgent.create_client(credential=credential) as client: settings = AzureAIAgentSettings() - definition = await client.agents.as_agent( + definition = await client.agents.create_agent( model=settings.model_deployment_name, name="Planner", instructions="Track follow-up questions within the same thread.", diff --git a/python/samples/semantic-kernel-migration/chat_completion/02_chat_completion_with_tool.py b/python/samples/semantic-kernel-migration/chat_completion/02_chat_completion_with_tool.py index 1267027364..cd31b55855 100644 --- a/python/samples/semantic-kernel-migration/chat_completion/02_chat_completion_with_tool.py +++ b/python/samples/semantic-kernel-migration/chat_completion/02_chat_completion_with_tool.py @@ -43,7 +43,7 @@ def specials(self) -> str: async def run_agent_framework() -> None: - from agent_framework._tools import tool + from agent_framework import tool from agent_framework.openai import OpenAIChatClient @tool(name="specials", description="List daily specials") diff --git a/python/samples/semantic-kernel-migration/openai_assistant/01_basic_openai_assistant.py b/python/samples/semantic-kernel-migration/openai_assistant/01_basic_openai_assistant.py index fbdd163fa7..4b4bbb5e4a 100644 --- a/python/samples/semantic-kernel-migration/openai_assistant/01_basic_openai_assistant.py +++ b/python/samples/semantic-kernel-migration/openai_assistant/01_basic_openai_assistant.py @@ -46,11 +46,12 @@ async def run_agent_framework() -> None: instructions="Answer questions in one concise paragraph.", model=ASSISTANT_MODEL, ) as assistant_agent: - reply = await assistant_agent.run("What is the capital of Denmark?") + session = assistant_agent.create_session() + reply = await assistant_agent.run("What is the capital of Denmark?", session=session) print("[AF]", reply.text) follow_up = await assistant_agent.run( "How many residents live there?", - session=assistant_agent.create_session(), + session=session, ) print("[AF][follow-up]", follow_up.text) diff --git a/python/samples/semantic-kernel-migration/openai_assistant/02_openai_assistant_with_code_interpreter.py b/python/samples/semantic-kernel-migration/openai_assistant/02_openai_assistant_with_code_interpreter.py index b5bf4c35d3..6de655712b 100644 --- a/python/samples/semantic-kernel-migration/openai_assistant/02_openai_assistant_with_code_interpreter.py +++ b/python/samples/semantic-kernel-migration/openai_assistant/02_openai_assistant_with_code_interpreter.py @@ -23,7 +23,7 @@ async def run_semantic_kernel() -> None: # Enable the hosted code interpreter tool on the assistant definition. definition = await client.beta.assistants.create( - model=OpenAISettings().chat_deployment_name, + model=OpenAISettings().chat_model_id, name="CodeRunner", instructions="Run the provided request as code and return the result.", tools=code_interpreter_tool, diff --git a/python/samples/semantic-kernel-migration/openai_assistant/03_openai_assistant_function_tool.py b/python/samples/semantic-kernel-migration/openai_assistant/03_openai_assistant_function_tool.py index 6f88f29832..b6e5198d00 100644 --- a/python/samples/semantic-kernel-migration/openai_assistant/03_openai_assistant_function_tool.py +++ b/python/samples/semantic-kernel-migration/openai_assistant/03_openai_assistant_function_tool.py @@ -34,7 +34,7 @@ async def run_semantic_kernel() -> None: class WeatherPlugin: @kernel_function(name="get_forecast", description="Look up the forecast for a city and day.") - async def fake_weather_lookup(city: str, day: str) -> dict[str, Any]: + async def fake_weather_lookup(self, city: str, day: str) -> dict[str, Any]: """Pretend to call a weather service.""" return { "city": city, @@ -50,9 +50,8 @@ async def fake_weather_lookup(city: str, day: str) -> dict[str, Any]: model=ASSISTANT_MODEL, name="WeatherHelper", instructions="Call get_forecast to fetch weather details.", - plugins=[WeatherPlugin()], ) - agent = OpenAIAssistantAgent(client=client, definition=definition) + agent = OpenAIAssistantAgent(client=client, definition=definition, plugins=[WeatherPlugin()]) thread: AssistantAgentThread | None = None response = await agent.get_response( @@ -64,7 +63,7 @@ async def fake_weather_lookup(city: str, day: str) -> dict[str, Any]: async def run_agent_framework() -> None: - from agent_framework._tools import tool + from agent_framework import tool from agent_framework.openai import OpenAIAssistantsClient @tool( diff --git a/python/samples/semantic-kernel-migration/openai_responses/01_basic_responses_agent.py b/python/samples/semantic-kernel-migration/openai_responses/01_basic_responses_agent.py index fce6ecb6ad..a891a22335 100644 --- a/python/samples/semantic-kernel-migration/openai_responses/01_basic_responses_agent.py +++ b/python/samples/semantic-kernel-migration/openai_responses/01_basic_responses_agent.py @@ -14,24 +14,19 @@ async def run_semantic_kernel() -> None: - from azure.identity import AzureCliCredential - from semantic_kernel.agents import AzureResponsesAgent - from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings - - credential = AzureCliCredential() - try: - client = AzureResponsesAgent.create_client(credential=credential) - # SK response agents wrap Azure OpenAI's hosted Responses API. - agent = AzureResponsesAgent( - ai_model_id=AzureOpenAISettings().responses_deployment_name, - client=client, - instructions="Answer in one concise sentence.", - name="Expert", - ) - response = await agent.get_response("Why is the sky blue?") - print("[SK]", response.message.content) - finally: - await credential.close() + from semantic_kernel.agents import OpenAIResponsesAgent + from semantic_kernel.connectors.ai.open_ai import OpenAISettings + + client = OpenAIResponsesAgent.create_client() + # SK response agents wrap OpenAI's hosted Responses API. + agent = OpenAIResponsesAgent( + ai_model_id=OpenAISettings().responses_model_id, + client=client, + instructions="Answer in one concise sentence.", + name="Expert", + ) + response = await agent.get_response("Why is the sky blue?") + print("[SK]", response.message.content) async def run_agent_framework() -> None: diff --git a/python/samples/semantic-kernel-migration/openai_responses/02_responses_agent_with_tool.py b/python/samples/semantic-kernel-migration/openai_responses/02_responses_agent_with_tool.py index 599367f9c5..b5bd864c08 100644 --- a/python/samples/semantic-kernel-migration/openai_responses/02_responses_agent_with_tool.py +++ b/python/samples/semantic-kernel-migration/openai_responses/02_responses_agent_with_tool.py @@ -14,9 +14,8 @@ async def run_semantic_kernel() -> None: - from azure.identity import AzureCliCredential - from semantic_kernel.agents import AzureResponsesAgent - from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings + from semantic_kernel.agents import OpenAIResponsesAgent + from semantic_kernel.connectors.ai.open_ai import OpenAISettings from semantic_kernel.functions import kernel_function class MathPlugin: @@ -24,26 +23,22 @@ class MathPlugin: def add(self, a: float, b: float) -> float: return a + b - credential = AzureCliCredential() - try: - client = AzureResponsesAgent.create_client(credential=credential) - # Plugins advertise callable tools to the Responses agent. - agent = AzureResponsesAgent( - ai_model_id=AzureOpenAISettings().responses_deployment_name, - client=client, - instructions="Use the add tool when math is required.", - name="MathExpert", - plugins=[MathPlugin()], - ) - response = await agent.get_response("Use add(41, 1) and explain the result.") - print("[SK]", response.message.content) - finally: - await credential.close() + client = OpenAIResponsesAgent.create_client() + # Plugins advertise callable tools to the Responses agent. + agent = OpenAIResponsesAgent( + ai_model_id=OpenAISettings().responses_model_id, + client=client, + instructions="Use the add tool when math is required.", + name="MathExpert", + plugins=[MathPlugin()], + ) + response = await agent.get_response("Use add(41, 1) and explain the result.") + print("[SK]", response.message.content) async def run_agent_framework() -> None: from agent_framework import Agent - from agent_framework._tools import tool + from agent_framework import tool from agent_framework.openai import OpenAIResponsesClient @tool(name="add", description="Add two numbers") diff --git a/python/samples/semantic-kernel-migration/openai_responses/03_responses_agent_structured_output.py b/python/samples/semantic-kernel-migration/openai_responses/03_responses_agent_structured_output.py index 07d9d0b4c7..ee94dcd761 100644 --- a/python/samples/semantic-kernel-migration/openai_responses/03_responses_agent_structured_output.py +++ b/python/samples/semantic-kernel-migration/openai_responses/03_responses_agent_structured_output.py @@ -22,28 +22,22 @@ class ReleaseBrief(BaseModel): async def run_semantic_kernel() -> None: - from azure.identity import AzureCliCredential - from semantic_kernel.agents import AzureResponsesAgent - from semantic_kernel.connectors.ai.open_ai import AzureOpenAISettings + from semantic_kernel.agents import OpenAIResponsesAgent + from semantic_kernel.connectors.ai.open_ai import OpenAISettings - credential = AzureCliCredential() - try: - client = AzureResponsesAgent.create_client(credential=credential) - # response_format requests schema-constrained output from the model. - agent = AzureResponsesAgent( - ai_model_id=AzureOpenAISettings().responses_deployment_name, - client=client, - instructions="Return launch briefs as structured JSON.", - name="ProductMarketer", - text=AzureResponsesAgent.configure_response_format(ReleaseBrief), - ) - response = await agent.get_response( - "Draft a launch brief for the Contoso Note app.", - response_format=ReleaseBrief, - ) - print("[SK]", response.message.content) - finally: - await credential.close() + client = OpenAIResponsesAgent.create_client() + # response_format requests schema-constrained output from the model. + agent = OpenAIResponsesAgent( + ai_model_id=OpenAISettings().responses_model_id, + client=client, + instructions="Return launch briefs as structured JSON.", + name="ProductMarketer", + text=OpenAIResponsesAgent.configure_response_format(ReleaseBrief), + ) + response = await agent.get_response( + "Draft a launch brief for the Contoso Note app.", + ) + print("[SK]", response.message.content) async def run_agent_framework() -> None: diff --git a/python/samples/semantic-kernel-migration/orchestrations/concurrent_basic.py b/python/samples/semantic-kernel-migration/orchestrations/concurrent_basic.py index 7a107d31ec..2a646a9d11 100644 --- a/python/samples/semantic-kernel-migration/orchestrations/concurrent_basic.py +++ b/python/samples/semantic-kernel-migration/orchestrations/concurrent_basic.py @@ -32,7 +32,7 @@ ###################################################################### -def build_semantic_kernel_agents() -> list[Agent]: +def build_semantic_kernel_agents() -> list[ChatCompletionAgent]: credential = AzureCliCredential() physics_agent = ChatCompletionAgent( diff --git a/python/samples/semantic-kernel-migration/orchestrations/group_chat.py b/python/samples/semantic-kernel-migration/orchestrations/group_chat.py index e244bd0c01..2211327c39 100644 --- a/python/samples/semantic-kernel-migration/orchestrations/group_chat.py +++ b/python/samples/semantic-kernel-migration/orchestrations/group_chat.py @@ -20,7 +20,7 @@ from agent_framework.azure import AzureOpenAIChatClient, AzureOpenAIResponsesClient from agent_framework.orchestrations import GroupChatBuilder from azure.identity import AzureCliCredential -from semantic_kernel.agents import Agent, ChatCompletionAgent, GroupChatOrchestration +from semantic_kernel.agents import ChatCompletionAgent, GroupChatOrchestration from semantic_kernel.agents.orchestration.group_chat import ( BooleanResult, GroupChatManager, @@ -50,7 +50,7 @@ ###################################################################### -def build_semantic_kernel_agents() -> list[Agent]: +def build_semantic_kernel_agents() -> list[ChatCompletionAgent]: credential = AzureCliCredential() researcher = ChatCompletionAgent( @@ -82,25 +82,25 @@ class ChatCompletionGroupChatManager(GroupChatManager): topic: str termination_prompt: str = ( - "You are coordinating a conversation about '{{topic}}'. " + "You are coordinating a conversation about '{{$topic}}'. " "Decide if the discussion has produced a solid answer. " 'Respond using JSON: {"result": true|false, "reason": "..."}.' ) selection_prompt: str = ( - "You are coordinating a conversation about '{{topic}}'. " + "You are coordinating a conversation about '{{$topic}}'. " "Choose the next participant by returning JSON with keys (result, reason). " - "The result must match one of: {{participants}}." + "The result must match one of: {{$participants}}." ) summary_prompt: str = ( - "You have just finished a discussion about '{{topic}}'. " + "You have just finished a discussion about '{{$topic}}'. " "Summarize the plan and highlight key takeaways. Return JSON with keys (result, reason) where " "result is the final response text." ) - def __init__(self, *, topic: str, service: ChatCompletionClientBase) -> None: - super().__init__(topic=topic, service=service) + def __init__(self, *, topic: str, service: ChatCompletionClientBase, max_rounds: int | None = None) -> None: + super().__init__(topic=topic, service=service, max_rounds=max_rounds) self._round_robin_index = 0 async def _render_prompt(self, template: str, **kwargs: Any) -> str: diff --git a/python/samples/semantic-kernel-migration/orchestrations/handoff.py b/python/samples/semantic-kernel-migration/orchestrations/handoff.py index 9891442369..e23e4002d0 100644 --- a/python/samples/semantic-kernel-migration/orchestrations/handoff.py +++ b/python/samples/semantic-kernel-migration/orchestrations/handoff.py @@ -20,7 +20,7 @@ WorkflowEvent, ) from agent_framework.azure import AzureOpenAIChatClient -from agent_framework.orchestrations import HandoffBuilder, HandoffUserInputRequest +from agent_framework.orchestrations import HandoffAgentUserRequest, HandoffBuilder from azure.identity import AzureCliCredential from semantic_kernel.agents import Agent, ChatCompletionAgent, HandoffOrchestration, OrchestrationHandoffs from semantic_kernel.agents.runtime import InProcessRuntime @@ -223,7 +223,7 @@ async def _drain_events(stream: AsyncIterable[WorkflowEvent]) -> list[WorkflowEv def _collect_handoff_requests(events: list[WorkflowEvent]) -> list[WorkflowEvent]: requests: list[WorkflowEvent] = [] for event in events: - if event.type == "request_info" and isinstance(event.data, HandoffUserInputRequest): + if event.type == "request_info" and isinstance(event.data, HandoffAgentUserRequest): requests.append(event) return requests @@ -241,12 +241,16 @@ async def run_agent_framework_example(initial_task: str, scripted_responses: Seq triage, refund, status, returns = _create_af_agents(client) workflow = ( - HandoffBuilder(name="sk_af_handoff_migration", participants=[triage, refund, status, returns]) - .set_coordinator(triage) + HandoffBuilder( + name="sk_af_handoff_migration", + participants=[triage, refund, status, returns], + termination_condition=lambda conv: sum(1 for m in conv if m.role == "user") >= 4, + ) + .with_start_agent(triage) .add_handoff(triage, [refund, status, returns]) .add_handoff(refund, [status, triage]) .add_handoff(status, [refund, triage]) - .add_handoff(returns, triage) + .add_handoff(returns, [triage]) .build() ) @@ -260,7 +264,7 @@ async def run_agent_framework_example(initial_task: str, scripted_responses: Seq user_reply = next(scripted_iter) except StopIteration: user_reply = "Thanks, that's all." - responses = {request.request_id: user_reply for request in pending} + responses = {request.request_id: [Message(role="user", text=user_reply)] for request in pending} final_events = await _drain_events(workflow.run(stream=True, responses=responses)) pending = _collect_handoff_requests(final_events) diff --git a/python/samples/semantic-kernel-migration/orchestrations/magentic.py b/python/samples/semantic-kernel-migration/orchestrations/magentic.py index 44a8efc832..edf64e59f3 100644 --- a/python/samples/semantic-kernel-migration/orchestrations/magentic.py +++ b/python/samples/semantic-kernel-migration/orchestrations/magentic.py @@ -19,7 +19,6 @@ from agent_framework.openai import OpenAIChatClient, OpenAIResponsesClient from agent_framework.orchestrations import MagenticBuilder from semantic_kernel.agents import ( - Agent, ChatCompletionAgent, MagenticOrchestration, OpenAIAssistantAgent, @@ -44,7 +43,7 @@ ###################################################################### -async def build_semantic_kernel_agents() -> list[Agent]: +async def build_semantic_kernel_agents() -> list: research_agent = ChatCompletionAgent( name="ResearchAgent", description="A helpful assistant with access to web search. Ask it to perform web searches.", @@ -135,19 +134,19 @@ async def run_agent_framework_example(prompt: str) -> str | None: instructions=( "You are a Researcher. You find information without additional computation or quantitative analysis." ), - client=OpenAIChatClient(ai_model_id="gpt-4o-search-preview"), + client=OpenAIChatClient(model_id="gpt-4o-search-preview"), ) - # Create code interpreter tool using instance method + # Create code interpreter tool using static method coder_client = OpenAIResponsesClient() - code_interpreter_tool = coder_client.get_code_interpreter_tool() + code_interpreter_tool = OpenAIResponsesClient.get_code_interpreter_tool() coder = Agent( name="CoderAgent", description="A helpful assistant that writes and executes code to process and analyze data.", instructions="You solve questions using code. Please provide detailed analysis and computation process.", client=coder_client, - tools=code_interpreter_tool, + tools=[code_interpreter_tool], ) # Create a manager agent for orchestration @@ -158,12 +157,22 @@ async def run_agent_framework_example(prompt: str) -> str | None: client=OpenAIChatClient(), ) - workflow = MagenticBuilder(participants=[researcher, coder], manager_agent=manager_agent).build() + workflow = MagenticBuilder( + participants=[researcher, coder], manager_agent=manager_agent + ).build() final_text: str | None = None async for event in workflow.run(prompt, stream=True): if event.type == "output": - final_text = cast(str, event.data) + data = event.data + if isinstance(data, str): + final_text = data + elif isinstance(data, list): + # Extract text from the last assistant message + for msg in reversed(data): + if hasattr(msg, "text") and msg.text: + final_text = msg.text + break return final_text diff --git a/python/samples/semantic-kernel-migration/processes/fan_out_fan_in_process.py b/python/samples/semantic-kernel-migration/processes/fan_out_fan_in_process.py index 62325d3c7b..56444b99bb 100644 --- a/python/samples/semantic-kernel-migration/processes/fan_out_fan_in_process.py +++ b/python/samples/semantic-kernel-migration/processes/fan_out_fan_in_process.py @@ -153,7 +153,7 @@ async def run_semantic_kernel_process_example() -> None: kernel=kernel, initial_event=KernelProcessEvent(id=CommonEvents.START_PROCESS.value, data="Initial"), ) as process_context: - process_state = await process_context.get_executor_state() + process_state = await process_context.get_state() c_step_state: KernelProcessStepState[CStepState] | None = next( (s.state for s in process_state.steps if s.state.name == "CStep"), None, diff --git a/python/samples/semantic-kernel-migration/processes/nested_process.py b/python/samples/semantic-kernel-migration/processes/nested_process.py index 8fbe66acf3..7e04f68cf1 100644 --- a/python/samples/semantic-kernel-migration/processes/nested_process.py +++ b/python/samples/semantic-kernel-migration/processes/nested_process.py @@ -144,7 +144,7 @@ async def run_semantic_kernel_nested_process() -> None: initial_event=ProcessEvents.START_PROCESS.value, data="Test", ) - process_info = await process_handle.get_executor_state() + process_info = await process_handle.get_state() inner_process: KernelProcess | None = next( (s for s in process_info.steps if s.state.name == "Inner"), diff --git a/python/uv.lock b/python/uv.lock index 36412ed85f..32a11bedfa 100644 --- a/python/uv.lock +++ b/python/uv.lock @@ -1362,7 +1362,7 @@ name = "clr-loader" version = "0.2.10" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cffi", marker = "(python_full_version < '3.14' and sys_platform == 'darwin') or (python_full_version < '3.14' and sys_platform == 'linux') or (python_full_version < '3.14' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/18/24/c12faf3f61614b3131b5c98d3bf0d376b49c7feaa73edca559aeb2aee080/clr_loader-0.2.10.tar.gz", hash = "sha256:81f114afbc5005bafc5efe5af1341d400e22137e275b042a8979f3feb9fc9446", size = 83605, upload-time = "2026-01-03T23:13:06.984Z" } wheels = [ @@ -1841,7 +1841,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "typing-extensions", marker = "(python_full_version < '3.11' and sys_platform == 'darwin') or (python_full_version < '3.11' and sys_platform == 'linux') or (python_full_version < '3.11' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -4578,8 +4578,8 @@ name = "powerfx" version = "0.0.34" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cffi", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, - { name = "pythonnet", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "cffi", marker = "(python_full_version < '3.14' and sys_platform == 'darwin') or (python_full_version < '3.14' and sys_platform == 'linux') or (python_full_version < '3.14' and sys_platform == 'win32')" }, + { name = "pythonnet", marker = "(python_full_version < '3.14' and sys_platform == 'darwin') or (python_full_version < '3.14' and sys_platform == 'linux') or (python_full_version < '3.14' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9f/fb/6c4bf87e0c74ca1c563921ce89ca1c5785b7576bca932f7255cdf81082a7/powerfx-0.0.34.tar.gz", hash = "sha256:956992e7afd272657ed16d80f4cad24ec95d9e4a79fb9dfa4a068a09e136af32", size = 3237555, upload-time = "2025-12-22T15:50:59.682Z" } wheels = [ @@ -5242,7 +5242,7 @@ name = "pythonnet" version = "3.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "clr-loader", marker = "sys_platform == 'darwin' or sys_platform == 'linux' or sys_platform == 'win32'" }, + { name = "clr-loader", marker = "(python_full_version < '3.14' and sys_platform == 'darwin') or (python_full_version < '3.14' and sys_platform == 'linux') or (python_full_version < '3.14' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9a/d6/1afd75edd932306ae9bd2c2d961d603dc2b52fcec51b04afea464f1f6646/pythonnet-3.0.5.tar.gz", hash = "sha256:48e43ca463941b3608b32b4e236db92d8d40db4c58a75ace902985f76dac21cf", size = 239212, upload-time = "2024-12-13T08:30:44.393Z" } wheels = [