Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
dynamo
Commits
0373b897
Unverified
Commit
0373b897
authored
Sep 16, 2025
by
Michael Feil
Committed by
GitHub
Sep 16, 2025
Browse files
feat: kv commit router (#3024)
Signed-off-by:
michaelfeil
<
me@michaelfeil.eu
>
parent
2bb1b268
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
11 deletions
+46
-11
lib/llm/src/kv_router.rs
lib/llm/src/kv_router.rs
+24
-5
lib/llm/src/kv_router/protocols.rs
lib/llm/src/kv_router/protocols.rs
+22
-6
No files found.
lib/llm/src/kv_router.rs
View file @
0373b897
...
...
@@ -381,7 +381,8 @@ impl KvRouter {
}
}
// NOTE: this would not be usable for now, should deprecate
// NOTE: KVRouter works like a PushRouter,
// but without the reverse proxy functionality, but based on contract of 3 request types
#[async_trait]
impl
AsyncEngine
<
SingleIn
<
RouterRequest
>
,
ManyOut
<
Annotated
<
RouterResponse
>>
,
Error
>
for
KvRouter
{
async
fn
generate
(
...
...
@@ -389,11 +390,29 @@ impl AsyncEngine<SingleIn<RouterRequest>, ManyOut<Annotated<RouterResponse>>, Er
request
:
SingleIn
<
RouterRequest
>
,
)
->
Result
<
ManyOut
<
Annotated
<
RouterResponse
>>>
{
let
(
request
,
ctx
)
=
request
.into_parts
();
let
(
worker_id
,
_
)
=
self
.find_best_match
(
ctx
.id
(),
&
request
.tokens
,
None
,
true
)
let
context_id
=
ctx
.context
()
.id
()
.to_string
();
// Handle different request types
let
response
=
match
request
{
RouterRequest
::
New
{
tokens
}
=>
{
let
(
worker_id
,
overlap_blocks
)
=
self
.find_best_match
(
&
context_id
,
&
tokens
,
None
,
true
)
.await
?
;
let
response
=
RouterResponse
{
worker_id
};
RouterResponse
::
New
{
worker_id
,
overlap_blocks
,
}
}
RouterRequest
::
MarkPrefill
=>
{
self
.mark_prefill_completed
(
&
context_id
)
.await
;
RouterResponse
::
PrefillMarked
{
success
:
true
}
}
RouterRequest
::
MarkFree
=>
{
self
.free
(
&
context_id
)
.await
;
RouterResponse
::
FreeMarked
{
success
:
true
}
}
};
let
response
=
Annotated
::
from_data
(
response
);
let
stream
=
stream
::
iter
(
vec!
[
response
]);
Ok
(
ResponseStream
::
new
(
Box
::
pin
(
stream
),
ctx
.context
()))
...
...
lib/llm/src/kv_router/protocols.rs
View file @
0373b897
...
...
@@ -5,14 +5,30 @@ use crate::tokens::{SequenceHash, Token};
use
serde
::{
Deserialize
,
Serialize
};
use
uuid
::
Uuid
;
#[derive(Debug,
Clone,
Serialize,
Deserialize,
Default)]
pub
struct
RouterRequest
{
pub
tokens
:
Vec
<
Token
>
,
#[derive(Debug,
Clone,
Serialize,
Deserialize)]
#[serde(tag
=
"method"
,
rename_all
=
"snake_case"
)]
pub
enum
RouterRequest
{
// ini
#[serde(rename
=
"new"
)]
New
{
tokens
:
Vec
<
Token
>
,
},
MarkPrefill
,
MarkFree
,
}
#[derive(Debug,
Clone,
Serialize,
Deserialize,
Default)]
pub
struct
RouterResponse
{
pub
worker_id
:
i64
,
impl
Default
for
RouterRequest
{
fn
default
()
->
Self
{
RouterRequest
::
New
{
tokens
:
vec!
[]
}
}
}
#[derive(Debug,
Clone,
Serialize,
Deserialize)]
#[serde(tag
=
"method"
,
rename_all
=
"snake_case"
)]
pub
enum
RouterResponse
{
New
{
worker_id
:
i64
,
overlap_blocks
:
u32
},
PrefillMarked
{
success
:
bool
},
FreeMarked
{
success
:
bool
},
}
#[derive(Debug)]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment