agent-runtime-http-api 0.1.1

Internal HTTP API contract for Agent Runtime
Documentation
//! OpenAI Responses API wire types for the compatibility adapter.

use std::collections::BTreeMap;

use runtime_types::{ConversationId, RuntimeInstanceId, WorkspaceId};
use serde::{Deserialize, Serialize};
use serde_json::Value;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct OpenAiResponseRequest {
    pub model: String,
    pub input: Value,
    #[serde(default)]
    pub instructions: Option<Value>,
    #[serde(default)]
    pub max_output_tokens: Option<u32>,
    #[serde(default)]
    pub background: bool,
    #[serde(default)]
    pub stream: bool,
    #[serde(default)]
    pub metadata: BTreeMap<String, String>,
    #[serde(default)]
    pub tools: Vec<Value>,
    #[serde(default)]
    pub tool_choice: Option<Value>,
    #[serde(default)]
    pub previous_response_id: Option<String>,
    #[serde(default)]
    pub conversation: Option<Value>,
    #[serde(default)]
    pub reasoning: Option<Value>,
    #[serde(default)]
    pub temperature: Option<f64>,
    #[serde(default)]
    pub top_p: Option<f64>,
    #[serde(default)]
    pub store: Option<bool>,
    #[serde(default)]
    pub include: Vec<String>,
    #[serde(default)]
    pub text: Option<Value>,
    #[serde(default)]
    pub truncation: Option<String>,
    #[serde(default)]
    pub safety_identifier: Option<String>,
    #[serde(default)]
    pub prompt_cache_key: Option<String>,
    /// Runtime extension. By default `model` is the Runtime ID. Supplying
    /// `runtimeId` lets an API gateway expose a different public model alias.
    #[serde(default)]
    pub agent: Option<OpenAiAgentOptions>,
    /// Captures newly added provider fields so the adapter can reject them
    /// explicitly instead of silently discarding semantics it cannot preserve.
    #[serde(default, flatten)]
    pub extra: BTreeMap<String, Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct OpenAiAgentOptions {
    #[serde(default)]
    pub runtime_id: Option<RuntimeInstanceId>,
    #[serde(default)]
    pub workspace_id: Option<WorkspaceId>,
    #[serde(default)]
    pub conversation_id: Option<ConversationId>,
    #[serde(default)]
    pub downstream_model: Option<String>,
    #[serde(default)]
    pub deadline_seconds: Option<u64>,
    #[serde(default)]
    pub max_model_turns: Option<usize>,
    #[serde(default)]
    pub max_tool_calls: Option<usize>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct OpenAiResponse {
    pub id: String,
    pub object: String,
    pub created_at: i64,
    pub status: String,
    pub completed_at: Option<i64>,
    pub error: Option<OpenAiResponseError>,
    pub incomplete_details: Option<Value>,
    pub instructions: Option<Value>,
    pub max_output_tokens: Option<u32>,
    pub model: String,
    pub output: Vec<OpenAiOutputItem>,
    pub parallel_tool_calls: bool,
    pub previous_response_id: Option<String>,
    pub tool_choice: Value,
    pub tools: Vec<Value>,
    pub metadata: BTreeMap<String, String>,
    pub usage: Option<OpenAiUsage>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct OpenAiOutputItem {
    pub id: String,
    #[serde(rename = "type")]
    pub item_type: String,
    pub status: String,
    pub role: String,
    pub content: Vec<OpenAiOutputContent>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct OpenAiOutputContent {
    #[serde(rename = "type")]
    pub content_type: String,
    pub text: String,
    pub annotations: Vec<Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OpenAiUsage {
    pub input_tokens: u64,
    pub input_tokens_details: OpenAiInputTokensDetails,
    pub output_tokens: u64,
    pub output_tokens_details: OpenAiOutputTokensDetails,
    pub total_tokens: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OpenAiInputTokensDetails {
    pub cached_tokens: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OpenAiOutputTokensDetails {
    pub reasoning_tokens: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OpenAiResponseError {
    pub code: String,
    pub message: String,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OpenAiErrorEnvelope {
    pub error: OpenAiError,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OpenAiError {
    pub message: String,
    #[serde(rename = "type")]
    pub error_type: String,
    pub param: Option<String>,
    pub code: Option<String>,
}