mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-15 14:51:19 -08:00
Standardize reasoning field to OpenAI format while maintaining input compatibility (#3136)
* Initial plan * Add comprehensive reasoning field standardization tests Co-authored-by: hlohaus <983577+hlohaus@users.noreply.github.com> * Standardize reasoning field to OpenAI format while maintaining input compatibility Co-authored-by: hlohaus <983577+hlohaus@users.noreply.github.com> * Rename reasoning_content parameter to reasoning for consistent naming Co-authored-by: hlohaus <983577+hlohaus@users.noreply.github.com> * Address review comments: remove hardcoded path and rename reasoning_content to reasoning Co-authored-by: hlohaus <983577+hlohaus@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: hlohaus <983577+hlohaus@users.noreply.github.com>
This commit is contained in:
parent
f8e51b8edc
commit
43898f081a
4 changed files with 208 additions and 15 deletions
65
docs/reasoning-standardization.md
Normal file
65
docs/reasoning-standardization.md
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# Reasoning Field Standardization
|
||||
|
||||
## Issue
|
||||
DeepSeek uses `"reasoning_content"` field while OpenAI uses `"reasoning"` field in their chat completion streaming responses. This inconsistency caused confusion about what field name to use in the g4f Interference API.
|
||||
|
||||
## Decision
|
||||
**Standardized on OpenAI's `"reasoning"` field format for API output while maintaining input compatibility.**
|
||||
|
||||
## Rationale
|
||||
1. **OpenAI Compatibility**: OpenAI is the de facto standard for chat completion APIs
|
||||
2. **Ecosystem Compatibility**: Most tools and libraries expect OpenAI format
|
||||
3. **Consistency**: Provides a unified output format regardless of the underlying provider
|
||||
4. **Backward Compatibility**: Input parsing continues to accept both formats
|
||||
|
||||
## Implementation
|
||||
|
||||
### Input Format Support (Unchanged)
|
||||
The system continues to accept both input formats in `OpenaiTemplate.py`:
|
||||
```python
|
||||
reasoning_content = choice.get("delta", {}).get("reasoning_content", choice.get("delta", {}).get("reasoning"))
|
||||
```
|
||||
|
||||
### Output Format Standardization (Changed)
|
||||
- **Streaming Delta**: Uses `reasoning` field (OpenAI format)
|
||||
- **Non-streaming Message**: Uses `reasoning` field (OpenAI format)
|
||||
- **API Responses**: Should use standard OpenAI streaming format
|
||||
|
||||
### Example Output Formats
|
||||
|
||||
#### Streaming Response (OpenAI Compatible)
|
||||
```json
|
||||
{
|
||||
"id": "chatcmpl-example",
|
||||
"object": "chat.completion.chunk",
|
||||
"choices": [{
|
||||
"index": 0,
|
||||
"delta": {
|
||||
"role": "assistant",
|
||||
"reasoning": "I need to think about this step by step..."
|
||||
},
|
||||
"finish_reason": null
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
#### Non-streaming Response
|
||||
```json
|
||||
{
|
||||
"choices": [{
|
||||
"message": {
|
||||
"role": "assistant",
|
||||
"content": "Here's my answer",
|
||||
"reasoning": "My reasoning process was..."
|
||||
}
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
## Files Changed
|
||||
- `g4f/client/stubs.py`: Updated to use `reasoning` field instead of `reasoning_content`
|
||||
|
||||
## Testing
|
||||
- Added comprehensive tests for format standardization
|
||||
- Verified input compatibility with both OpenAI and DeepSeek formats
|
||||
- Confirmed no regressions in existing functionality
|
||||
Loading…
Add table
Add a link
Reference in a new issue