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
vllm_cscc
Commits
dfea1731
Unverified
Commit
dfea1731
authored
Apr 28, 2024
by
Ruoyu Qin
Committed by
GitHub
Apr 27, 2024
Browse files
[Bugfix] Abort requests when the connection to /v1/completions is interrupted (#4363)
parent
7134303c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
5 deletions
+53
-5
tests/async_engine/test_merge_async_iterators.py
tests/async_engine/test_merge_async_iterators.py
+41
-0
vllm/utils.py
vllm/utils.py
+12
-5
No files found.
tests/async_engine/test_merge_async_iterators.py
0 → 100644
View file @
dfea1731
import
asyncio
from
typing
import
AsyncIterator
,
Tuple
import
pytest
from
vllm.utils
import
merge_async_iterators
@
pytest
.
mark
.
asyncio
async
def
test_merge_async_iterators
():
async
def
mock_async_iterator
(
idx
:
int
)
->
AsyncIterator
[
str
]:
try
:
while
True
:
yield
f
"item from iterator
{
idx
}
"
await
asyncio
.
sleep
(
0.1
)
except
asyncio
.
CancelledError
:
pass
iterators
=
[
mock_async_iterator
(
i
)
for
i
in
range
(
3
)]
merged_iterator
:
AsyncIterator
[
Tuple
[
int
,
str
]]
=
merge_async_iterators
(
*
iterators
)
async
def
stream_output
(
generator
:
AsyncIterator
[
Tuple
[
int
,
str
]]):
async
for
idx
,
output
in
generator
:
print
(
f
"idx:
{
idx
}
, output:
{
output
}
"
)
task
=
asyncio
.
create_task
(
stream_output
(
merged_iterator
))
await
asyncio
.
sleep
(
0.5
)
task
.
cancel
()
with
pytest
.
raises
(
asyncio
.
CancelledError
):
await
task
for
iterator
in
iterators
:
try
:
await
asyncio
.
wait_for
(
anext
(
iterator
),
1
)
except
StopAsyncIteration
:
# All iterators should be cancelled and print this message.
print
(
"Iterator was cancelled normally"
)
except
(
Exception
,
asyncio
.
CancelledError
)
as
e
:
raise
AssertionError
()
from
e
vllm/utils.py
View file @
dfea1731
...
@@ -225,11 +225,18 @@ def merge_async_iterators(
...
@@ -225,11 +225,18 @@ def merge_async_iterators(
]
]
async
def
consumer
():
async
def
consumer
():
while
not
all
(
finished
)
or
not
queue
.
empty
():
try
:
item
=
await
queue
.
get
()
while
not
all
(
finished
)
or
not
queue
.
empty
():
if
isinstance
(
item
,
Exception
):
item
=
await
queue
.
get
()
raise
item
if
isinstance
(
item
,
Exception
):
yield
item
raise
item
yield
item
except
(
Exception
,
asyncio
.
CancelledError
)
as
e
:
for
task
in
_tasks
:
# NOTE: Pass the error msg in cancel()
# when only Python 3.9+ is supported.
task
.
cancel
()
raise
e
await
asyncio
.
gather
(
*
_tasks
)
await
asyncio
.
gather
(
*
_tasks
)
return
consumer
()
return
consumer
()
...
...
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