pub struct LlmProxy { /* private fields */ }Available on non-WebAssembly only.
Expand description
The LLM proxy, an Application. See the module docs.
Implementations§
Source§impl LlmProxy
impl LlmProxy
pub fn new() -> LlmProxy
Sourcepub fn provider(self, provider: Provider) -> LlmProxy
pub fn provider(self, provider: Provider) -> LlmProxy
A provider; tried in the order added, per API.
Sourcepub fn virtual_key(
self,
key: impl Into<String>,
identity: impl Into<String>,
) -> LlmProxy
pub fn virtual_key( self, key: impl Into<String>, identity: impl Into<String>, ) -> LlmProxy
A key clients send, and the identity it stands for.
Sourcepub fn allow_anonymous(self) -> LlmProxy
pub fn allow_anonymous(self) -> LlmProxy
Let requests without a known key through, as identity anonymous
(a proxy behind its own authentication).
Sourcepub fn budget(
self,
identity: impl Into<String>,
tokens: u64,
window_secs: u64,
) -> LlmProxy
pub fn budget( self, identity: impl Into<String>, tokens: u64, window_secs: u64, ) -> LlmProxy
At most tokens (input + output) per window_secs for identity.
Sourcepub fn redis(
self,
addr: impl Into<String>,
password: Option<String>,
prefix: impl Into<String>,
) -> LlmProxy
pub fn redis( self, addr: impl Into<String>, password: Option<String>, prefix: impl Into<String>, ) -> LlmProxy
Count budgets in Redis at addr (host:port), under keys starting
with prefix, so every replica sees the same spend.
Trait Implementations§
Source§impl Application for LlmProxy
impl Application for LlmProxy
Source§fn execute(
&self,
request: &Request,
connection: &ConnectionInfo,
) -> Result<Response, String>
fn execute( &self, request: &Request, connection: &ConnectionInfo, ) -> Result<Response, String>
Receives a parsed request and returns a fully-built response.
Walk your controller list with
is_matching / process and return the first match.Source§fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
true when executing request is quick and never waits on anything
but the local filesystem — health checks, metrics, small static files.
The async servers (HTTP/1.1, HTTP/2, HTTP/3) then call execute
directly on the event loop, as nginx does, instead of handing the
request to tokio’s blocking pool: that handoff (a shared lock and two
cross-thread wake-ups) costs more than serving a small file. Read moreSource§fn execute_async<'a>(
&'a self,
_request: &'a Request,
_connection: &'a ConnectionInfo,
) -> Option<Pin<Box<dyn Future<Output = Result<Response, String>> + Send + 'a>>>
fn execute_async<'a>( &'a self, _request: &'a Request, _connection: &'a ConnectionInfo, ) -> Option<Pin<Box<dyn Future<Output = Result<Response, String>> + Send + 'a>>>
Available on crate feature
http2 only.An asynchronous version of
execute for this request, when the
application has one: the async servers await it on the connection’s
task instead of tying up a blocking-pool thread while it waits (the
config-driven proxy uses this to wait for a backend without holding a
thread). None (the default) means “use execute”. Wrappers return
Some only when they add no synchronous work of their own.Source§fn streams_body(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
fn streams_body(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
true to receive this request’s body as a stream (Body::Stream)
instead of read into memory first: execute then runs while the
body is still arriving, on a blocking-pool thread, and reads it with
std::io::Read — a multi-gigabyte upload in a few chunks of memory.
Asked after the head is read, so request.body is empty here;
decide from the method, path and headers. Read moreSource§fn registered_routes(&self) -> Vec<RouteInfo>
fn registered_routes(&self) -> Vec<RouteInfo>
The routes this application registers, as
(method, pattern) —
what AppWithState::route_entries returns; wrappers
(WithMiddleware, McpServer) report the routes of the
application inside. For tools that describe an app (the dev MCP
server’s routes tool), not for dispatch. Default: none. Since
18.28.0.Source§fn middleware_names(&self) -> Vec<&'static str>
fn middleware_names(&self) -> Vec<&'static str>
The names of the middleware layers around this application’s
routes, in the order a request passes them (
Middleware::layer_name).
Default: none; WithMiddleware lists its layers, then the inner
application’s. Since 18.28.0.Auto Trait Implementations§
impl Freeze for LlmProxy
impl RefUnwindSafe for LlmProxy
impl Send for LlmProxy
impl Sync for LlmProxy
impl Unpin for LlmProxy
impl UnsafeUnpin for LlmProxy
impl UnwindSafe for LlmProxy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<A> DevMcpExt for A
impl<A> DevMcpExt for A
Source§fn dev_mcp(self) -> DevMcp<Self>
fn dev_mcp(self) -> DevMcp<Self>
Available on non-WebAssembly only.
The dev MCP endpoint with the default
DevTools, in front of
this app — or this app alone outside development without a token.Source§fn dev_mcp_with(self, tools: DevTools) -> DevMcp<Self>
fn dev_mcp_with(self, tools: DevTools) -> DevMcp<Self>
Available on non-WebAssembly only.
The same with the tools and gating
tools describes.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more