Chat Completions Web¶
agentscope-extensions-chat-completions-web exposes an AgentScope Agent behind an OpenAI Chat Completions-compatible API, so OpenAI SDKs, LangChain, LlamaIndex, ChatBox, etc. can connect as if they were talking to OpenAI.
When to use¶
You want to expose your Agent as a “standard LLM” without modifying clients.
You need streaming with tool-call events that match the OpenAI SSE format.
Add the dependency¶
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-extensions-chat-completions-web</artifactId>
<version>${agentscope.version}</version>
</dependency>
Note: this module ships only the framework-agnostic core adapter — wire HTTP/SSE through the matching Spring Boot Starter (recommended) or your own controller.
Core adapter¶
import io.agentscope.core.chat.completions.streaming.ChatCompletionsStreamingAdapter;
import io.agentscope.core.chat.completions.model.ChatCompletionsRequest;
import io.agentscope.core.chat.completions.model.ChatCompletionsChunk;
import reactor.core.publisher.Flux;
ChatCompletionsStreamingAdapter adapter = new ChatCompletionsStreamingAdapter();
// Convert OpenAI-style request → Agent invocation, and Agent events → OpenAI chunks
Flux<ChatCompletionsChunk> stream = adapter.stream(agent, request);
The adapter converts AgentScope’s Event stream (including REASONING and TOOL_RESULT) into OpenAI-compatible ChatCompletionsChunk objects:
Text deltas →
delta.contentTool calls →
delta.tool_calls[]Stream end → a chunk with
finish_reason
Expose as SSE in Spring Boot¶
Easiest is the starter — it registers the controller. To do it manually:
@RestController
public class ChatController {
private final ChatCompletionsStreamingAdapter adapter = new ChatCompletionsStreamingAdapter();
@Autowired private Agent agent;
@PostMapping(value = "/v1/chat/completions",
produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> chat(@RequestBody ChatCompletionsRequest req) {
return adapter.stream(agent, req)
.map(this::toSseLine); // serialize and wrap "data: ..."
}
}
Model routing¶
OpenAI clients send a model field; route at the controller layer:
String model = req.getModel(); // e.g. "gpt-4o"; route to different Agents
Agent target = agentRegistry.lookup(model);
return adapter.stream(target, req);
Pairs well with¶
AG-UI for fine-grained UI rendering with event semantics.
Chat Completions Web for plain LLM-style integrations focused on OpenAI compatibility.