Commit Graph

86 Commits

  • 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: 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
  • 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
  • .NET: Python: [BREAKING] Renamed Github to GitHub (#3486)
    * Renamed Github to GitHub
    
    * Small fix
    
    * Updated package versions
  • 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
  • Bump tar from 7.4.3 to 7.5.3 in /python/packages/devui/frontend (#3267)
    Bumps [tar](https://github.com/isaacs/node-tar) from 7.4.3 to 7.5.3.
    - [Release notes](https://github.com/isaacs/node-tar/releases)
    - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
    - [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.3)
    
    ---
    updated-dependencies:
    - dependency-name: tar
      dependency-version: 7.5.3
      dependency-type: indirect
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
  • Python: Update package version (#3258)
    * package version 260116
    
    * removed name tags
  • 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
  • Bump js-yaml from 4.1.0 to 4.1.1 in /python/packages/devui/frontend (#3123)
    Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
    - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)
    
    ---
    updated-dependencies:
    - dependency-name: js-yaml
      dependency-version: 4.1.1
      dependency-type: indirect
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
  • Python: Bump python version to 1.0.0b260107 for a release (#3128)
    * Bump python version to 1.0.0b260107 for a release
    
    * Update changelog
  • 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: Updated package versions (#3024)
    * Updated package versions
    
    * Updated changelog
  • Python: Bump Py version to 1.0.0b251218 for a release. Update CHANGELOG (#2968)
    * Bump Py version to 1.0.0b251218 for a release. Update CHANGELOG
    
    * update lock
    
    * Fix formatting
    
    * Fix ChatKit typing
  • 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: Updated package versions (#2784)
    * Updated package versions
    
    * Small fix
  • Python: Updated package versions (#2737)
    * Updated package versions
    
    * Updated changelog
  • 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>
  • Bump js-yaml from 4.1.0 to 4.1.1 in /python/packages/devui/frontend (#2230)
    Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
    - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
    - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)
    
    ---
    updated-dependencies:
    - dependency-name: js-yaml
      dependency-version: 4.1.1
      dependency-type: indirect
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Chris <66376200+crickman@users.noreply.github.com>
  • Python: Add checkpoint save and restore hooks to executor (#2097)
    * Add checkpoint hooks
    
    * Deprecate get_executor_state and set_executor_state
    
    * Fix tests and samples
    
    * Add doc strings
    
    * Add sample
    
    * Fix import
    
    * Address comments and fix tests
    
    * Address comments
    
    * conditional import
  • Python: Updated package versions (#2238)
    * Updated package versions
    
    * Small fix
    
    * Small fix
  • 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
  • Python: Updated package versions (#2165)
    * Updated package versions
    
    * Reverted package version update for ag-ui
    
    * Updated changelog file
  • .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>