Detailed changes
@@ -137,6 +137,7 @@ impl Mercury {
content: open_ai::MessageContent::Plain(prompt),
}],
stream: false,
+ stream_options: None,
max_completion_tokens: None,
stop: vec![],
temperature: None,
@@ -40,6 +40,7 @@ impl PlainOpenAiClient {
model: model.to_string(),
messages,
stream: false,
+ stream_options: None,
max_completion_tokens: Some(max_tokens),
stop: Vec::new(),
temperature: None,
@@ -490,6 +491,7 @@ impl BatchingOpenAiClient {
model: serializable_request.model,
messages,
stream: false,
+ stream_options: None,
max_completion_tokens: Some(serializable_request.max_tokens),
stop: Vec::new(),
temperature: None,
@@ -506,6 +506,11 @@ pub fn into_open_ai(
model: model_id.into(),
messages,
stream,
+ stream_options: if stream {
+ Some(open_ai::StreamOptions::default())
+ } else {
+ None
+ },
stop: request.stop,
temperature: request.temperature.or(Some(1.0)),
max_completion_tokens: max_output_tokens,
@@ -295,12 +295,27 @@ impl Model {
}
}
+#[derive(Debug, Serialize, Deserialize)]
+pub struct StreamOptions {
+ pub include_usage: bool,
+}
+
+impl Default for StreamOptions {
+ fn default() -> Self {
+ Self {
+ include_usage: true,
+ }
+ }
+}
+
#[derive(Debug, Serialize, Deserialize)]
pub struct Request {
pub model: String,
pub messages: Vec<RequestMessage>,
pub stream: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
+ pub stream_options: Option<StreamOptions>,
+ #[serde(default, skip_serializing_if = "Option::is_none")]
pub max_completion_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub stop: Vec<String>,