Skip to main content

starweaver_model/transport/
types.rs

1use std::{collections::BTreeMap, time::Duration};
2
3use serde::{Deserialize, Serialize};
4use serde_json::{Map, Value};
5use starweaver_core::CancellationToken;
6
7/// Stable HTTP method set required by model transports.
8#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
9#[serde(rename_all = "UPPERCASE")]
10pub enum HttpMethod {
11    /// HTTP POST.
12    Post,
13}
14
15/// Request sent to an injected model HTTP client.
16#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
17pub struct HttpRequest {
18    /// HTTP method.
19    pub method: HttpMethod,
20    /// Absolute endpoint URL.
21    pub url: String,
22    /// Headers after adapter defaults, provider config, and request overrides are merged.
23    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
24    pub headers: BTreeMap<String, String>,
25    /// JSON request body after extra body merge.
26    pub body: Value,
27    /// Optional request timeout.
28    #[serde(default, skip_serializing_if = "Option::is_none")]
29    pub timeout: Option<Duration>,
30    /// Request metadata for tracing and auditing.
31    #[serde(default, skip_serializing_if = "Map::is_empty")]
32    pub metadata: Map<String, Value>,
33    /// Cancellation token for long-running streaming requests.
34    #[serde(skip, default)]
35    pub cancellation_token: CancellationToken,
36}
37
38/// Response returned by an injected model HTTP client.
39#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
40pub struct HttpResponse {
41    /// HTTP status code.
42    pub status: u16,
43    /// Response headers.
44    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
45    pub headers: BTreeMap<String, String>,
46    /// JSON response body.
47    pub body: Value,
48}
49
50impl HttpResponse {
51    /// Return a successful JSON response.
52    #[must_use]
53    pub const fn ok(body: Value) -> Self {
54        Self {
55            status: 200,
56            headers: BTreeMap::new(),
57            body,
58        }
59    }
60}
61
62/// Max-token request parameter mapping for provider or gateway HTTP configs.
63#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
64#[serde(rename_all = "snake_case")]
65pub enum MaxTokensParameter {
66    /// Use the protocol adapter's default mapping.
67    #[default]
68    Default,
69    /// Emit `max_tokens`.
70    MaxTokens,
71    /// Emit `max_output_tokens`.
72    MaxOutputTokens,
73    /// Emit `max_completion_tokens`.
74    MaxCompletionTokens,
75    /// Omit provider max-token fields.
76    Omit,
77}