Commit Graph

49 Commits

  • Python: [BREAKING] Renamed AgentProtocol to SupportsAgentRun (#3717)
    * Renamed AgentProtocol to AgentLike
    
    * Resolved comments
    
    * Renamed AgentLike to SupportsAgentRun
    
    * Resolved comments
  • [BREAKING] Python: Refactor workflow events to unified discriminated union pattern (#3690)
    * Refactor events
    
    * Merge main
    
    * Fixes
    
    * Cleanup
    
    * Update samples and tests
    
    * Remove unused imports
    
    * PR feedback
    
    * Merge main. Add properties for events to help typing
    
    * Formatting
    
    * Cleanup
    
    * use builtins.type to avoid shadowing by WorkflowEvent.type attribute
    
    * Final improvements
  • Python: [BREAKING] Moved to a single get_response and run API (#3379)
    * WIP
    
    * big update to new ResponseStream model
    
    * fixed tests and typing
    
    * fixed tests and typing
    
    * fixed tools typevar import
    
    * fix
    
    * mypy fix
    
    * mypy fixes and some cleanup
    
    * fix missing quoted names
    
    * and client
    
    * fix  imports agui
    
    * fix anthropic override
    
    * fix agui
    
    * fix ag ui
    
    * fix import
    
    * fix anthropic types
    
    * fix mypy
    
    * refactoring
    
    * updated typing
    
    * fix 3.11
    
    * fixes
    
    * redid layering of chat clients and agents
    
    * redid layering of chat clients and agents
    
    * Fix lint, type, and test issues after rebase
    
    - Add @overload decorators to AgentProtocol.run() for type compatibility
    - Add missing docstring params (middleware, function_invocation_configuration)
    - Fix TODO format (TD002) by adding author tags
    - Fix broken observability tests from upstream:
      - Replace non-existent use_instrumentation with direct instantiation
      - Replace non-existent use_agent_instrumentation with AgentTelemetryLayer mixin
      - Fix get_streaming_response to use get_response(stream=True)
      - Add AgentInitializationError import
      - Update streaming exception tests to match actual behavior
    
    * Fix AgentExecutionException import error in test_agents.py
    
    - Replace non-existent AgentExecutionException with AgentRunException
    
    * Fix test import and asyncio deprecation issues
    
    - Add 'tests' to pythonpath in ag-ui pyproject.toml for utils_test_ag_ui import
    - Replace deprecated asyncio.get_event_loop().run_until_complete with asyncio.run
    
    * Fix azure-ai test failures
    
    - Update _prepare_options patching to use correct class path
    - Fix test_to_azure_ai_agent_tools_web_search_missing_connection to clear env vars
    
    * Convert ag-ui utils_test_ag_ui.py to conftest.py
    
    - Move test utilities to conftest.py for proper pytest discovery
    - Update all test imports to use conftest instead of utils_test_ag_ui
    - Remove old utils_test_ag_ui.py file
    - Revert pythonpath change in pyproject.toml
    
    * fix: use relative imports for ag-ui test utilities
    
    * fix agui
    
    * Rename Bare*Client to Raw*Client and BaseChatClient
    
    - Renamed BareChatClient to BaseChatClient (abstract base class)
    - Renamed BareOpenAIChatClient to RawOpenAIChatClient
    - Renamed BareOpenAIResponsesClient to RawOpenAIResponsesClient
    - Renamed BareAzureAIClient to RawAzureAIClient
    - Added warning docstrings to Raw* classes about layer ordering
    - Updated README in samples/getting_started/agents/custom with layer docs
    - Added test for span ordering with function calling
    
    * Fix layer ordering: FunctionInvocationLayer before ChatTelemetryLayer
    
    This ensures each inner LLM call gets its own telemetry span, resulting in
    the correct span sequence: chat -> execute_tool -> chat
    
    Updated all production clients and test mocks to use correct ordering:
    - ChatMiddlewareLayer (first)
    - FunctionInvocationLayer (second)
    - ChatTelemetryLayer (third)
    - BaseChatClient/Raw...Client (fourth)
    
    * Remove run_stream usage
    
    * Fix conversation_id propagation
    
    * Python: Add BaseAgent implementation for Claude Agent SDK (#3509)
    
    * Added ClaudeAgent implementation
    
    * Updated streaming logic
    
    * Small updates
    
    * Small update
    
    * Fixes
    
    * Small fix
    
    * Naming improvements
    
    * Updated imports
    
    * Addressed comments
    
    * Updated package versions
    
    * Update Claude agent connector layering
    
    * fix test and plugin
    
    * Store function middleware in invocation layer
    
    * Fix telemetry streaming and ag-ui tests
    
    * Remove legacy ag-ui tests folder
    
    * updates
    
    * Remove terminate flag from FunctionInvocationContext, use MiddlewareTermination instead
    
    - Remove terminate attribute from FunctionInvocationContext
    - Add result attribute to MiddlewareTermination to carry function results
    - FunctionMiddlewarePipeline.execute() now lets MiddlewareTermination propagate
    - _auto_invoke_function captures context.result in exception before re-raising
    - _try_execute_function_calls catches MiddlewareTermination and sets should_terminate
    - Fix handoff middleware to append to chat_client.function_middleware directly
    - Update tests to use raise MiddlewareTermination instead of context.terminate
    - Add middleware flow documentation in samples/concepts/tools/README.md
    - Fix ag-ui to use FunctionMiddlewarePipeline instead of removed create_function_middleware_pipeline
    
    * fix: remove references to removed terminate flag in purview tests, add type ignore
    
    * fix: move _test_utils.py from package to test folder
    
    * fix: call get_final_response() to trigger context provider notification in streaming test
    
    * fix: correct broken links in tools README
    
    * docs: clarify default middleware behavior in summary table
    
    * fix: ensure inner stream result hooks are called when using map()/from_awaitable()
    
    * Fix mypy type errors
    
    * Address PR review comments on observability.py
    
    - Remove TODO comment about unconsumed streams, add explanatory note instead
    - Remove redundant _close_span cleanup hook (already called in _finalize_stream)
    - Clarify behavior: cleanup hooks run after stream iteration, if stream is not
      consumed the span remains open until garbage collected
    
    * Remove gen_ai.client.operation.duration from span attributes
    
    Duration is a metrics-only attribute per OpenTelemetry semantic conventions.
    It should be recorded to the histogram but not set as a span attribute.
    
    * Remove duration from _get_response_attributes, pass directly to _capture_response
    
    Duration is a metrics-only attribute. It's now passed directly to _capture_response
    instead of being included in the attributes dict that gets set on the span.
    
    * Remove redundant _close_span cleanup hook in AgentTelemetryLayer
    
    _finalize_stream already calls _close_span() in its finally block,
    so adding it as a separate cleanup hook is redundant.
    
    * Use weakref.finalize to close span when stream is garbage collected
    
    If a user creates a streaming response but never consumes it, the cleanup
    hooks won't run. Now we register a weak reference finalizer that will close
    the span when the stream object is garbage collected, ensuring spans don't
    leak in this scenario.
    
    * Fix _get_finalizers_from_stream to use _result_hooks attribute
    
    Renamed function to _get_result_hooks_from_stream and fixed it to
    look for the _result_hooks attribute which is the correct name in
    ResponseStream class.
    
    * Add missing asyncio import in test_request_info_mixin.py
    
    * Fix leftover merge conflict marker in image_generation sample
    
    * Update integration tests
    
    * Fix integration tests: increase max_iterations from 1 to 2
    
    Tests with tool_choice options require at least 2 iterations:
    1. First iteration to get function call and execute the tool
    2. Second iteration to get the final text response
    
    With max_iterations=1, streaming tests would return early with only
    the function call/result but no final text content.
    
    * Fix duplicate function call error in conversation-based APIs
    
    When using conversation_id (for Responses/Assistants APIs), the server
    already has the function call message from the previous response. We
    should only send the new function result message, not all messages
    including the function call which would cause a duplicate ID error.
    
    Fix: When conversation_id is set, only send the last message (the tool
    result) instead of all response.messages.
    
    * Add regression test for conversation_id propagation between tool iterations
    
    Port test from PR #3664 with updates for new streaming API pattern.
    Tests that conversation_id is properly updated in options dict during
    function invocation loop iterations.
    
    * Fix tool_choice=required to return after tool execution
    
    When tool_choice is 'required', the user's intent is to force exactly one
    tool call. After the tool executes, return immediately with the function
    call and result - don't continue to call the model again.
    
    This fixes integration tests that were failing with empty text responses
    because with tool_choice=required, the model would keep returning function
    calls instead of text.
    
    Also adds regression tests for:
    - conversation_id propagation between tool iterations (from PR #3664)
    - tool_choice=required returns after tool execution
    
    * Document tool_choice behavior in tools README
    
    - Add table explaining tool_choice values (auto, none, required)
    - Explain why tool_choice=required returns immediately after tool execution
    - Add code example showing the difference between required and auto
    - Update flow diagram to show the early return path for tool_choice=required
    
    * Fix tool_choice=None behavior - don't default to 'auto'
    
    Remove the hardcoded default of 'auto' for tool_choice in ChatAgent init.
    When tool_choice is not specified (None), it will now not be sent to the
    API, allowing the API's default behavior to be used.
    
    Users who want tool_choice='auto' can still explicitly set it either in
    default_options or at runtime.
    
    Fixes #3585
    
    * Fix tool_choice=none should not remove tools
    
    In OpenAI Assistants client, tools were not being sent when
    tool_choice='none'. This was incorrect - tool_choice='none' means
    the model won't call tools, but tools should still be available
    in the request (they may be used later in the conversation).
    
    Fixes #3585
    
    * Add test for tool_choice=none preserving tools
    
    Adds a regression test to ensure that when tool_choice='none' is set but
    tools are provided, the tools are still sent to the API. This verifies
    the fix for #3585.
    
    * Fix tool_choice=none should not remove tools in all clients
    
    Apply the same fix to OpenAI Responses client and Azure AI client:
    - OpenAI Responses: Remove else block that popped tool_choice/parallel_tool_calls
    - Azure AI: Remove tool_choice != 'none' check when adding tools
    
    When tool_choice='none', the model won't call tools, but tools should
    still be sent to the API so they're available for future turns.
    
    Also update README to clarify tool_choice=required supports multiple tools.
    
    Fixes #3585
    
    * Keep tool_choice even when tools is None
    
    Move tool_choice processing outside of the 'if tools' block in OpenAI
    Responses client so tool_choice is sent to the API even when no tools
    are provided.
    
    * Update test to match new parallel_tool_calls behavior
    
    Changed test_prepare_options_removes_parallel_tool_calls_when_no_tools to
    test_prepare_options_preserves_parallel_tool_calls_when_no_tools to reflect
    that parallel_tool_calls is now preserved even when no tools are present,
    consistent with the tool_choice behavior.
    
    * Fix ChatMessage API and Role enum usage after rebase
    
    - Update ChatMessage instantiation to use keyword args (role=, text=, contents=)
    - Fix Role enum comparisons to use .value for string comparison
    - Add created_at to AgentResponse in error handling
    - Fix AgentResponse.from_updates -> from_agent_run_response_updates
    - Fix DurableAgentStateMessage.from_chat_message to convert Role enum to string
    - Add Role import where needed
    
    * Fix additional ChatMessage API and method name changes
    
    - Fix ChatMessage usage in workflow files (use text= instead of contents= for strings)
    - Fix AgentResponse.from_updates -> from_agent_run_response_updates in workflow files
    - Fix test files for ChatMessage and Role enum usage
    
    * Fix remaining ChatMessage API usage in test files
    
    * Fix more ChatMessage and Role API changes in source and test files
    
    - Fix ChatMessage in _magentic.py replan method
    - Fix Role enum comparison in test assertions
    - Fix remaining test files with old ChatMessage syntax
    
    * Fix ChatMessage and Role API changes across packages
    
    - Add Role import where missing
    - Fix ChatMessage signature: positional args to keyword args (role=, text=, contents=)
    - Fix Role enum comparisons: .role.value instead of .role string
    - Fix FinishReason enum usage in ag-ui event converters
    - Rename AgentResponse.from_updates to from_agent_run_response_updates in ag-ui
    
    Fixes API compatibility after Types API Review improvements merge
    
    * Fix ChatMessage and Role API changes in github_copilot tests
    
    * Fix ChatMessage and Role API changes in redis and github_copilot packages
    
    - Fix redis provider: Role enum comparison using .value
    - Fix redis tests: ChatMessage signature and Role comparisons
    - Fix github_copilot tests: ChatMessage signature and Role comparisons
    - Update docstring examples in redis chat message store
    
    * Fix ChatMessage and Role API changes in devui package
    
    - Fix executor: ChatMessage signature change
    - Fix conversations: Role enum to string conversion in two places
    - Fix tests: ChatMessage signatures and Role comparisons
    
    * Fix ChatMessage and Role API changes in a2a and lab packages
    
    - Fix a2a tests: Role comparisons and ChatMessage signatures
    - Fix lab tau2 source: Role enum comparison in flip_messages, log_messages, sliding_window
    - Fix lab tau2 tests: ChatMessage signatures and Role comparisons
    
    * Remove duplicate test files from ag-ui/tests (tests are in ag_ui_tests)
    
    * Fix ChatMessage and Role API changes across packages
    
    After rebasing on upstream/main which merged PR #3647 (Types API Review
    improvements), fix all packages to use the new API:
    
    - ChatMessage: Use keyword args (role=, text=, contents=) instead of
      positional args
    - Role: Compare using .value attribute since it's now an enum
    
    Packages fixed:
    - ag-ui: Fixed Role value extraction bugs in _message_adapters.py
    - anthropic: Fixed ChatMessage and Role comparisons in tests
    - azure-ai: Fixed Role comparison in _client.py
    - azure-ai-search: Fixed ChatMessage and Role in source/tests
    - bedrock: Fixed ChatMessage signatures in tests
    - chatkit: Fixed ChatMessage and Role in source/tests
    - copilotstudio: Fixed ChatMessage and Role in tests
    - declarative: Fixed ChatMessage in _executors_agents.py
    - mem0: Fixed ChatMessage and Role in source/tests
    - purview: Fixed ChatMessage in source/tests
    
    * Fix mypy errors for ChatMessage and Role API changes
    
    - durabletask: Use str() fallback in role value extraction
    - core: Fix ChatMessage in _orchestrator_helpers.py to use keyword args
    - core: Add type ignore for _conversation_state.py contents deserialization
    - ag-ui: Fix type ignore comments (call-overload instead of arg-type)
    - azure-ai-search: Fix get_role_value type hint to accept Any
    - lab: Move get_role_value to module level with Any type hint
    
    * Improve CI test timeout configuration
    
    - Increase job timeout from 10 to 15 minutes
    - Reduce per-test timeout to 60s (was 900s/300s)
    - Add --timeout_method thread for better timeout handling
    - Add --timeout-verbose to see which tests are slow
    - Reduce retries from 3 to 2 and delay from 10s to 5s
    
    This ensures individual test timeouts are shorter than the job
    timeout, providing better visibility when tests hang.
    
    With 60s timeout and 2 retries, worst case per test is ~180s.
    
    * Fix ChatMessage API usage in docstrings and source
    
    - Fix ChatMessage positional args in docstrings: _serialization.py, _threads.py, _middleware.py
    - Fix ChatMessage in tau2 runner.py
    - Fix role comparison in _orchestrator_helpers.py to use .value
    - Fix role comparison in _group_chat.py docstring example
    - Fix role assertions in test_durable_entities.py to use .value
    
    * Revert tool_choice/parallel_tool_calls changes - must be removed when no tools
    
    OpenAI API requires tool_choice and parallel_tool_calls to only be
    present when tools are specified. Restored the logic that removes
    these options when there are no tools.
    
    - Restored check in _chat_client.py to remove tool_choice and
      parallel_tool_calls when no tools present
    - Restored same logic in _responses_client.py
    - Reverted test to expect the correct behavior
    
    * fixed issue in tests
    
    * fix: resolve merge conflict markers in ag-ui tests
    
    * fix: restructure ag-ui tests and fix Role/FinishReason to use string types
    
    * fix: streaming function invocation and middleware termination
    
    - Refactor streaming function invocation to use get_final_response() on inner streams
    - Fix MiddlewareTermination to accept result parameter for passing results
    - Fix _AutoHandoffMiddleware to use MiddlewareTermination instead of context.terminate
    - Fix AgentMiddlewareLayer.run() to properly forward function/chat middleware
    - Remove duplicate middleware registration in AgentMiddlewareLayer.__init__
    - Fix exception handling in _auto_invoke_function to properly capture termination
    - Fix mypy errors in core package
    - Update tests to use stream=True parameter for unified run API
    
    * fix all tests command
    
    * Refactor integration tests to use pytest fixtures
    
    - Merge testutils.py into conftest.py for azurefunctions integration tests
    - Merge dt_testutils.py into conftest.py for durabletask integration tests
    - Convert all integration tests to use fixtures instead of direct imports
      (fixes ModuleNotFoundError with --import-mode=importlib)
    - Add sample_helper fixture for azurefunctions tests
    - Add agent_client_factory and orchestration_helper fixtures for durabletask
    - Integration tests now skip with descriptive messages when services unavailable
    - Restructure devui tests into tests/devui/ with proper conftest.py
    - Add test organization guidelines to CODING_STANDARD.md
    - Remove __init__.py from test directories per pytest best practices
    
    * Fix pytest_collection_modifyitems to only skip integration tests
    
    The hook was skipping all tests in the test session, not just
    integration tests. Now it only skips items in the integration_tests
    directory.
    
    * Fix mem0 tests failing on Python 3.13
    
    Use patch.object on the imported module instead of @patch with string
    path to ensure the mock takes effect regardless of import timing.
    
    * fix mem0
    
    * another attempt for mem0
    
    * fix for mem0
    
    * fix mem0
    
    * Increase worker initialization wait time in durabletask tests
    
    Increase from 2 to 8 seconds to allow time for:
    - Python startup and module imports
    - Azure OpenAI client creation
    - Agent registration with DTS worker
    - Worker connection to DTS
    
    This helps prevent test failures in CI where the first tests may run
    before the worker is fully ready to process requests.
    
    * Fix streaming test to use ResponseStream with finalizer
    
    The _consume_stream method now expects a ResponseStream that can provide
    a final AgentResponse via get_final_response(). Update the test to use
    ResponseStream with AgentResponse.from_updates as the finalizer.
    
    * Fix MockToolCallingAgent to use new ResponseStream API and update samples
    
    * small updates to run_stream to run
    
    * fix sub workflow
    
    * temp fix for az func test
    
    ---------
    
    Co-authored-by: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com>
  • [BREAKING] Python: Fix workflow as agent streaming output (#3649)
    * WIP: with_output_from
    
    * Add with_output_from to other modules; next: workflow as agent
    
    * WIP: remove agent run events
    
    * orchestrations
    
    * WIP: update samples; next start at guessing_game_With_human_input.py
    
    * Update all samples
    
    * WIP: consolidate workflow as agent streaming vs non-streaming
    
    * Consolidate workflow as agent streaming vs non-streaming
    
    * Move request info event processing to a share method
    
    * Final pass on the samples
    
    * Fix mypy
    
    * Fix mypy
    
    * Comments
    
    ---------
    
    Co-authored-by: Evan Mattson <35585003+moonbox3@users.noreply.github.com>
  • Python: [BREAKING] Types API Review improvements (#3647)
    * Replace Role and FinishReason classes with NewType + Literal
    
    - Remove EnumLike metaclass from _types.py
    - Replace Role class with NewType('Role', str) + RoleLiteral
    - Replace FinishReason class with NewType('FinishReason', str) + FinishReasonLiteral
    - Update all usages across codebase to use string literals
    - Remove .value access patterns (direct string comparison now works)
    - Add backward compatibility for legacy dict serialization format
    - Update tests to reflect new string-based types
    
    Addresses #3591, #3615
    
    * Simplify ChatResponse and AgentResponse type hints (#3592)
    
    - Remove overloads from ChatResponse.__init__
    - Remove text parameter from ChatResponse.__init__
    - Remove | dict[str, Any] from finish_reason and usage_details params
    - Remove **kwargs from AgentResponse.__init__
    - Both now accept ChatMessage | Sequence[ChatMessage] | None for messages
    - Update docstrings and examples to reflect changes
    - Fix tests that were using removed kwargs
    - Fix Role type hint usage in ag-ui utils
    
    * Remove text parameter from ChatResponseUpdate and AgentResponseUpdate (#3597)
    
    - Remove text parameter from ChatResponseUpdate.__init__
    - Remove text parameter from AgentResponseUpdate.__init__
    - Remove **kwargs from both update classes
    - Simplify contents parameter type to Sequence[Content] | None
    - Update all usages to use contents=[Content.from_text(...)] pattern
    - Fix imports in test files
    - Update docstrings and examples
    
    * Rename from_chat_response_updates to from_updates (#3593)
    
    - 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
    
    * Remove try_parse_value method from ChatResponse and AgentResponse (#3595)
    
    - Remove try_parse_value method from ChatResponse
    - Remove try_parse_value method from AgentResponse
    - Remove try_parse_value calls from from_updates and from_update_generator methods
    - Update samples to use try/except with response.value instead
    - Update tests to use response.value pattern
    - Users should now use response.value with try/except for safe parsing
    
    * Add agent_id to AgentResponse and clarify author_name documentation (#3596)
    
    - Add agent_id parameter to AgentResponse class
    - Document that author_name is on ChatMessage objects, not responses
    - Update ChatResponse docstring with author_name note
    - Update AgentResponse docstring with author_name note
    
    * Simplify ChatMessage.__init__ signature (#3618)
    
    - Make contents a positional argument accepting Sequence[Content | str]
    - Auto-convert strings in contents to TextContent
    - Remove overloads, keep text kwarg for backward compatibility with serialization
    - Update _parse_content_list to handle string items
    - Update all usages across codebase to use new format: ChatMessage("role", ["text"])
    
    * Allow Content as input on run and get_response
    
    - Update prepare_messages and normalize_messages to accept Content
    - Update type signatures in _agents.py and _clients.py
    - Add tests for Content input handling
    
    * Fix ChatMessage usage across packages and samples
    
    Update all remaining ChatMessage(role=..., text=...) to use new
    ChatMessage('role', ['text']) signature.
    
    * Fix Role string usage and response format parsing
    
    - Fix redis provider: remove .value access on string literals
    - Fix durabletask ensure_response_format: set _response_format before accessing .value
    
    * Fix ollama .value and ai_model_id issues, handle None in content list
    
    - Fix ollama _chat_client: remove .value on string literals
    - Fix ollama _chat_client: rename ai_model_id to model_id
    - Fix _parse_content_list: skip None values gracefully
    
    * Fix A2AAgent type signature to include Content
    
    * Fix Role/FinishReason NewType dict annotations and improve test coverage to 95%
    
    * Fix mypy errors for Role/FinishReason NewType usage
    
    * Fix Role.TOOL and Role.ASSISTANT usage in _orchestrator_helpers.py
    
    * Fix Role NewType usage in durabletask _models.py
  • Python: added generic types to ChatOptions and ChatResponse/AgentResponse for Response Format (#3305)
    * added generic types to ChatOptions and ChatResponse/AgentResponse for response format
    
    * fix typevar import
    
    * fix for older python versions
    
    * fix missing import
    
    * fixed imports
    
    * fixed mypy
    
    * mypy fix
  • Python: [Breaking] Simplified Content types to a single class with classmethod constructors. (#3252)
    * ported Content to a new model
    
    * fixed linting
    
    * fixes
    
    * fixed data format handling
    
    * fix for 3.10 mypy
    
    * fix
    
    * fix int test
  • Python: fix(ag-ui): add MCP tool support for AG-UI approval flows (#3212)
    * add MCP tool support for AG-UI approval flows
    
    * use attribute in place of property
  • Python: [BREAKING]: Introducing Options as TypedDict and Generic (#3140)
    * WIP typeddict for options
    
    * updated all clients and ChatAgents
    
    * updated everything
    
    * added ADR
    
    * fix mypy
    
    * proper typevar imports
    
    * fixed import
    
    * fixed other imports
    
    * slight update in the sample
    
    * updated from feedback
    
    * fixes
    
    * fixed missing covariants and test fixes
    
    * fixed typing
    
    * updated anthropic thinking config
    
    * ruff fixes
    
    * fixed int tests
    
    * fix tests and mypy
    
    * updated integration tests
    
    * updated docstring and test fix
    
    * improved options handling in obser
    
    * mypy fix
    
    * updated a host of integration tests
    
    * fix tests
    
    * bedrock fix
  • Python: [BREAKING]: removed display_name, renamed context_providers, middleware and AggregateContextProvider (#3139)
    * removed display_name, renamed context_providers, middleware and AggregateContextProvider
    
    * fixes
    
    * fixed test
    
    * testfix
    
    * removed mistakenly put back test
    
    * updated new test
    
    * rename middlewares to middleware
    
    * middleware fixes
  • Python: Improve DevUI, add Context Inspector view as new tab under traces (#2742)
    * Improve DevUI, add Context Inspector view as new tab under traces
    
    * fix mypy errors
    
    * fix: Handle stale MCP connections in DevUI executor
    
    MCP tools can become stale when HTTP streaming responses end - the underlying
    stdio streams close but `is_connected` remains True. This causes subsequent
    requests to fail with `ClosedResourceError`.
    
    Add `_ensure_mcp_connections()` to detect and reconnect stale MCP tools before
    agent execution. This is a workaround for an upstream Agent Framework issue
    where connection state isn't properly tracked.
    
    Fixes MCP tools failing on second HTTP request in DevUI.
    
    fixes  #1476 #1515 #2865
    
    * fix #1572 report import dependency errors more clearly
    
    * Ensure there is streaming toggle where users can select streaming vs non streaming mode in devui . Fixes .NET: [Python] DevUI tool call rendering in non-streaming mode?
    
    * remove unused dead code
    
    * improve ux - workflows with agents show a chat component in execution timelien, also ensure magentic final output shows correctly
    
    * update ui build
    
    * update devui to use instrumentation instead of tracing, other instrumentation and type/instance check fixes
  • Python: cleanup and refactoring of chat clients (#2937)
    * refactoring and unifying naming schemes of internal methods of chat clients
    
    * set tool_choice to auto
    
    * fix for mypy
    
    * added note on naming and fix #2951
    
    * fix responses
    
    * fixes in azure ai agents client
  • Python: [BREAKING] Observability updates (#2782)
    * fixes Python: Add env_file_path parameter to setup_observability() similar to AzureOpenAIChatClient
    Fixes #2186
    
    * WIP on updates using configure_azure_monitor
    
    * improved setup and clarity
    
    * fixed root .env.example
    
    * revert changes
    
    * updated files
    
    * updated sample
    
    * updated zero code
    
    * test fixes and fixed links
    
    * fix devui
    
    * removed planning docs
    
    * added enable method and updated readme and samples
    
    * clarified docstring
    
    * add return annotation
    
    * updated naming
    
    * update capatilized version
    
    * updated readme and some fixes
    
    * updated decorator name inline with the rest
    
    * feedback from comments addressed
  • Python: Title: DevUI Fix WorkflowFailedEvent error extraction (#2706)
    * Title: Fix WorkflowFailedEvent error extraction to use details instead of error Body:
    Summary
    Fixed WorkflowFailedEvent mapping to extract error message from details.message instead of non-existent error attribute
    Added support for including details.extra context in error messages when present
    Problem
    The WorkflowFailedEvent handler in _mapper.py was reading event.error, but WorkflowFailedEvent uses a details attribute (of type WorkflowErrorDetails), not error. This caused all workflow failures to display "Unknown error" in the UI instead of the actual error message.
    Fix
    Updated the handler to match the pattern already used by ExecutorFailedEvent:
    Read from event.details instead of event.error
    Extract details.message for the error text
    Include details.extra context when available
    
    * improve error handling consistency
  • Python: DevUI, Fix message serialization issue, improve tests (#2674)
    * fix message serialization issue, improve tests for devui
    
    * update tests
  • Python: DevUI fixes : Add multimodal input support for workflows and refactor chat input (#2593)
    * show app version in devui .NET: Python: Improved Versioning for DevUI
    Fixes #2059
    
    * feat: Add multimodal input support for workflows and refactor chat input
    
    This PR adds support for multimodal content (images, files) in workflow
    inputs and refactors the chat input into a reusable component.
    
    ## Multimodal Workflow Support
    - Add `isChatMessageSchema()` to detect ChatMessage input schemas
    - Update `RunWorkflowButton` to use `ChatMessageInput` for ChatMessage workflows
    - Wrap multimodal content in OpenAI message format for backend processing
    - Add `_is_openai_multimodal_format()` to detect OpenAI ResponseInputParam
    - Update `_parse_workflow_input()` to route multimodal input through
      existing `_convert_input_to_chat_message()` converter
    
    ## Reusable ChatMessageInput Component
    - Extract chat input logic from agent-view into `ChatMessageInput` component
    - Support file upload, drag & drop, paste handling, and attachments
    - Add `useDragDrop` hook for parent-level drag handling with full-area
      drop zones
    - Refactor agent-view to use the new shared component
    
    ## Other Improvements
    - Add `isStreaming` prop to executor nodes for animation control
    - Clean up unused imports and state variables in agent-view
    - Add tests for multimodal workflow input handling
    
    Fixes workflow input not receiving images when using AgentExecutor nodes.
    
    * add self loop edge, fix #2470
    
    * fix test
  • Python: make tool call view optional in DevUI + other link fixes (#2243)
    * make tool call view optional in devui + other link fixes
    
    * fix #2310, ensure correct port is shown in command
    
    * fix dialog bug
    
    * ensure executor ids are tracked per items, fix bug where data from concurrent executors where not seperated properly fix #2351
    
    * fix: Enable multi-round human-in-the-loop (HIL) in DevUI workflows
    
    - Backend: Enrich RequestInfoEvents with response schemas in send_responses_streaming path
    - Frontend: Replace old HIL requests with new ones instead of accumulating them
    - Frontend: Fix HIL response state management to prevent sending stale request responses
    
    This allows workflows to properly handle sequential HIL requests, showing only the
    current request to users and progressing through multiple input rounds correctly.
    
    fixes #2334
    
    * fix bug to ensure in memory entities cannot be reloaded in ui
  • Python: Clean up imports (#2318)
    * chore: tidy imports
    
    * Update python/packages/azurefunctions/agent_framework_azurefunctions/_errors.py
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Update python/packages/azurefunctions/agent_framework_azurefunctions/_callbacks.py
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * chore: revert stub file change
    
    * chore: trigger pre-commit hook, re-add `annotations` import
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • Python: fix for Incomplete URL substring sanitization (#2274)
    * Potential fix for code scanning alert no. 29: Incomplete URL substring sanitization
    
    Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
    
    * Python: Fix URL parsing to handle trailing punctuation in deployment progress detection (#2296)
    
    * Initial plan
    
    * Fix URL parsing to handle trailing punctuation correctly
    
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    
    * updated lock
    
    ---------
    
    Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
    Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: eavanvalkenburg <13749212+eavanvalkenburg@users.noreply.github.com>
    Co-authored-by: Victor Dibia <chuvidi2003@gmail.com>
  • Python: Fix HIL regression (#2167)
    * fix devui regression from #2021 where all input is stringified but devui HIL input does not handle stringified json strings correctly.
    
    * update incorrect test
    
    * add devui hil input tests
  • .NET: Expose more agent metadata through DevUI discovery endpoint (#2138)
    * Exposes more agent metadata through DevUI discovery endpoint
    
    * Exposes more agent metadata through DevUI discovery endpoint
    
    * pr feedback
    
    * pr feedback
    
    * Don't expose Workflows as agents to DevUI
  • Python: .Net: Dotnet devui compatibility fixes (#2026)
    * DevUI: Add OpenAI Responses API proxy support with enhanced UI features
    
    This commit adds support for proxying requests to OpenAI's Responses API,
    allowing DevUI to route conversations to OpenAI models when configured to enable testing.
    
    Backend changes:
    - Add OpenAI proxy executor with conversation routing logic
    - Enhance event mapper to support OpenAI Responses API format
    - Extend server endpoints to handle OpenAI proxy mode
    - Update models with OpenAI-specific response types
    - Remove emojis from logging and CLI output for cleaner text
    
    Frontend changes:
    - Add settings modal with OpenAI proxy configuration UI
    - Enhance agent and workflow views with improved state management
    - Add new UI components (separator, switch) for settings
    - Update debug panel with better event filtering
    - Improve message renderers for OpenAI content types
    - Update types and API client for OpenAI integration
    
    * update ui, settings modal and workflow input form, add register cleanup hooks.
    
    * add workflow HIL support, user mode, other fixes
    
    * feat(devui): add human-in-the-loop (HIL) support with dynamic response schemas
    
    Implement  HIL workflow support allowing workflows to pause for user input
    with dynamically generated JSON schemas based on response handler type hints.
    
    Key Features:
    - Automatic response schema extraction from @response_handler decorators
    - Dynamic form generation in UI based on Pydantic/dataclass response types
    - Checkpoint-based conversation storage for HIL requests/responses
    - Resume workflow execution after user provides HIL response
    
    Backend Changes:
    - Add extract_response_type_from_executor() to introspect response handlers
    - Enrich RequestInfoEvent with response_schema via _enrich_request_info_event_with_response_schema()
    - Map RequestInfoEvent to response.input.requested OpenAI event format
    - Store HIL responses in conversation history and restore checkpoints
    
    Frontend Changes:
    - Add HILInputModal component with SchemaFormRenderer for dynamic forms
    - Support Pydantic BaseModel and dataclass response types
    - Render enum fields as dropdowns, strings as text/textarea, numbers, booleans, arrays, objects
    - Display original request context alongside response form
    
    Testing:
    - Add  tests for checkpoint storage (test_checkpoints.py)
    - Add schema generation tests for all input types (test_schema_generation.py)
    - Validate end-to-end HIL flow with spam workflow sample
    
    This enables workflows to seamlessly pause execution and request structured user input
    with type-safe, validated forms generated automatically from response type annotations.
    
    * improve HIL support, improve workflow execution view
    
    * ui updates
    
    * ui updates
    
    * improve HIL for workflows, add auth and view modes
    
    * update workflow
    
    * security improvements , ui fixes
    
    * fix mypy error
    
    * update loading spinner in ui
    
    * DevUI: Serialize workflow input as string to maintain conformance with OpenAI Responses format
    
    * Phase 1: Add /meta endpoint and fix workflow event naming for .NET DevUI compatibility
    
    * additional fixes for .NET DevUI workflow visualization item ID tracking
    
    **Problem:**
    .NET DevUI was generating different item IDs for ExecutorInvokedEvent and
    ExecutorCompletedEvent, causing only the first executor to highlight in the
    workflow graph. Long executor names and error messages also broke UI layout.
    
    **Changes:**
    - Add ExecutorActionItemResource to match Python DevUI implementation
    - Track item IDs per executor using dictionary in AgentRunResponseUpdateExtensions
    - Reuse same item ID across invoked/completed/failed events for proper pairing
    - Add truncateText() utility to workflow-utils.ts
    - Truncate executor names to 35 chars in execution timeline
    - Truncate error messages to 150 chars in workflow graph nodes
    
    ** Details:**
    - ExecutorActionItemResource registered with JSON source generation context
    - Dictionary cleaned up after executor completion/failure to prevent memory leaks
    - Frontend item tracking by unique item.id supports multiple executor runs
    - All changes follow existing codebase patterns and conventions
    
    Tested with review-workflow showing correct executor highlighting and state
    transitions for sequential and concurrent executors.
    
    * format fixes, remove cors tests
    
    * remove unecessary attributes
    
    ---------
    
    Co-authored-by: Mark Wallace <127216156+markwallace-microsoft@users.noreply.github.com>
    Co-authored-by: Reuben Bond <reuben.bond@gmail.com>
  • Python: DevUI: Add OpenAI Responses API proxy support + HIL for Workflows (#1737)
    * DevUI: Add OpenAI Responses API proxy support with enhanced UI features
    
    This commit adds support for proxying requests to OpenAI's Responses API,
    allowing DevUI to route conversations to OpenAI models when configured to enable testing.
    
    Backend changes:
    - Add OpenAI proxy executor with conversation routing logic
    - Enhance event mapper to support OpenAI Responses API format
    - Extend server endpoints to handle OpenAI proxy mode
    - Update models with OpenAI-specific response types
    - Remove emojis from logging and CLI output for cleaner text
    
    Frontend changes:
    - Add settings modal with OpenAI proxy configuration UI
    - Enhance agent and workflow views with improved state management
    - Add new UI components (separator, switch) for settings
    - Update debug panel with better event filtering
    - Improve message renderers for OpenAI content types
    - Update types and API client for OpenAI integration
    
    * update ui, settings modal and workflow input form, add register cleanup hooks.
    
    * add workflow HIL support, user mode, other fixes
    
    * feat(devui): add human-in-the-loop (HIL) support with dynamic response schemas
    
    Implement  HIL workflow support allowing workflows to pause for user input
    with dynamically generated JSON schemas based on response handler type hints.
    
    Key Features:
    - Automatic response schema extraction from @response_handler decorators
    - Dynamic form generation in UI based on Pydantic/dataclass response types
    - Checkpoint-based conversation storage for HIL requests/responses
    - Resume workflow execution after user provides HIL response
    
    Backend Changes:
    - Add extract_response_type_from_executor() to introspect response handlers
    - Enrich RequestInfoEvent with response_schema via _enrich_request_info_event_with_response_schema()
    - Map RequestInfoEvent to response.input.requested OpenAI event format
    - Store HIL responses in conversation history and restore checkpoints
    
    Frontend Changes:
    - Add HILInputModal component with SchemaFormRenderer for dynamic forms
    - Support Pydantic BaseModel and dataclass response types
    - Render enum fields as dropdowns, strings as text/textarea, numbers, booleans, arrays, objects
    - Display original request context alongside response form
    
    Testing:
    - Add  tests for checkpoint storage (test_checkpoints.py)
    - Add schema generation tests for all input types (test_schema_generation.py)
    - Validate end-to-end HIL flow with spam workflow sample
    
    This enables workflows to seamlessly pause execution and request structured user input
    with type-safe, validated forms generated automatically from response type annotations.
    
    * improve HIL support, improve workflow execution view
    
    * ui updates
    
    * ui updates
    
    * improve HIL for workflows, add auth and view modes
    
    * update workflow
    
    * security improvements , ui fixes
    
    * fix mypy error
    
    * update loading spinner in ui
    
    ---------
    
    Co-authored-by: Mark Wallace <127216156+markwallace-microsoft@users.noreply.github.com>
  • Python: DevUI: Use metadata.entity_id instead of model field (#1984)
    * DevUI: Use metadata.entity_id for agent/workflow name instead of model field
    
    * OpenAI Responses: add explicit request validation
    
    * Review feedback
  • .NET: DevUI: Use relative URLs for backend API by default (#2005)
    * DevUI: Use relative URLs for backend API by default
    
    * dotnet format
    
    * rebuild application
  • .NET: Add DevUI package for .NET (#1603)
    * Implement DevUI
    
    * Review feedback
    
    * Fix build
  • Python: [BREAKING] Python: Intro group chat and refactor orchestrations. Fix as_agent(). Standardize orchestration start msg types. (#1538)
    * Intro group chat and refactor magentic. Fix as_agent()
    
    * Cleanup and improvements
    
    * Add as_agent docstring clarification
    
    * Standardize orchestration messages to use agent-style inputs.
    
    * Simplify group chat constructs
    
    * Further cleanup
    
    * Add sk to af group chat migration sample. Update README.
    
    * Improvements and simplifications
    
    * consolidating shared orchestration logic
    
    * Further clean up
    
    * Add group chat sample
    
    * Improve typing
    
    * Fix test imports
    
    * Fix readme links
    
    * Cleanup per PR Feedback
  • Python: DevUI Fix Serialization, Timestamp and Other Issues (#1584)
    * refactor(devui): adopt standard OpenAI lifecycle events for agents and workflows
    
    - Replace custom workflow events with OpenAI Responses API standard lifecycle events
    - Add AgentStartedEvent, AgentCompletedEvent, AgentFailedEvent for clean separation
    - Implement ExecutorActionItem for workflow executor tracking
    - Convert informational events to trace events to reduce noise
    - Update README mapper table with comprehensive event mappings
    - Maintain full backward compatibility with legacy events
    
    * fix(devui): resolve timestamp overwriting and Content serialization errors
    
    - Fix tool call timestamps being overwritten on each render (#1483)
    - Add recursive Content serialization to handle ChatMessage and nested objects (#1548)
    - Implement proper MCP tool cleanup on server shutdown
    - Add timestamp field to function_result.complete events
    - Enhance credential and client resource cleanup
    
    Fixes #1483, #1548
    Partial improvements for #1476
  • Python: Add Function Approval UI to DevUI (#1401)
    * ensure function aproval is parsed correctly
    
    * udpate ui, add deployment guide button, other debug panel fixes
    
    * feat(devui): Implement lazy loading architecture with enhanced security and state management
    
    Major architectural improvements to DevUI for better performance, security, and developer experience:
    
    Performance & Architecture:
    - Implement lazy loading for entity discovery - entities loaded on-demand instead of at startup
    - Add hot reload capability for development workflow via new reload endpoint
    - Reduce startup time and memory footprint by deferring module imports
    
    Security Enhancements:
    - Remove remote entity loading capabilities (POST /v1/entities/add, DELETE endpoints)
    - DevUI now strictly local development tool - no remote code execution
    - Add explicit security documentation and best practices in README
    
    Frontend Improvements:
    - Migrate to Zustand for centralized state management (replacing prop drilling)
    - Add lightweight zero-dependency markdown renderer with code block copy support
    - Improve gallery UX with setup instructions modal instead of direct URL loading
    - Enhanced message UI with copy functionality and better token usage display
    
    Testing & Quality:
    - Expand test coverage for lazy loading, type detection, and cache invalidation
    - Add comprehensive tests for new behaviors (+231 lines of test code)
    - Improve type safety and documentation throughout
    
    Breaking Changes:
    - Remote entity loading via URLs is no longer supported
    - Entities must be loaded from local filesystem only
    
    * update ui issues, uupdate test descripion
  • Python: DevUI - Internal Refactor, Conversations API support, and per… (#1235)
    * Python: DevUI - Internal Refactor, Conversations API support, and performance improvements
    
    Comprehensive refactor of DevUI package including samples relocation,
    frontend reorganization, OpenAI Conversations API support, and critical
    performance and code quality improvements.
    
    Key Changes:
    
    Architecture & Organization
    - Moved DevUI samples to python/samples/getting_started/devui/
    - Consolidated with other framework samples for better discoverability
    - Added .env.example files and comprehensive README
    - Restructured frontend components into feature-based folders (agent, workflow, gallery, layout)
    - Created new OpenAI-compliant message renderers (devui should render oai responses types primarily)
    
    New Features
    - Added _conversations.py (467 lines) - Full conversation storage abstraction, replaces the /threads endpoint to better match oai conversations api
    - Implements OpenAI Conversations API for thread management, Supports in-memory and extensible storage backends
    
    API Simplification
    - Use 'model' field as entity_id (agent/workflow name) instead of extra_body
    - Use standard OpenAI 'conversation' field for conversation context.
    
    Performance & Quality Improvements
    - Improved context management in MessageMapper with bounded memory (~500KB max)
    - Implemented hybrid LRU + cleanup approach to prevent unbounded memory growth
    - General QOL improvement - Eliminated ~150 lines of dead/duplicate code, Consolidated helper functions into _utils.py, Extracted magic numbers to module-level constants, Optimized conversation item lookups with index-based approach
    
    Testing
    - Added test_conversations.py (13 tests)
    - Added test_performance_fixes.py (9 tests)
    - Updated existing tests for code consolidation
    - 53 tests passing
    
    Impact: 76 files changed: +4,106 insertions, -2,373 deletions
    All linting and formatting checks passing. No breaking changes - backward compatible.
    
    Migration: Samples moved to python/samples/getting_started/devui/
    
    * readme lint fixes
    
    * initial support for function approval and minor ui fixes
  • Python: [BREAKING] parameter naming and other fixes (#1255)
    * parameter naming and other fixes
    
    * fix test
    
    * fix azure openai responses decorator ordering
    
    * fix test
    
    * fix mypy
    
    * fixes in options handling
    
    * fix tests
    
    * final fixes
    
    * exclude macos tests
    
    * fix model param
  • Python: DevUI improvements. (#1091)
    * enable deeplinking in ui, add agent details to entity info, add usage data, add middleware example in samples and foundry agent.
    
    * update ui build
    
    * Update python/packages/devui/frontend/src/components/workflow/workflow-input-form.tsx
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Update python/packages/devui/pyproject.toml
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Update python/packages/devui/pyproject.toml
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * imporove mapping for agent nodes and serialiation for agent run events
    
    * lint fixes
    
    * update pyproj toml and ui updates
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • Python: Default DevUI workflows to string input when start node is auto-wrapped agent (#1143)
    * DevUI workflows default to string input when start node is AgentExecutor
    
    * Remove unnecessary sample
    
    * Fix lint issue
  • Python: Bug fixes for devui serialization and agent structured outputs (#1055)
    * Bug fixes for devui serialization and agent structured outputs
    
    * Fix typing
    
    * Add mapper serialization unit tests
  • Python:DevUI Fixes (#1035)
    * fix event reset on thread change, enable multiline input, enable pasting of files and screenshots
    
    * UI updates and improved remove discovery
    
    * ui and other fixes
    
    ---------
    
    Co-authored-by: Evan Mattson <35585003+moonbox3@users.noreply.github.com>
  • Python: [Breaking] removed pydantic from types and workflows (#917)
    * removed pydantic from types
    
    * fix test
    
    * fix test
    
    * fix tests
    
    * fix assistants client
    
    * Remove Pydantic usage from workflow code.
    
    * updated pydantic removal
    
    * updated lock and test fixes
    
    * fix mypy
    
    * updated build system
    
    * updated chat client parsing
    
    * fix broken test
    
    ---------
    
    Co-authored-by: Evan Mattson <evan.mattson@microsoft.com>
  • Python: [BREAKING] cleanup of thread API and serialization (#893)
    * cleanup of threads and serialization
    
    * fix for sliding window
    
    * fix redis test
    
    * updated from comments
    
    * updated context provider and threads
    
    * updated lock
    
    * add asyncio default
    
    * fix redis tests
    
    * fix tests
    
    * fix tests
    
    * renamed to invoking
    
    * fixed tests
    
    * fix for instructions
  • [BREAKING] Python: Observability cleanup (#905)
    * Further observability cleanup and update telemetry samples
    
    * Add VS Code Extension config
    
    * Fix unit tests
    
    * Fix unit tests
    
    * Add more comments
    
    * Remove live metric
  • Python: [BREAKING] updated structure and samples (#875)
    * updated structure and samples
    
    * updated names and removed cross tests
    
    * updated projects etc
    
    * updated tests
    
    * updated test
    
    * test fixes
    
    * removed devui for now
    
    * updated all-tests task
    
    * removed old style configs
    
    * remove coverage from tests
    
    * updated to unit tests with all-tests
    
    * updated foundry everywhere
    
    * fix azure ai tests
    
    * fix merge tests
    
    * fix mypy
  • Python: Telemetry and observability follow-up (#833)
    * updated telemetry work
    
    * updated telemetry
    
    * slight improvement
    
    * updated tests
    
    * fixes for telemetry
    
    * fixes for mypy
    
    * added settings setup to runner to avoid error
    
    * streamline usage
    
    * updated tests
    
    * updated tests
    
    * further refinement
    
    * fix dumped item for otel
    
    * removed enable_workflow_otel
    
    * final fixes
    
    * final fixes
    
    * updated samples
    
    * removed exporters
    
    * fix tests
    
    * fixed last import'
    
    * fixed devui
  • Python: Add DevUI to AgentFramework (#781)
    * add initial backend service code for devui
    
    * add tests
    
    * add frontendcode
    
    * ui updates
    
    * update readme
    
    * ui updates and tweaks
    
    * update ui bundle
    
    * improve ui, add react flow base
    
    * add react flow ui, fix background
    
    * update ui, fix introspection bug
    
    * update readme
    
    * update ui build
    
    * add support for multimodal input - both backend and frontend
    
    * update ui build
    
    * refactor as main framework package
    
    * backend and tests refactor
    
    * ui build update
    
    * ui build update and refactor
    
    * update pyproject.toml, update uv.lock
    
    * update ui build
    
    * ui update to fit oai responses types
    
    * add backend updat and readme update
    
    * mypy and other fixes
    
    * add intial dev guide
    
    * update ui and fix workflow bug
    
    * update ui build, add thread support
    
    * type fixes
    
    * update workflow view
    
    * update uv.lock
    
    * fix workflow iport errors
    
    * lint and other fixes
    
    * mypy fixes
    
    * minor update
    
    * update ui build
    
    * refactor to use oai dependencies directly, update examples to samples, improve typing
    
    * readme update
    
    * update ui and ui build
    
    * fix workflow pyright error
    
    * update ui, fix issues with run workflow placement, miniamp menu, etc
    
    * make samples integrate serve
    
    ---------
    
    Co-authored-by: Chris <66376200+crickman@users.noreply.github.com>
    Co-authored-by: Eric Zhu <ekzhu@users.noreply.github.com>