mirror of
https://github.com/openai/codex.git
synced 2026-05-28 15:00:16 +00:00
## Why Standalone image generation needs a typed `codex-api` client surface for the Codex image proxy routes before the harness and model-facing tool layers are wired in. ## What changed - Added `ImagesClient` support for JSON `images/generations` and `images/edits` requests. - Added typed request and response shapes for generation, JSON edit image URLs, image metadata, and base64 image outputs. - Kept generation model slugs open-ended while requiring the generation model field that the downstream endpoint expects. - Exported the new client and image types from `codex-api`. - Added coverage for generation and edit wire shapes, extra response metadata that the client ignores, and malformed image responses missing `data`. ## Validation - `cargo test -p codex-api` - `just fix -p codex-api` - `just fmt` - `git diff --check main`
71 lines
1.9 KiB
Rust
71 lines
1.9 KiB
Rust
use serde::Deserialize;
|
|
use serde::Serialize;
|
|
|
|
#[derive(Debug, Clone, Serialize, PartialEq)]
|
|
pub struct ImageGenerationRequest {
|
|
pub prompt: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub background: Option<ImageBackground>,
|
|
pub model: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub n: Option<u64>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub quality: Option<ImageQuality>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub size: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, PartialEq)]
|
|
pub struct ImageEditRequest {
|
|
pub images: Vec<ImageUrl>,
|
|
pub prompt: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub background: Option<ImageBackground>,
|
|
pub model: String,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub n: Option<u64>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub quality: Option<ImageQuality>,
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
pub size: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub struct ImageUrl {
|
|
pub image_url: String,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "lowercase")]
|
|
pub enum ImageBackground {
|
|
Transparent,
|
|
Opaque,
|
|
Auto,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "lowercase")]
|
|
pub enum ImageQuality {
|
|
Low,
|
|
Medium,
|
|
High,
|
|
Auto,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
|
|
pub struct ImageResponse {
|
|
pub created: u64,
|
|
pub data: Vec<ImageData>,
|
|
#[serde(default)]
|
|
pub background: Option<ImageBackground>,
|
|
#[serde(default)]
|
|
pub quality: Option<ImageQuality>,
|
|
#[serde(default)]
|
|
pub size: Option<String>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
|
|
pub struct ImageData {
|
|
pub b64_json: String,
|
|
}
|