Skip to content

Commit 24240a2

Browse files
committed
fix: have frontend populate "stop" field when preprocessing OpenAI request
fix: have frontend populate "stop" field when preprocessing OpenAI request
1 parent 5588d77 commit 24240a2

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

lib/llm/src/protocols/openai/completions.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)