[gRPC] Stream engine state changes (#39915)
Signed-off-by: William Arnold <7565007+Aphoh@users.noreply.github.com> Co-authored-by: ishandhanani <82981111+ishandhanani@users.noreply.github.com>
This commit is contained in:
co-authored by
ishandhanani
parent
a407915c17
commit
0214954f26
@@ -84,6 +84,9 @@ class RuntimeHandle:
|
||||
self.tokenizer_manager.auto_create_handle_loop()
|
||||
self._event_loop = self.tokenizer_manager.event_loop
|
||||
|
||||
def set_engine_state_changed_callback(self, callback) -> None:
|
||||
self.tokenizer_manager.set_engine_state_changed_callback(callback)
|
||||
|
||||
@property
|
||||
def _tm_loop(self):
|
||||
"""Return the TokenizerManager loop used by communicator RPCs."""
|
||||
@@ -449,8 +452,9 @@ class RuntimeHandle:
|
||||
ServerStatus.UnHealthy,
|
||||
)
|
||||
|
||||
def get_is_ready(self) -> bool:
|
||||
return self.tokenizer_manager.is_ready()
|
||||
def is_pause(self) -> bool:
|
||||
"""Return the tokenizer manager's authoritative generation pause state."""
|
||||
return self.tokenizer_manager.is_pause
|
||||
|
||||
def tokenize(self, text: str, add_special_tokens: bool = True) -> str:
|
||||
tokenizer = self.tokenizer_manager.tokenizer
|
||||
|
||||
@@ -416,10 +416,53 @@ class TokenizerManager(TokenizerControlMixin, TokenizerManagerScoreMixin):
|
||||
# Set by whoever owns the event loop, and left None for Engine and grpc,
|
||||
# which own no server. Class-level to leave the frozen __init__ alone.
|
||||
_server_stop_hook: Optional[Callable[[], None]] = None
|
||||
_engine_state_changed_callback: Optional[Callable[[], None]] = None
|
||||
|
||||
def set_server_stop_hook(self, hook: Callable[[], None]) -> None:
|
||||
self._server_stop_hook = hook
|
||||
|
||||
def _notify_engine_state_changed(self) -> None:
|
||||
callback = self._engine_state_changed_callback
|
||||
if callback is None:
|
||||
return
|
||||
try:
|
||||
callback()
|
||||
except Exception:
|
||||
logger.exception("Engine-state change callback failed")
|
||||
|
||||
def _set_engine_state_field(self, name: str, value: Any) -> None:
|
||||
if value == getattr(self, name, None):
|
||||
return
|
||||
setattr(self, name, value)
|
||||
self._notify_engine_state_changed()
|
||||
|
||||
def set_engine_state_changed_callback(self, callback: Callable[[], None]) -> None:
|
||||
self._engine_state_changed_callback = callback
|
||||
|
||||
@property
|
||||
def server_status(self):
|
||||
return self._server_status
|
||||
|
||||
@server_status.setter
|
||||
def server_status(self, value) -> None:
|
||||
self._set_engine_state_field("_server_status", value)
|
||||
|
||||
@property
|
||||
def gracefully_exit(self) -> bool:
|
||||
return self._gracefully_exit
|
||||
|
||||
@gracefully_exit.setter
|
||||
def gracefully_exit(self, value: bool) -> None:
|
||||
self._set_engine_state_field("_gracefully_exit", value)
|
||||
|
||||
@property
|
||||
def is_pause(self) -> bool:
|
||||
return self._is_pause
|
||||
|
||||
@is_pause.setter
|
||||
def is_pause(self, value: bool) -> None:
|
||||
self._set_engine_state_field("_is_pause", value)
|
||||
|
||||
@property
|
||||
def serving_chat_class(self):
|
||||
"""Return the serving chat class for OpenAI API.
|
||||
|
||||
Reference in New Issue
Block a user