33
44use std:: fmt:: Display ;
55use std:: path:: PathBuf ;
6+ use std:: sync:: Arc ;
67
78use pyo3:: { exceptions:: PyException , prelude:: * } ;
89
@@ -52,9 +53,16 @@ impl EntrypointArgs {
5253 //router_config: Option<RouterConfig>,
5354 kv_cache_block_size : Option < u32 > ,
5455 http_port : Option < u16 > ,
55- ) -> Self {
56- let endpoint_id_obj: Option < EndpointId > = endpoint_id. and_then ( |eid| eid. parse ( ) . ok ( ) ) ;
57- EntrypointArgs {
56+ ) -> PyResult < Self > {
57+ let endpoint_id_obj: Option < EndpointId > = match endpoint_id {
58+ Some ( eid) => Some ( eid. parse ( ) . map_err ( |_| {
59+ PyErr :: new :: < pyo3:: exceptions:: PyValueError , _ > ( format ! (
60+ "Invalid endpoint_id format: {eid}"
61+ ) )
62+ } ) ?) ,
63+ None => None ,
64+ } ;
65+ Ok ( EntrypointArgs {
5866 engine_type,
5967 model_path,
6068 model_name,
@@ -65,14 +73,14 @@ impl EntrypointArgs {
6573 //router_config,
6674 kv_cache_block_size,
6775 http_port,
68- }
76+ } )
6977 }
7078}
7179
7280#[ pyclass]
7381#[ derive( Clone ) ]
7482pub ( crate ) struct EngineConfig {
75- inner : RsEngineConfig ,
83+ inner : Arc < RsEngineConfig > ,
7684}
7785
7886#[ pyfunction]
@@ -97,7 +105,9 @@ pub fn make_engine<'p>(
97105 let inner = select_engine ( distributed_runtime, args. engine_type , local_model)
98106 . await
99107 . map_err ( to_pyerr) ?;
100- Ok ( EngineConfig { inner } )
108+ Ok ( EngineConfig {
109+ inner : Arc :: new ( inner) ,
110+ } )
101111 } )
102112}
103113
@@ -154,7 +164,6 @@ async fn select_engine(
154164 Ok ( inner)
155165}
156166
157- // TODO input should be an enum
158167#[ pyfunction]
159168#[ pyo3( signature = ( distributed_runtime, input, engine_config) ) ]
160169pub fn run_input < ' p > (
@@ -164,11 +173,16 @@ pub fn run_input<'p>(
164173 engine_config : EngineConfig ,
165174) -> PyResult < Bound < ' p , PyAny > > {
166175 let input_enum: Input = input. parse ( ) . map_err ( to_pyerr) ?;
176+ let Some ( engine_config) = Arc :: into_inner ( engine_config. inner ) else {
177+ return Err ( to_pyerr ( anyhow:: anyhow!(
178+ "EngineConfig Arc has been cloned. Should be impossible."
179+ ) ) ) ;
180+ } ;
167181 pyo3_async_runtimes:: tokio:: future_into_py ( py, async move {
168182 dynamo_llm:: entrypoint:: input:: run_input (
169183 either:: Either :: Right ( distributed_runtime. inner . clone ( ) ) ,
170184 input_enum,
171- engine_config. inner ,
185+ engine_config,
172186 )
173187 . await
174188 . map_err ( to_pyerr) ?;
0 commit comments