Skip to content

Commit 5eaeb47

Browse files
committed
Release v0.9.20
1 parent 316b6b8 commit 5eaeb47

File tree

2 files changed

+3
-318
lines changed

2 files changed

+3
-318
lines changed

CHANGELOG.md

Lines changed: 2 additions & 317 deletions
Original file line numberDiff line numberDiff line change
@@ -1,320 +1,5 @@
11
# Changelog
22

3-
## v0.9.19
4-
fix(whatsapp): Optimize typing indicator and response handling
3+
## v0.9.20
54

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+
-

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "agentle"
3-
version = "v0.9.19"
3+
version = "v0.9.20"
44
description = "..."
55
readme = "README.md"
66
requires-python = ">=3.13"

0 commit comments

Comments
 (0)