pub mod request {
use std::collections::HashMap;
use serde::Serialize;
use crate::rest::post::{Post, PostNoStream};
#[derive(Debug, Serialize, Default, Clone)]
pub struct ChatUpdate<'a> {
#[serde(skip_serializing)]
pub completion_id: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub extra_body: Option<serde_json::Map<String, serde_json::Value>>,
#[serde(skip_serializing)]
pub extra_query: HashMap<&'a str, &'a str>,
pub metadata: Option<HashMap<&'a str, &'a str>>,
}
impl ChatUpdate<'_> {
pub fn build_url(base_url: impl AsRef<str>, completion_id: impl AsRef<str>) -> String {
let mut url = url::Url::parse(base_url.as_ref()).expect("Invalid base URL");
url.path_segments_mut()
.expect("Cannot modify URL path")
.push("chat")
.push("completions")
.push(completion_id.as_ref());
url.to_string()
}
}
impl Post for ChatUpdate<'_> {
fn is_streaming(&self) -> bool {
false
}
fn build_url(&self, base_url: &str) -> Result<String, crate::errors::OapiError> {
let mut url = url::Url::parse(base_url.trim_end_matches('/'))
.map_err(crate::errors::OapiError::UrlError)?;
url.path_segments_mut()
.map_err(|_| crate::errors::OapiError::UrlCannotBeBase(base_url.to_string()))?
.push("chat")
.push("completions")
.push(self.completion_id);
for (key, value) in &self.extra_query {
url.query_pairs_mut().append_pair(key, value);
}
Ok(url.to_string())
}
}
impl PostNoStream for ChatUpdate<'_> {
type Response = crate::chat::ChatCompletion;
}
}