|
1 | 1 | # Changelog |
2 | 2 |
|
3 | | -## v0.9.19 |
4 | | -fix(whatsapp): Optimize typing indicator and response handling |
| 3 | +## v0.9.20 |
5 | 4 |
|
6 | | -- Fix response handling logic in EvolutionAPI provider |
7 | | -- Modify typing indicator to send only once before sending multiple messages |
8 | | -- Improve error handling for typing indicator failures |
9 | | -- Prevent typing indicator errors from interrupting message sending process |
10 | | -- Optimize logging for typing indicator and message sending |
11 | | - |
12 | | -## v0.9.18 |
13 | | -refactor(whatsapp): Update expected_status handling in API requests |
14 | | - |
15 | | -- Modify expected_status parameter in request methods to accept both int and Sequence[int] |
16 | | -- Update all relevant API request calls to use a list for expected_status values |
17 | | -- Enhance resilience in handling HTTP responses by allowing multiple acceptable status codes |
18 | | - |
19 | | -## v0.9.17 |
20 | | -feat(whatsapp): Add recording indicator for TTS audio synthesis |
21 | | - |
22 | | -- Implement `send_recording_indicator` method in WhatsApp base provider |
23 | | -- Add recording indicator support for Evolution API provider |
24 | | -- Update WhatsApp bot to show recording indicator during TTS audio synthesis |
25 | | -- Enhance TTS audio response flow with async synthesis and recording indicator |
26 | | -- Improve logging and error handling for recording indicator functionality |
27 | | -Adds a visual cue for users during text-to-speech audio generation, providing a more interactive and responsive messaging experience. |
28 | | - |
29 | | -## v0.9.16 |
30 | | -feat(whatsapp): Add text-to-speech (TTS) integration for WhatsApp bot |
31 | | - |
32 | | -- Implement speech configuration in WhatsAppBotConfig |
33 | | -- Add speech_play_chance and speech_config fields to control TTS behavior |
34 | | -- Create send_audio_message method in WhatsAppProvider base class |
35 | | -- Implement send_audio_message for EvolutionAPI provider |
36 | | -- Add documentation and example for WhatsApp TTS integration |
37 | | -- Enhance WhatsApp bot to support optional audio message generation |
38 | | -This change enables flexible text-to-speech capabilities for WhatsApp bots, allowing dynamic audio response generation with configurable probability and provider settings. |
39 | | - |
40 | | -## v0.9.15 |
41 | | - |
42 | | -rollback changes |
43 | | - |
44 | | -## v0.9.10 |
45 | | -feat(docx-parser, pdf-parser): Implement max_output_tokens for response generation |
46 | | - |
47 | | -- Add max_output_tokens attribute to DocxFileParser and PDFFileParser for controlling token generation in responses |
48 | | -- Update relevant methods to utilize max_output_tokens in generation configuration |
49 | | - |
50 | | -## v0.9.9 |
51 | | -fix(openrouter-adapter): Improve tool call argument parsing with robust error handling |
52 | | - |
53 | | -- Add comprehensive JSON parsing error handling for tool call arguments |
54 | | -- Implement fallback mechanism to extract first valid JSON object when parsing fails |
55 | | -- Log detailed warnings and errors for malformed JSON input |
56 | | -- Prevent adapter from breaking when encountering invalid JSON in tool call arguments |
57 | | -- Ensure graceful degradation by using empty dict if parsing completely fails |
58 | | - |
59 | | -## v0.9.8 |
60 | | -fix(whatsapp): Improve phone number ID extraction for WhatsApp webhook payloads |
61 | | - |
62 | | -- Update phone number ID extraction logic for linked IDs |
63 | | -- Set remoteJid to remoteJidAlt when "@lid" is present in key |
64 | | -- Ensure consistent phone number ID handling for different WhatsApp message types |
65 | | - |
66 | | -## v0.9.7 |
67 | | -fix(whatsapp): not returning early when "lid" is present. |
68 | | - |
69 | | -## v0.9.6 |
70 | | -fix(stdio-mcp-server): Improve JSON message parsing and connection state handling |
71 | | - |
72 | | -- Enhance message parsing to skip non-JSON lines in stdout |
73 | | -- Add debug logging for skipped lines and invalid JSON |
74 | | -- Modify connection state checks to allow requests/notifications during initialization |
75 | | -- Prevent potential errors from processing non-JSON output from MCP servers |
76 | | -- Improve error handling and logging for message decoding |
77 | | - |
78 | | -## v0.9.5 |
79 | | -fix(whatsapp): Improve WhatsApp webhook payload phone number ID extraction |
80 | | - |
81 | | -- Update phone number ID extraction logic for WhatsApp webhook payloads |
82 | | -- Add fallback extraction method using remoteJid when remoteJidAlt is not available |
83 | | -- Ensure consistent phone number ID extraction across different webhook scenarios |
84 | | -- Prevent potential null or incomplete phone number ID assignments |
85 | | - |
86 | | -## v0.9.4 |
87 | | -feat(whatsapp): Improve WhatsApp webhook payload and key handling |
88 | | - |
89 | | -- Add remoteJidAlt field to Key model for enhanced JID parsing |
90 | | -- Update phone number ID extraction logic in webhook payload processing |
91 | | -- Modify message handling to use remoteJidAlt for linked WhatsApp accounts |
92 | | -- Enhance robustness of JID parsing for different WhatsApp account types |
93 | | - |
94 | | - |
95 | | -## v0.9.3 |
96 | | - |
97 | | -### 🚀 **New Responses API (Experimental)** |
98 | | -- **feat(responses)**: Brand new experimental Responses API with comprehensive OpenRouter integration |
99 | | - - Complete OpenRouter API compatibility with streaming support and structured outputs |
100 | | - - Advanced function tool management with `FunctionCallStore` for tracking and executing function calls |
101 | | - - Enhanced `FunctionTool` class with robust type safety and parameter conversion |
102 | | - - `ToolPair` system for managing tool definitions and call history |
103 | | - - Support for both synchronous and asynchronous tool execution |
104 | | - - Comprehensive response streaming with `AsyncStream` implementation |
105 | | - - Integration with `orjson` for improved JSON handling performance |
106 | | - - Support for reasoning, background processing, and conversation management |
107 | | - - Factory methods for easy instantiation (`openrouter()`, `openai()`) |
108 | | - |
109 | | -### 🌐 **Web Extraction & Automation** |
110 | | -- **feat(web)**: Complete web extraction and automation system |
111 | | - - **Extractor class**: Intelligent web content extraction with structured output support |
112 | | - - **Browser automation**: Full Playwright integration with configurable options |
113 | | - - **Action system**: Comprehensive set of web actions including: |
114 | | - - Click, scroll, write text, take screenshots |
115 | | - - Generate PDFs, execute JavaScript, press keys |
116 | | - - Wait for conditions, viewport management |
117 | | - - **Extraction preferences**: Advanced configuration options: |
118 | | - - Geolocation support, mobile/desktop modes |
119 | | - - Ad blocking, TLS verification control |
120 | | - - Custom headers, timeouts, and proxy settings |
121 | | - - Content filtering (include/exclude tags) |
122 | | - - **Structured prompts**: AI-powered content analysis with markdown conversion |
123 | | - - **Error handling**: Graceful handling of invalid URLs and extraction failures |
124 | | - |
125 | | -### 🔧 **Enhanced Assistant & Tracing** |
126 | | -- **feat(assistant)**: Enhanced Assistant model with new fields and Responder integration |
127 | | -- **feat(tracing)**: Improved tracing system with BaseModel inheritance |
128 | | - - Refactored `LangfuseOtelClient` and `NoOpOtelClient` to inherit from BaseModel |
129 | | - - Enhanced type safety and error handling across tracing components |
130 | | - - Better parameter conversion and callable management |
131 | | - |
132 | | -### 🛠️ **Function Call Management** |
133 | | -- **feat(responses)**: Advanced function call management system |
134 | | - - Methods for retrieving, removing, and clearing function calls |
135 | | - - Enhanced tool presence checking and call count retrieval |
136 | | - - Support for multiple function calls with improved access patterns |
137 | | - - Example usage documentation for better developer experience |
138 | | - |
139 | | -### 🐛 **Bug Fixes & Improvements** |
140 | | -- **fix(responses)**: Multiple fixes for structured outputs and JSON schema handling |
141 | | - - Proper JSON schema "additionalProperties" setting and retrieval |
142 | | - - Improved handling of incomplete structured outputs with clearer error messaging |
143 | | - - Fixed tool calls and response object text format handling |
144 | | - - Streamlined response object creation and event handling |
145 | | -- **refactor(file)**: Commented out MIME type validation for broader file type acceptance |
146 | | -- **fix(responses)**: Enhanced OpenRouter example with updated max output tokens |
147 | | - |
148 | | -### 📈 **Performance & Developer Experience** |
149 | | -- **feat(responses)**: AsyncStream implementation for efficient streaming responses |
150 | | -- **refactor(responses, web)**: Simplified JSON response handling and improved output parsing |
151 | | -- **feat(utils)**: Added `needs` utility for dependency management |
152 | | -- Enhanced error messaging and debugging capabilities across all new features |
153 | | - |
154 | | ---- |
155 | | - |
156 | | -## v0.9.2 |
157 | | - |
158 | | -- feat(agent): cache instructions in Agent class and Developer message for the providers that supports it (cache ephemeral) |
159 | | - |
160 | | - |
161 | | -## v0.9.1 |
162 | | - |
163 | | -### 🎯 **Pricing Integration** |
164 | | -- **feat(generations)**: Added `Pricing` model to `Generation` class with `input_pricing`, `output_pricing`, and `total_pricing` fields |
165 | | -- **feat(providers)**: All major providers now automatically populate pricing information in `Generation` objects |
166 | | - - OpenRouter: Dynamic pricing from API with automatic per-token to per-million conversion |
167 | | - - OpenAI: Static pricing table with comprehensive model coverage |
168 | | - - Google (Gemini): Static pricing for all Gemini models |
169 | | - - Cerebras: Static pricing for Llama models |
170 | | - - Amazon Bedrock: Static pricing for Claude and other models |
171 | | -- **feat(adapters)**: Added async `adapt_async()` methods to all provider adapters for pricing calculation |
172 | | -- **fix(openrouter)**: Corrected pricing calculation - OpenRouter returns per-token prices, now properly converted to per-million-tokens |
173 | | -- Pricing is calculated using the abstract methods `price_per_million_tokens_input()` and `price_per_million_tokens_output()` |
174 | | -- Costs are rounded to 8 decimal places for precision |
175 | | -- Graceful fallback to empty `Pricing` object if calculation fails |
176 | | - |
177 | | -### 🐛 **Bug Fixes** |
178 | | -- fix(openrouter): when fallback models are used, use "models" in the requests, not "model" |
179 | | -- fix(openrouter): accept single string in `with_fallback_models()` method (was treating string as iterable) |
180 | | - |
181 | | -### 🚨 **Error Handling** |
182 | | -- feat(openrouter): comprehensive custom exception hierarchy with detailed error messages |
183 | | - - Created 16+ custom exception classes for all documented OpenRouter errors |
184 | | - - Each exception includes clear descriptions, possible causes, and actionable solutions |
185 | | - - Automatic error parsing from response status codes and error messages |
186 | | - - Examples: `ModelNotFoundError`, `InsufficientCreditsError`, `ContextLengthExceededError`, etc. |
187 | | - - See `examples/openrouter_error_handling.py` for usage examples |
188 | | - |
189 | | -## v0.9.0 🚀 |
190 | | - |
191 | | -**Release Date:** October 18, 2024 |
192 | | - |
193 | | -We're thrilled to announce **Agentle v0.9.0**, a major milestone packed with powerful new features, critical fixes, and performance improvements. This release represents months of refinement across our parsing, provider, and agent ecosystems. |
194 | | - |
195 | | ---- |
196 | | - |
197 | | -### ✨ **Highlights** |
198 | | - |
199 | | -#### 🛡️ **Guardrails System** |
200 | | -- **NEW:** Comprehensive guardrails integration for safer AI interactions |
201 | | -- **Tool Leakage Validator:** Prevent sensitive tool information from leaking in responses |
202 | | - |
203 | | -#### 🔌 **OpenRouter Provider** |
204 | | -- **Full OpenRouter integration** with streaming support and structured outputs |
205 | | -- **Dynamic price fetching** for cost-aware model selection |
206 | | -- **Model fallbacks** for improved reliability |
207 | | -- **Factory methods** for easier instantiation |
208 | | -- Enhanced tool adapter with complex type expansion in JSON Schema conversion |
209 | | -- Configurable httpx client timeout for generation tasks |
210 | | - |
211 | | -#### 📄 **Document Parsing Revolution** |
212 | | -- **Native PDF processing** with PyMuPDF for superior performance |
213 | | -- **RTF Document Parser** - brand new format support |
214 | | -- **Native DOCX processing** option for faster document handling |
215 | | -- Enhanced PDF parsing with encrypted file support and structured exception handling |
216 | | -- PPTX parsing improvements with legacy conversion support |
217 | | -- Legacy `.doc` file conversion with improved error handling |
218 | | -- Optimized archive processing (ZIP, RAR) with better error messaging |
219 | | -- Page screenshot optimization to reduce per-image analysis costs |
220 | | -- Configurable `render_scale` for PDF screenshot quality control |
221 | | -- `max_concurrent_pages` field for PDF parsing concurrency control |
222 | | - |
223 | | -#### 🧠 **Embeddings & Vector Stores** |
224 | | -- **DeepInfra Embedding Provider** - OpenAI-compatible API integration |
225 | | -- Batch embedding generation methods for async processing |
226 | | -- Enhanced async embedding methods with None value handling |
227 | | -- Load balancer implementation (DuckDB and in-memory) with provider quotas and ranking |
228 | | - |
229 | | -#### 💬 **WhatsApp Enhancements** |
230 | | -- Enhanced markdown formatting (headers, tables, blockquotes, horizontal rules) |
231 | | -- Improved message splitting with list item grouping |
232 | | -- `send_message` method for independent message sending |
233 | | -- Multiple callback support with semantic type aliases |
234 | | -- Better table formatting (vertical lists for improved readability) |
235 | | - |
236 | | -#### 🔧 **Developer Experience** |
237 | | -- **Circuit breaker** implementation with DuckDB backend |
238 | | -- Static knowledge `from_text` class method for easier content creation |
239 | | -- `append_content` method for dynamic ParsedFile content addition |
240 | | -- Provider ID implementation across GenerationProvider subclasses |
241 | | -- Fallback models parameter for provider resilience |
242 | | -- Enhanced file validation with MIME type and content checks |
243 | | - |
244 | | ---- |
245 | | - |
246 | | -### 🐛 **Bug Fixes** |
247 | | - |
248 | | -#### WhatsApp |
249 | | -- Fixed Brazilian phone number formatting after Meta's privacy update |
250 | | -- Proper handling of Evolution API typed dicts (converted to BaseModels) |
251 | | -- Fixed `from_number` extraction from sender |
252 | | -- Corrected buffer handling for Evolution API fields |
253 | | -- Improved thinking tag removal logic |
254 | | -- Enhanced race condition protection and batch timing |
255 | | -- Rate limit checks now happen before message processing |
256 | | - |
257 | | -#### Agents & Tools |
258 | | -- Fixed assistant message context handling before tool processing |
259 | | -- Removed unnecessary cast in `_stream_with_tools` function |
260 | | -- Corrected property "text" update logic |
261 | | -- Fixed duplicate tools in vector stores |
262 | | -- Resolved duplicated parameter issues |
263 | | - |
264 | | -#### Parsing & Generation |
265 | | -- Fixed PDF extraction error handling |
266 | | -- Handled cases where no extraction is returned from PDF provider |
267 | | -- Updated PyMuPDF import for better compatibility |
268 | | -- Normalized model names (removed 'google/' prefix) |
269 | | -- Fixed pickling errors in RAG search by avoiding callable serialization |
270 | | -- Improved logging calls |
271 | | - |
272 | | ---- |
273 | | - |
274 | | -### ⚡ **Performance Improvements** |
275 | | - |
276 | | -- **Single page screenshot per page** when images are present (avoiding duplicate OCR) |
277 | | -- Optimized PDF page processing with PyMuPDF |
278 | | -- Eliminated redundant temp file creation in archive processing |
279 | | -- Better markdown parsing performance |
280 | | -- Fail-fast on DOCX→PDF conversion errors |
281 | | - |
282 | | ---- |
283 | | - |
284 | | -### 🔄 **Refactoring & Code Quality** |
285 | | - |
286 | | -- Converted Evolution API typed dicts to BaseModels for better type safety |
287 | | -- Renamed 'agent' parameters to 'provider' for consistency |
288 | | -- Renamed 'chunk_tokens' to 'output_tokens' with new 'input_tokens' property |
289 | | -- Protocol classes follow single underscore convention |
290 | | -- Cleaned up whitespace and improved exception handling |
291 | | -- Streamlined parser class retrieval |
292 | | -- Made Langfuse a parameter for better flexibility |
293 | | -- Enhanced CallbackWithContext with token propagation |
294 | | - |
295 | | ---- |
296 | | - |
297 | | -### 📚 **Documentation & Testing** |
298 | | - |
299 | | -- Added test for uppercase file extension handling |
300 | | -- Testing failover Generation Provider |
301 | | -- Updated examples with lightweight implementations |
302 | | -- Comprehensive changelog updates |
303 | | - |
304 | | ---- |
305 | | - |
306 | | -### 🙏 **Thank You** |
307 | | - |
308 | | -This release wouldn't be possible without the dedication of our contributors and the valuable feedback from our community. We're committed to making Agentle the most powerful and reliable agentic AI framework. |
309 | | - |
310 | | -**Upgrade now and experience the future of AI agents!** |
311 | | - |
312 | | -```bash |
313 | | -pip install --upgrade agentle |
314 | | -``` |
315 | | - |
316 | | ---- |
317 | | - |
318 | | -## v0.8.68 |
319 | | - |
320 | | -- feat(openrouter) streaming with structured outputs |
| 5 | +- |
0 commit comments