openai_interface/responses/cancel.rs
1//! Cancel a background response via `POST /responses/{response_id}/cancel`.
2//!
3//! > ![warn] This module is untested!
4//! > If you encounter any issues, please report them on the repository.
5//!
6//! Only responses created with `background: true` can be cancelled while
7//! they are still queued or in progress. Provider support varies: Qwen's
8//! Responses API documents this endpoint, while DeepSeek's Responses API
9//! is stateless and does not run background responses.
10
11use url::Url;
12
13use crate::{
14 errors::OapiError,
15 rest::post::{Post, PostNoStream},
16};
17
18/// Cancels a previously created background response by its ID.
19#[derive(Debug, Clone, serde::Serialize)]
20pub struct CancelRequest<'a> {
21 /// The ID of the response to cancel, e.g. `resp_...`.
22 #[serde(skip)]
23 pub response_id: &'a str,
24}
25
26impl Post for CancelRequest<'_> {
27 fn is_streaming(&self) -> bool {
28 false
29 }
30
31 /// Builds the URL for the request.
32 ///
33 /// `base_url` should be like <https://api.openai.com/v1>
34 fn build_url(&self, base_url: &str) -> Result<String, OapiError> {
35 let mut url = Url::parse(base_url.trim_end_matches('/')).map_err(OapiError::UrlError)?;
36 url.path_segments_mut()
37 .map_err(|_| OapiError::UrlCannotBeBase(base_url.to_string()))?
38 .push("responses")
39 .push(self.response_id)
40 .push("cancel");
41 Ok(url.to_string())
42 }
43}
44
45impl PostNoStream for CancelRequest<'_> {
46 type Response = crate::responses::Response;
47}