# chak-ai

> A simple, yet handy, LLM gateway.

- **URL**: https://www.freshcrate.ai/projects/chak-ai
- **Author**: zhixiangxue
- **Category**: Infrastructure
- **Latest version**: `v0.4.1` (2026-06-03)
- **License**: MIT
- **Source**: https://github.com/zhixiangxue/chak-ai
- **Language**: Python
- **GitHub**: 212 stars, 2 forks
- **Registry**: github
- **Tags**: `python`

## Description

A simple, yet handy, LLM gateway.

## Recent releases

| Version | Date | Urgency | Changes |
| --- | --- | --- | --- |
| `v0.4.1` | 2026-06-03 | High | ## MiniMax Provider migrated to Anthropic API  MiniMax provider now uses the Anthropic-compatible API (`/anthropic` endpoint), as officially recommended by MiniMax. The old OpenAI-compatible `/v1` endpoint is no longer supported.  ### Breaking Changes  - MiniMax default `base_url` changed to `https://api.minimaxi.com/anthropic` (China) / `https://api.minimax.io/anthropic` (International) - `OpenAICompatibleProvider` import path moved from `chak.providers.llm.base` to `chak.providers.llm.o |
| `v0.3.7` | 2026-05-28 | High | ## Bug Fixes  **ToolManager: per-skill state isolation under parallel activation**  `ToolManager` tracked the active skill in a single slot (`_active_skill`) and a flat `_selected_methods` list. When the LLM activated two `SkillBase` skills in the same parallel `tool_calls` batch, the concurrent coroutines overwrote each other's state and the next round failed Stage-3 dispatch with `Tool not found: <method>`.  Fix: replace the single slot with per-skill dicts keyed by skill name plus a |
| `v0.3.6` | 2026-04-28 | High | fix: logger charset bug |
| `v0.3.3` | 2026-04-22 | High | # chakpy 0.3.3 Release Notes  Date: 2026-04-22  ---  ## Bug fix: streaming mode attachments not propagated to AIMessage  **Affected version**: 0.3.2 **Fixed in**: 0.3.3  In streaming mode (`stream=True` or `event=True`), when a tool call returned `attachment://` URIs, the resulting `Attachment` objects were correctly placed on the final `MessageChunk` but **not** on the `AIMessage`. As a result, `response.attachments` was always empty for any streaming call that involved tool-produced |
| `v0.3.2` | 2026-04-22 | High | # chakpy 0.3.2 Release Notes  Date: 2026-04-22  ---  ## 1. Built-in Standard Tools (`chak.tools.std`)  chak now ships **7 atomic tools** out of the box. Import and pass them directly into `tools=[]` — no wrapping, no extra setup required.  ```python from chak.tools.std import Bash, Python, FileSystem, Web, Search, Http, Pdf ```  \| Tool \| Class \| What it does \| \|------\|-------\|--------------\| \| Shell \| `Bash` \| Run shell commands (PowerShell on Windows, bash on Unix) \| \| Code Int |
| `v0.3.1` | 2026-04-09 | High | **Breaking Change — Human-in-the-Loop upgrade**  `tool_approval_handler` has been replaced by `hitl_handler`. The old handler returned a plain `bool`; the new one returns `HITLDecision`, giving you three control paths:  - `HITLDecision.allow()` — proceed unchanged - `HITLDecision.allow(overrides={...})` — proceed with argument rewrites - `HITLDecision.abort()` — cancel the tool call; the LLM receives a cancellation notice  Migration: replace `async def handler(approval) -> bool` with `as |
| `v0.3.0` | 2026-03-14 | Medium | Skill-based progressive disclosure for tool calling - prevent overwhelming LLMs with too many tools. See [Skill-based Tools](https://github.com/zhixiangxue/chak-ai#skill-based-tools-new-in-0-3-0). Turn ID tracking & message filtering - fine-grained conversation history management. See examples [examples/turn_id_tracking.py](https://github.com/zhixiangxue/chak-ai/blob/main/examples/turn_id_tracking.py) and [examples/message_filtering_demo.py](https://github.com/zhixiangxue/chak-ai/blob/main/exam |
| `v0.2.7` | 2026-01-29 | Low | ## v0.2.7  ### ✨ Features  - Added human-in-the-loop tool approval hook `tool_approval_handler` on `Conversation`,   enabling manual review/approval of each tool call before execution. - Implemented a minimal WebSocket-based browser demo   (`examples/tool_approval_web_demo.py`) that shows how to:   - Send user messages from a web page   - Receive tool approval requests from the server   - Let users approve/deny tool calls in the browser, and feed the decision back - Improved the tool |
| `v0.2.6` | 2026-01-12 | Low | # Release Notes - v0.2.6  ## 🎯 What's New  ### Enhanced Event Stream API  New event stream mode that gives you complete visibility into tool call execution with type-safe event handling.  **What's New**: Added `event=True` parameter to `asend()` method to enable detailed event stream with full tool call observability.  **Complete Tool Call Lifecycle**: ```python from chak.message import MessageChunk, ToolCallStartEvent, ToolCallSuccessEvent, ToolCallErrorEvent  # Use event=True to |
| `v0.2.5` | 2026-01-09 | Low | # Release Notes - v0.2.5  **Release Date**: 2025-01-09  ## New Features  ### Configurable Tool Executor  Added support for configurable tool execution modes to handle different workload types:  - **Three execution modes**:   - `ASYNCIO` (default): Best for IO-bound tasks, uses asyncio's thread pool   - `THREAD`: Uses ThreadPoolExecutor for IO-bound sync functions   - `PROCESS`: Uses ProcessPoolExecutor for CPU-bound tasks, bypasses Python GIL  - **Three configuration methods**: |

## Dependency audit

- **Score**: 83/100
- **Total deps**: 33
- **Resolved**: 22
- **Unresolved**: 11
- **License conflicts**: 0
- **Warnings**: 5
- **Scanned**: 2026-06-01

## Citation

- HTML: https://www.freshcrate.ai/projects/chak-ai
- Markdown: https://www.freshcrate.ai/projects/chak-ai.md
- Dependencies JSON: https://www.freshcrate.ai/api/projects/chak-ai/deps

_Generated by freshcrate.ai. Indexes github releases for AI-agent ecosystem packages._
