NAME
Langertha::Engine::SGLang - SGLang inference server
VERSION
version 0.503
SYNOPSIS
use Langertha::Engine::SGLang;
# 1. Simple chat
my $sglang = Langertha::Engine::SGLang->new(
url => 'http://localhost:30000/v1',
model => 'Qwen/Qwen2.5-7B-Instruct',
);
print $sglang->simple_chat('Say something nice');
# 2. Streaming
$sglang->simple_chat_stream(sub {
print shift->content;
}, 'Write a haiku about Perl');
# 3. MCP tool calling (requires a tool-call-parser-compatible model)
use Future::AsyncAwait;
my $sglang = Langertha::Engine::SGLang->new(
url => 'http://localhost:30000/v1',
model => 'Qwen/Qwen2.5-7B-Instruct',
mcp_servers => [$mcp],
);
my $response = await $sglang->chat_with_tools_f('Add 7 and 15');
# 4. Multimodal input (vision-capable models served by SGLang)
use Langertha::Content::Image;
my $img = Langertha::Content::Image->from_url('https://example.com/cat.jpg');
my $resp = await $sglang->simple_chat_f({
role => 'user',
content => [ 'What is in this image?', $img ],
});
# 5. Prometheus /metrics scraping (Runtime::MetricsPoll)
my $records = await $sglang->poll_metrics_f('sglang:');
# 6. Embeddings (server launched with an embedding model)
my $embedder = Langertha::Engine::SGLang->new(
url => 'http://localhost:30000/v1',
model => 'Alibaba-NLP/gte-Qwen2-1.5B-instruct',
);
my $vector = $embedder->simple_embedding('Some text to embed');
my $vectors = $embedder->simple_embedding([ 'first', 'second' ]);
DESCRIPTION
Adapter for SGLang's OpenAI-compatible endpoint. SGLang is typically exposed as /v1/chat/completions with optional tool-calling support depending on model/backend setup.
Extends Langertha::Engine::OpenAIBase (which composes Langertha::Role::OpenAICompatible, Langertha::Role::OpenAPI, Langertha::Role::Models, Langertha::Role::Temperature, Langertha::Role::ResponseSize, Langertha::Role::SystemPrompt, Langertha::Role::ResponseFormat, Langertha::Role::Streaming, Langertha::Role::Chat, Langertha::Role::ReasoningEffort, and Langertha::Role::PromptCache); SGLang itself additionally composes Langertha::Role::Tools (MCP tool calling), Langertha::Role::Embedding (OpenAI-compatible /v1/embeddings) and Langertha::Role::Runtime::MetricsPoll (Prometheus /metrics scrape).
Supports chat, streaming, tool calling, embeddings, structured output, multimodal input, and Prometheus /metrics scraping. Transcription is not exposed on the OpenAI-compatible surface SGLang serves.
Only url is required. Use the full /v1 base URL. No API key is required for local setups.
See https://docs.sglang.ai/ for installation and configuration details.
EMBEDDINGS
Composes Langertha::Role::Embedding. SGLang serves /v1/embeddings when launched with an embedding model (decoder-style models also need --is-embedding). The request carries embedding_model if you set it, else model if you set it, else no model field at all: the server embeds with the model it serves. A string returns one vector, an ArrayRef of strings one vector per input, in input order.
CAPABILITIES
Advertised flags (derived from composed roles via Langertha::Role::Capabilities):
chat— Langertha::Role::Chatstreaming— Langertha::Role::Streamingtools_native+tool_choice_{auto,any,none,named}— Langertha::Role::Tools (tool calling needs the server started with--tool-call-parser;any(wirerequired) and a named tool also need the grammar backend, xgrammar by default)embedding— Langertha::Role::Embeddingruntime_metrics— Langertha::Role::Runtime::MetricsPollresponse_format_{json_object,json_schema}— Langertha::Role::ResponseFormattemperature— Langertha::Role::Temperaturereasoning_effort— Langertha::Role::ReasoningEffortresponse_size,system_prompt,parallel_tool_use,context_size,seed— generation-parameter knobs the engine will honour
A forced tool_choice (required or a named tool) together with a response_format of json_schema, json_object or structural_tag croaks before the request is sent: the SGLang server rejects that combination with HTTP 400. tool_choice auto with a response_format is sent.
SEE ALSO
https://docs.sglang.ai/ - SGLang documentation
Langertha::Engine::OpenAIBase - Base class for OpenAI-compatible engines
Langertha::Role::OpenAICompatible - OpenAI API format role
Langertha::Role::Tools - MCP tool calling interface
Langertha::Role::Runtime::MetricsPoll - Prometheus /metrics scraper
Langertha::Engine::vLLM - Sister self-hosted OpenAI-compatible engine (also Embedding + MetricsPoll)
Langertha::Engine::LlamaCpp - Sister self-hosted OpenAI-compatible engine (also Embedding + MetricsPoll)
SUPPORT
Issues
Please report bugs and feature requests on GitHub at https://github.com/Getty/langertha/issues.
IRC
Join #langertha on irc.perl.org or message Getty directly.
CONTRIBUTING
Contributions are welcome! Please fork the repository and submit a pull request.
AUTHOR
Torsten Raudssus <getty@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2026 by Torsten Raudssus https://raudssus.de/.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.