agentscope-ai / agentscope-ai/agentscope-java
[Bug]: OpenAIChatModel structuted output fails on DeepSeek/vLLM — supportsNativeStructuredOutput() returns true for unsupported backends
- Vorherrschende Sprache
- Java
- Sterne
- 5.6k
- Forks
- 1.3k
- Ø Merge
- 4 T. 12 Std.
- Gemergte PRs (30 T.)
- 77
Beschreibung
## Summary
`OpenAIChatModel.supportsNativeStructuredOutput()` hardcodes `true`, but many OpenAI-compatible backends (DeepSeek, vLLM, Ollama, SiliconFlow) do not support `response_format`. This causes `agent.call(msg, OutputClass.class)` to fail with HTTP 400 on those backends.
## Root Cause
`OpenAIChatModel.java:195`:
```java
@Override
public boolean supportsNativeStructuredOutput() {
return true; // ← assumes ALL OpenAI-compatible APIs support response_format
}
```
`ReActAgent.doStructuredCall()` trusts this unconditionally:
```java
if (model.supportsNativeStructuredOutput()) {
return doNativeStructuredCall(msgs, jsonSchema); // sends response_format → 400
}
```
## Reproduction
```java
ReActAgent agent = ReActAgent.builder()
.model(OpenAIChatModel.builder()
.baseUrl("https://api.deepseek.com")
.modelName("deepseek-chat")
.formatter(new DeepSeekFormatter())
.build())
.build();
agent.call(userMsg, OutputClass.class).block();
// DeepSeek: "This response_format type is unavailable now" (400)
```
## Affected Backends
All OpenAI-compatible APIs using `OpenAIChatModel` that don't support `response_format`: DeepSeek, vLLM, Ollama, SiliconFlow, TogetherAI (partial).
## Fix
Add automatic fallback in `doStructuredCall()`: when native path fails, retry with the fallback (generate_response tool) path.
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.