Files
copilotkit__copilotkit/sdk-python
Ben Taylor cd0d38a073 fix(sdk-python): restore frontend tool history faithfully in LangGraph middleware (#5308)
## Description

Fixes the LangGraph middleware "lying" to the agent about frontend tool
execution (#4759). When a model turn calls a `useFrontendTool` handler,
the middleware strips the FE tool calls so the backend `ToolNode` only
runs calls it actually made, then rehydrates them afterward. Previously
the rehydration could leave the restored AI message and its tool history
inconsistent, so providers that require every tool call to have a
matching result would break, and the agent saw an incorrect picture of
what executed.

## Changes

- `_restore_intercepted_tool_call_history` rebuilds the intercepted FE
tool calls with synthetic `ToolMessage` results only for the restored
model history (so providers that require every `tool_call` to have a
result stay valid), and preserves the original AI message's `name`,
`additional_kwargs`, and `response_metadata` on restore.
- Tracks `original_tool_calls` in the CopilotKit private state so the
original call set is restored exactly.

## Testing

`uv run pytest tests/test_copilotkit_lg_middleware.py` — 68 passed,
including new cases asserting the restored AI message keeps its
tool-call ids, name, `additional_kwargs`, and `response_metadata`, and
that tool results line up with their calls.

Closes #4759

AI was used for assistance.
2026-08-17 12:54:26 -05:00
..
2025-02-28 12:21:54 +01:00
2026-05-28 14:39:07 -07:00

CopilotKit Python SDK

PyPI version License: MIT

The official Python SDK for CopilotKit - build AI copilots and agents into your applications.

Features

  • 🚀 Easy integration with LangGraph and LangChain
  • 🔄 Built-in support for stateful conversations
  • 🛠 Extensible agent framework
  • 🔌 FastAPI-ready endpoints
  • 🤝 Optional CrewAI integration

Installation

pip install copilotkit

With CrewAI support:

pip install "copilotkit[crewai]"

Quick Start

from copilotkit import Copilot

# Initialize a copilot
copilot = Copilot()

# Add your tools and configure the copilot
copilot.add_tool(my_custom_tool)

# Run the copilot
response = copilot.run("Your task description here")

Documentation

For detailed documentation and examples, visit copilotkit.ai

Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support


Built with ❤️ by the CopilotKit team