@@ -238,7 +238,11 @@ impl OpenAIStopConditionsProvider for NvCreateCompletionRequest {
238238 }
239239
240240 fn get_stop ( & self ) -> Option < Vec < String > > {
241- None
241+ use dynamo_async_openai:: types:: Stop ;
242+ self . inner . stop . as_ref ( ) . map ( |s| match s {
243+ Stop :: String ( s) => vec ! [ s. clone( ) ] ,
244+ Stop :: StringArray ( arr) => arr. clone ( ) ,
245+ } )
242246 }
243247
244248 fn nvext ( & self ) -> Option < & NvExt > {
@@ -494,4 +498,36 @@ mod tests {
494498 assert_eq ! ( output_options. skip_special_tokens, Some ( skip_value) ) ;
495499 }
496500 }
501+
502+ #[ test]
503+ fn test_stop ( ) {
504+ let null_stop = json ! ( {
505+ "model" : "test-model" ,
506+ "prompt" : "Hello, world!"
507+ } ) ;
508+ let request: NvCreateCompletionRequest =
509+ serde_json:: from_value ( null_stop) . expect ( "Failed to deserialize request" ) ;
510+ assert_eq ! ( request. get_stop( ) , None ) ;
511+
512+ let one_stop = json ! ( {
513+ "model" : "test-model" ,
514+ "prompt" : "Hello, world!" ,
515+ "stop" : "foo"
516+ } ) ;
517+ let request: NvCreateCompletionRequest =
518+ serde_json:: from_value ( one_stop) . expect ( "Failed to deserialize request" ) ;
519+ assert_eq ! ( request. get_stop( ) , Some ( vec![ "foo" . to_string( ) ] ) ) ;
520+
521+ let many_stops = json ! ( {
522+ "model" : "test-model" ,
523+ "prompt" : "Hello, world!" ,
524+ "stop" : [ "foo" , "bar" ]
525+ } ) ;
526+ let request: NvCreateCompletionRequest =
527+ serde_json:: from_value ( many_stops) . expect ( "Failed to deserialize request" ) ;
528+ assert_eq ! (
529+ request. get_stop( ) ,
530+ Some ( vec![ "foo" . to_string( ) , "bar" . to_string( ) ] )
531+ ) ;
532+ }
497533}
0 commit comments