Skip to main content

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}