1use crate::OpenAIEventStream;
2use crate::error::OpenAIError;
3pub use crate::types::{
4 CompletionTokensDetails, ImageDetail, PromptTokensDetails, ReasoningEffort,
5 ResponseFormatJsonSchema,
6};
7use derive_builder::Builder;
8use serde::{Deserialize, Serialize};
9use serde_json::Value;
10use std::collections::HashMap;
11
12#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
14#[serde(rename_all = "lowercase")]
15pub enum Role {
16 User,
17 Assistant,
18 System,
19 Developer,
20}
21
22#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
24#[serde(rename_all = "snake_case")]
25pub enum OutputStatus {
26 InProgress,
27 Completed,
28 Incomplete,
29}
30
31#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
33#[serde(untagged)]
34pub enum Input {
35 Text(String),
37 Items(Vec<InputItem>),
39}
40
41#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
43#[serde(untagged, rename_all = "snake_case")]
44pub enum InputItem {
45 Message(InputMessage),
46 Custom(serde_json::Value),
47}
48
49#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
51#[builder(
52 name = "InputMessageArgs",
53 pattern = "mutable",
54 setter(into, strip_option),
55 default
56)]
57#[builder(build_fn(error = "OpenAIError"))]
58pub struct InputMessage {
59 #[serde(default, rename = "type")]
60 pub kind: InputMessageType,
61 pub role: Role,
63 pub content: InputContent,
66}
67
68#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
69#[serde(rename_all = "snake_case")]
70pub enum InputMessageType {
71 #[default]
72 Message,
73}
74
75#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
76#[serde(untagged)]
77pub enum InputContent {
78 TextInput(String),
80 InputItemContentList(Vec<ContentType>),
82}
83
84#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
86#[serde(tag = "type", rename_all = "snake_case")]
87pub enum ContentType {
88 InputText(InputText),
90 InputImage(InputImage),
92 InputFile(InputFile),
94}
95
96#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
97pub struct InputText {
98 text: String,
99}
100
101#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
102#[builder(
103 name = "InputImageArgs",
104 pattern = "mutable",
105 setter(into, strip_option),
106 default
107)]
108#[builder(build_fn(error = "OpenAIError"))]
109pub struct InputImage {
110 detail: ImageDetail,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 file_id: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
118 image_url: Option<String>,
119}
120
121#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
122#[builder(
123 name = "InputFileArgs",
124 pattern = "mutable",
125 setter(into, strip_option),
126 default
127)]
128#[builder(build_fn(error = "OpenAIError"))]
129pub struct InputFile {
130 #[serde(skip_serializing_if = "Option::is_none")]
132 file_data: Option<String>,
133 #[serde(skip_serializing_if = "Option::is_none")]
135 file_id: Option<String>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 filename: Option<String>,
139}
140
141#[derive(Clone, Serialize, Deserialize, Debug, Default, Builder, PartialEq)]
143#[builder(
144 name = "CreateResponseArgs",
145 pattern = "mutable",
146 setter(into, strip_option),
147 default
148)]
149#[builder(build_fn(error = "OpenAIError"))]
150pub struct CreateResponse {
151 pub input: Input,
153
154 pub model: String,
158
159 #[serde(skip_serializing_if = "Option::is_none")]
162 pub background: Option<bool>,
163
164 #[serde(skip_serializing_if = "Option::is_none")]
182 pub include: Option<Vec<String>>,
183
184 #[serde(skip_serializing_if = "Option::is_none")]
190 pub instructions: Option<String>,
191
192 #[serde(skip_serializing_if = "Option::is_none")]
195 pub max_output_tokens: Option<u32>,
196
197 pub max_tool_calls: Option<u32>,
201
202 #[serde(skip_serializing_if = "Option::is_none")]
209 pub metadata: Option<HashMap<String, String>>,
210
211 #[serde(skip_serializing_if = "Option::is_none")]
213 pub parallel_tool_calls: Option<bool>,
214
215 #[serde(skip_serializing_if = "Option::is_none")]
218 pub previous_response_id: Option<String>,
219
220 #[serde(skip_serializing_if = "Option::is_none")]
222 pub prompt: Option<PromptConfig>,
223
224 #[serde(skip_serializing_if = "Option::is_none")]
226 pub reasoning: Option<ReasoningConfig>,
227
228 #[serde(skip_serializing_if = "Option::is_none")]
248 pub service_tier: Option<ServiceTier>,
249
250 #[serde(skip_serializing_if = "Option::is_none")]
252 pub store: Option<bool>,
253
254 #[serde(skip_serializing_if = "Option::is_none")]
257 pub stream: Option<bool>,
258
259 #[serde(skip_serializing_if = "Option::is_none")]
264 pub temperature: Option<f32>,
265
266 #[serde(skip_serializing_if = "Option::is_none")]
269 pub text: Option<TextConfig>,
270
271 #[serde(skip_serializing_if = "Option::is_none")]
274 pub tool_choice: Option<ToolChoice>,
275
276 #[serde(skip_serializing_if = "Option::is_none")]
280 pub tools: Option<Vec<ToolDefinition>>,
281
282 #[serde(skip_serializing_if = "Option::is_none")]
285 pub top_logprobs: Option<u32>, #[serde(skip_serializing_if = "Option::is_none")]
293 pub top_p: Option<f32>,
294
295 #[serde(skip_serializing_if = "Option::is_none")]
299 pub truncation: Option<Truncation>,
300
301 #[serde(skip_serializing_if = "Option::is_none")]
304 pub user: Option<String>,
305}
306
307#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
309pub struct PromptConfig {
310 pub id: String,
312
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub version: Option<String>,
316
317 #[serde(skip_serializing_if = "Option::is_none")]
321 pub variables: Option<HashMap<String, String>>,
322}
323
324#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
326#[serde(rename_all = "lowercase")]
327pub enum ServiceTier {
328 Auto,
329 Default,
330 Flex,
331 Scale,
332 Priority,
333}
334
335#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
337#[serde(rename_all = "lowercase")]
338pub enum Truncation {
339 Auto,
340 Disabled,
341}
342
343#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
345#[builder(
346 name = "ReasoningConfigArgs",
347 pattern = "mutable",
348 setter(into, strip_option),
349 default
350)]
351#[builder(build_fn(error = "OpenAIError"))]
352pub struct ReasoningConfig {
353 #[serde(skip_serializing_if = "Option::is_none")]
355 pub effort: Option<ReasoningEffort>,
356 #[serde(skip_serializing_if = "Option::is_none")]
358 pub summary: Option<ReasoningSummary>,
359}
360
361#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
362#[serde(rename_all = "lowercase")]
363pub enum ReasoningSummary {
364 Auto,
365 Concise,
366 Detailed,
367}
368
369#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
371pub struct TextConfig {
372 pub format: TextResponseFormat,
374}
375
376#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
377#[serde(tag = "type", rename_all = "snake_case")]
378pub enum TextResponseFormat {
379 Text,
381 JsonObject,
383 JsonSchema(ResponseFormatJsonSchema),
385}
386
387#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
389#[serde(tag = "type", rename_all = "snake_case")]
390pub enum ToolDefinition {
391 FileSearch(FileSearch),
393 Function(Function),
395 WebSearchPreview(WebSearchPreview),
397 ComputerUsePreview(ComputerUsePreview),
399 Mcp(Mcp),
401 CodeInterpreter(CodeInterpreter),
403 ImageGeneration(ImageGeneration),
405 LocalShell,
407}
408
409#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
410#[builder(
411 name = "FileSearchArgs",
412 pattern = "mutable",
413 setter(into, strip_option),
414 default
415)]
416#[builder(build_fn(error = "OpenAIError"))]
417pub struct FileSearch {
418 pub vector_store_ids: Vec<String>,
420 #[serde(skip_serializing_if = "Option::is_none")]
422 pub max_num_results: Option<u32>,
423 #[serde(skip_serializing_if = "Option::is_none")]
425 pub filters: Option<Filter>,
426 #[serde(skip_serializing_if = "Option::is_none")]
428 pub ranking_options: Option<RankingOptions>,
429}
430
431#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
432#[builder(
433 name = "FunctionArgs",
434 pattern = "mutable",
435 setter(into, strip_option),
436 default
437)]
438pub struct Function {
439 pub name: String,
441 pub parameters: serde_json::Value,
443 pub strict: bool,
445 #[serde(skip_serializing_if = "Option::is_none")]
448 pub description: Option<String>,
449}
450
451#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
452#[builder(
453 name = "WebSearchPreviewArgs",
454 pattern = "mutable",
455 setter(into, strip_option),
456 default
457)]
458pub struct WebSearchPreview {
459 #[serde(skip_serializing_if = "Option::is_none")]
461 pub user_location: Option<Location>,
462 #[serde(skip_serializing_if = "Option::is_none")]
464 pub search_context_size: Option<WebSearchContextSize>,
465}
466
467#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
468#[serde(rename_all = "lowercase")]
469pub enum WebSearchContextSize {
470 Low,
471 Medium,
472 High,
473}
474
475#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
476#[builder(
477 name = "ComputerUsePreviewArgs",
478 pattern = "mutable",
479 setter(into, strip_option),
480 default
481)]
482pub struct ComputerUsePreview {
483 environment: String,
485 display_width: u32,
487 display_height: u32,
489}
490
491#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
493pub struct RankingOptions {
494 pub ranker: String,
496 #[serde(skip_serializing_if = "Option::is_none")]
499 pub score_threshold: Option<f32>,
500}
501
502#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
504#[serde(untagged)]
505pub enum Filter {
506 Comparison(ComparisonFilter),
509 Compound(CompoundFilter),
511}
512
513#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
515pub struct ComparisonFilter {
516 #[serde(rename = "type")]
518 pub op: ComparisonType,
519 pub key: String,
521 pub value: serde_json::Value,
523}
524
525#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
526pub enum ComparisonType {
527 #[serde(rename = "eq")]
528 Equals,
529 #[serde(rename = "ne")]
530 NotEquals,
531 #[serde(rename = "gt")]
532 GreaterThan,
533 #[serde(rename = "gte")]
534 GreaterThanOrEqualTo,
535 #[serde(rename = "lt")]
536 LessThan,
537 #[serde(rename = "lte")]
538 LessThanOrEqualTo,
539}
540
541#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
543pub struct CompoundFilter {
544 #[serde(rename = "type")]
546 pub op: CompoundType,
547 pub filters: Vec<Filter>,
549}
550
551#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
552#[serde(rename_all = "lowercase")]
553pub enum CompoundType {
554 And,
555 Or,
556}
557
558#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
560#[builder(
561 name = "LocationArgs",
562 pattern = "mutable",
563 setter(into, strip_option),
564 default
565)]
566#[builder(build_fn(error = "OpenAIError"))]
567pub struct Location {
568 #[serde(rename = "type")]
570 pub kind: String,
571 #[serde(skip_serializing_if = "Option::is_none")]
573 pub city: Option<String>,
574 #[serde(skip_serializing_if = "Option::is_none")]
576 pub country: Option<String>,
577 #[serde(skip_serializing_if = "Option::is_none")]
579 pub region: Option<String>,
580 #[serde(skip_serializing_if = "Option::is_none")]
582 pub timezone: Option<String>,
583}
584
585#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
587#[builder(
588 name = "McpArgs",
589 pattern = "mutable",
590 setter(into, strip_option),
591 default
592)]
593#[builder(build_fn(error = "OpenAIError"))]
594pub struct Mcp {
595 pub server_label: String,
597 pub server_url: String,
599 #[serde(skip_serializing_if = "Option::is_none")]
601 pub allowed_tools: Option<AllowedTools>,
602 #[serde(skip_serializing_if = "Option::is_none")]
604 pub headers: Option<Value>,
605 #[serde(skip_serializing_if = "Option::is_none")]
607 pub require_approval: Option<RequireApproval>,
608}
609
610#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
612#[serde(untagged)]
613pub enum AllowedTools {
614 List(Vec<String>),
616 Filter(McpAllowedToolsFilter),
618}
619
620#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
622pub struct McpAllowedToolsFilter {
623 #[serde(skip_serializing_if = "Option::is_none")]
625 pub tool_names: Option<Vec<String>>,
626}
627
628#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
630#[serde(untagged)]
631pub enum RequireApproval {
632 Policy(RequireApprovalPolicy),
634 Filter(McpApprovalFilter),
636}
637
638#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
639#[serde(rename_all = "lowercase")]
640pub enum RequireApprovalPolicy {
641 Always,
642 Never,
643}
644
645#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
647pub struct McpApprovalFilter {
648 #[serde(skip_serializing_if = "Option::is_none")]
650 pub always: Option<McpAllowedToolsFilter>,
651 #[serde(skip_serializing_if = "Option::is_none")]
653 pub never: Option<McpAllowedToolsFilter>,
654}
655
656#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
658#[serde(untagged)]
659pub enum CodeInterpreterContainer {
660 Id(String),
662 Container(CodeInterpreterContainerKind),
664}
665
666#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
668#[serde(tag = "type", rename_all = "snake_case")]
669pub enum CodeInterpreterContainerKind {
670 Auto {
671 #[serde(skip_serializing_if = "Option::is_none")]
673 file_ids: Option<Vec<String>>,
674 },
675}
676
677#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
679#[builder(
680 name = "CodeInterpreterArgs",
681 pattern = "mutable",
682 setter(into, strip_option),
683 default
684)]
685#[builder(build_fn(error = "OpenAIError"))]
686pub struct CodeInterpreter {
687 pub container: CodeInterpreterContainer,
689}
690
691#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
693pub struct InputImageMask {
694 #[serde(skip_serializing_if = "Option::is_none")]
696 pub image_url: Option<String>,
697 #[serde(skip_serializing_if = "Option::is_none")]
699 pub file_id: Option<String>,
700}
701
702#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
704#[builder(
705 name = "ImageGenerationArgs",
706 pattern = "mutable",
707 setter(into, strip_option),
708 default
709)]
710#[builder(build_fn(error = "OpenAIError"))]
711pub struct ImageGeneration {
712 #[serde(skip_serializing_if = "Option::is_none")]
714 pub background: Option<ImageGenerationBackground>,
715 #[serde(skip_serializing_if = "Option::is_none")]
717 pub input_image_mask: Option<InputImageMask>,
718 #[serde(skip_serializing_if = "Option::is_none")]
720 pub model: Option<String>,
721 #[serde(skip_serializing_if = "Option::is_none")]
723 pub moderation: Option<String>,
724 #[serde(skip_serializing_if = "Option::is_none")]
726 pub output_compression: Option<u8>,
727 #[serde(skip_serializing_if = "Option::is_none")]
729 pub output_format: Option<ImageGenerationOutputFormat>,
730 #[serde(skip_serializing_if = "Option::is_none")]
732 pub partial_images: Option<u8>,
733 #[serde(skip_serializing_if = "Option::is_none")]
735 pub quality: Option<ImageGenerationQuality>,
736 #[serde(skip_serializing_if = "Option::is_none")]
738 pub size: Option<ImageGenerationSize>,
739}
740
741#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
742#[serde(rename_all = "lowercase")]
743pub enum ImageGenerationBackground {
744 Transparent,
745 Opaque,
746 Auto,
747}
748
749#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
750#[serde(rename_all = "lowercase")]
751pub enum ImageGenerationOutputFormat {
752 Png,
753 Webp,
754 Jpeg,
755}
756
757#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
758#[serde(rename_all = "lowercase")]
759pub enum ImageGenerationQuality {
760 Low,
761 Medium,
762 High,
763 Auto,
764}
765
766#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
767#[serde(rename_all = "lowercase")]
768pub enum ImageGenerationSize {
769 Auto,
770 #[serde(rename = "1024x1024")]
771 Size1024x1024,
772 #[serde(rename = "1024x1536")]
773 Size1024x1536,
774 #[serde(rename = "1536x1024")]
775 Size1536x1024,
776}
777
778#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
780#[serde(untagged)]
781pub enum ToolChoice {
782 Mode(ToolChoiceMode),
784 Hosted {
786 #[serde(rename = "type")]
788 kind: HostedToolType,
789 },
790 Function {
792 name: String,
794 },
795}
796
797#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
799#[serde(rename_all = "lowercase")]
800pub enum ToolChoiceMode {
801 None,
803 Auto,
805 Required,
807}
808
809#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
811#[serde(rename_all = "snake_case")]
812pub enum HostedToolType {
813 FileSearch,
814 WebSearchPreview,
815 ComputerUsePreview,
816}
817
818#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
820pub struct ErrorObject {
821 pub code: String,
823 pub message: String,
825}
826
827#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
829pub struct IncompleteDetails {
830 pub reason: String,
832}
833
834#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
836pub struct OutputText {
837 pub annotations: Vec<Annotation>,
839 pub text: String,
841}
842
843#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
844#[serde(tag = "type", rename_all = "snake_case")]
845pub enum Annotation {
846 FileCitation(FileCitation),
848 UrlCitation(UrlCitation),
850 FilePath(FilePath),
852}
853
854#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
855pub struct FileCitation {
856 file_id: String,
858 index: u32,
860}
861
862#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
863pub struct UrlCitation {
864 end_index: u32,
866 start_index: u32,
868 title: String,
870 url: String,
872}
873
874#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
875pub struct FilePath {
876 file_id: String,
878 index: u32,
880}
881
882#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
884pub struct Refusal {
885 pub refusal: String,
887}
888
889#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
891pub struct OutputMessage {
892 pub content: Vec<Content>,
894 pub id: String,
896 pub role: Role,
898 pub status: OutputStatus,
900}
901
902#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
903#[serde(tag = "type", rename_all = "snake_case")]
904pub enum Content {
905 OutputText(OutputText),
907 Refusal(Refusal),
909}
910
911#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
913#[serde(tag = "type", rename_all = "snake_case")]
914pub enum OutputContent {
915 Message(OutputMessage),
917 FileSearchCall(FileSearchCallOutput),
919 FunctionCall(FunctionCall),
921 WebSearchCall(WebSearchCallOutput),
923 ComputerCall(ComputerCallOutput),
925 Reasoning(ReasoningItem),
929 ImageGenerationCall(ImageGenerationCallOutput),
931 CodeInterpreterCall(CodeInterpreterCallOutput),
933 LocalShellCall(LocalShellCallOutput),
935 McpCall(McpCallOutput),
937 McpListTools(McpListToolsOutput),
939 McpApprovalRequest(McpApprovalRequestOutput),
941}
942
943#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
945pub struct ReasoningItem {
946 pub id: String,
948 pub summary: Vec<SummaryText>,
950 #[serde(skip_serializing_if = "Option::is_none")]
953 pub encrypted_content: Option<String>,
954 #[serde(skip_serializing_if = "Option::is_none")]
956 pub status: Option<OutputStatus>,
957}
958
959#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
961pub struct SummaryText {
962 pub text: String,
964}
965
966#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
968pub struct FileSearchCallOutput {
969 pub id: String,
971 pub queries: Vec<String>,
973 pub status: FileSearchCallOutputStatus,
975 #[serde(skip_serializing_if = "Option::is_none")]
977 pub results: Option<Vec<FileSearchResult>>,
978}
979
980#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
981#[serde(rename_all = "snake_case")]
982pub enum FileSearchCallOutputStatus {
983 InProgress,
984 Searching,
985 Incomplete,
986 Failed,
987 Completed,
988}
989
990#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
992pub struct FileSearchResult {
993 pub file_id: String,
995 pub filename: String,
997 pub score: f32,
999 pub text: String,
1001 pub attributes: HashMap<String, serde_json::Value>,
1006}
1007
1008#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1009pub struct SafetyCheck {
1010 pub id: String,
1012 pub code: String,
1014 pub message: String,
1016}
1017
1018#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1020pub struct WebSearchCallOutput {
1021 pub id: String,
1023 pub status: String,
1025}
1026
1027#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1029pub struct ComputerCallOutput {
1030 pub action: ComputerCallAction,
1031 pub call_id: String,
1033 pub id: String,
1035 pub pending_safety_checks: Vec<SafetyCheck>,
1037 pub status: OutputStatus,
1039}
1040
1041#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1043pub struct Point {
1044 pub x: i32,
1045 pub y: i32,
1046}
1047
1048#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1050#[serde(tag = "type", rename_all = "snake_case")]
1051pub enum ComputerCallAction {
1052 Click(Click),
1054
1055 DoubleClick(DoubleClick),
1057
1058 Drag(Drag),
1060
1061 KeyPress(KeyPress),
1063
1064 Move(MoveAction),
1066
1067 Screenshot,
1069
1070 Scroll(Scroll),
1072
1073 Type(TypeAction),
1075
1076 Wait,
1078}
1079
1080#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1081#[serde(rename_all = "snake_case")]
1082pub enum ButtonPress {
1083 Left,
1084 Right,
1085 Wheel,
1086 Back,
1087 Forward,
1088}
1089
1090#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1092pub struct Click {
1093 pub button: ButtonPress,
1095 pub x: i32,
1097 pub y: i32,
1099}
1100
1101#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1103pub struct DoubleClick {
1104 pub x: i32,
1106 pub y: i32,
1108}
1109
1110#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1112pub struct Drag {
1113 pub path: Vec<Point>,
1115 pub x: i32,
1117 pub y: i32,
1119}
1120
1121#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1123pub struct KeyPress {
1124 pub keys: Vec<String>,
1126}
1127
1128#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1130pub struct MoveAction {
1131 pub x: i32,
1133 pub y: i32,
1135}
1136
1137#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1139pub struct Scroll {
1140 pub scroll_x: i32,
1142 pub scroll_y: i32,
1144 pub x: i32,
1146 pub y: i32,
1148}
1149
1150#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1152pub struct TypeAction {
1153 pub text: String,
1155}
1156
1157#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1159pub struct FunctionCall {
1160 pub id: String,
1162 pub call_id: String,
1164 pub name: String,
1166 pub arguments: String,
1168 pub status: OutputStatus,
1170}
1171
1172#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1174pub struct ImageGenerationCallOutput {
1175 pub id: String,
1177 pub result: Option<String>,
1179 pub status: String,
1181}
1182
1183#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1185pub struct CodeInterpreterCallOutput {
1186 #[serde(skip_serializing_if = "Option::is_none")]
1188 pub code: Option<String>,
1189 pub id: String,
1191 pub status: String,
1193 pub container_id: String,
1195 #[serde(skip_serializing_if = "Option::is_none")]
1197 pub outputs: Option<Vec<CodeInterpreterResult>>,
1198}
1199
1200#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1202#[serde(tag = "type", rename_all = "snake_case")]
1203pub enum CodeInterpreterResult {
1204 Logs(CodeInterpreterTextOutput),
1206 Files(CodeInterpreterFileOutput),
1208}
1209
1210#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1212pub struct CodeInterpreterTextOutput {
1213 pub logs: String,
1215}
1216
1217#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1219pub struct CodeInterpreterFileOutput {
1220 pub files: Vec<CodeInterpreterFile>,
1222}
1223
1224#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1225pub struct CodeInterpreterFile {
1226 file_id: String,
1228 mime_type: String,
1230}
1231
1232#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1234pub struct LocalShellCallOutput {
1235 pub action: LocalShellAction,
1237 pub call_id: String,
1239 pub id: String,
1241 pub status: String,
1243}
1244
1245#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1247pub struct LocalShellAction {
1248 pub command: Vec<String>,
1250 pub env: HashMap<String, String>,
1252 pub timeout_ms: Option<u64>,
1254 pub user: Option<String>,
1256 pub working_directory: Option<String>,
1258}
1259
1260#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1262pub struct McpCallOutput {
1263 pub arguments: String,
1265 pub id: String,
1267 pub name: String,
1269 pub server_label: String,
1271 pub error: Option<String>,
1273 pub output: Option<String>,
1275}
1276
1277#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1279pub struct McpListToolsOutput {
1280 pub id: String,
1282 pub server_label: String,
1284 pub tools: Vec<McpToolInfo>,
1286 #[serde(skip_serializing_if = "Option::is_none")]
1288 pub error: Option<String>,
1289}
1290
1291#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1293pub struct McpToolInfo {
1294 pub name: String,
1296 pub input_schema: Value,
1298 #[serde(skip_serializing_if = "Option::is_none")]
1300 pub annotations: Option<Value>,
1301 #[serde(skip_serializing_if = "Option::is_none")]
1303 pub description: Option<String>,
1304}
1305
1306#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1308pub struct McpApprovalRequestOutput {
1309 pub arguments: String,
1311 pub id: String,
1313 pub name: String,
1315 pub server_label: String,
1317}
1318
1319#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1321pub struct Usage {
1322 pub input_tokens: u32,
1324 pub input_tokens_details: PromptTokensDetails,
1326 pub output_tokens: u32,
1328 pub output_tokens_details: CompletionTokensDetails,
1330 pub total_tokens: u32,
1332}
1333
1334#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1336pub struct Response {
1337 pub created_at: u64,
1339
1340 #[serde(skip_serializing_if = "Option::is_none")]
1342 pub error: Option<ErrorObject>,
1343
1344 pub id: String,
1346
1347 #[serde(skip_serializing_if = "Option::is_none")]
1349 pub incomplete_details: Option<IncompleteDetails>,
1350
1351 #[serde(skip_serializing_if = "Option::is_none")]
1353 pub instructions: Option<String>,
1354
1355 #[serde(skip_serializing_if = "Option::is_none")]
1357 pub max_output_tokens: Option<u32>,
1358
1359 #[serde(skip_serializing_if = "Option::is_none")]
1361 pub metadata: Option<HashMap<String, String>>,
1362
1363 pub model: String,
1365
1366 pub object: String,
1368
1369 pub output: Vec<OutputContent>,
1371
1372 #[serde(skip_serializing_if = "Option::is_none")]
1376 pub output_text: Option<String>,
1377
1378 #[serde(skip_serializing_if = "Option::is_none")]
1380 pub parallel_tool_calls: Option<bool>,
1381
1382 #[serde(skip_serializing_if = "Option::is_none")]
1384 pub previous_response_id: Option<String>,
1385
1386 #[serde(skip_serializing_if = "Option::is_none")]
1388 pub reasoning: Option<ReasoningConfig>,
1389
1390 #[serde(skip_serializing_if = "Option::is_none")]
1392 pub store: Option<bool>,
1393
1394 #[serde(skip_serializing_if = "Option::is_none")]
1396 pub service_tier: Option<ServiceTier>,
1397
1398 pub status: Status,
1400
1401 #[serde(skip_serializing_if = "Option::is_none")]
1403 pub temperature: Option<f32>,
1404
1405 #[serde(skip_serializing_if = "Option::is_none")]
1407 pub text: Option<TextConfig>,
1408
1409 #[serde(skip_serializing_if = "Option::is_none")]
1411 pub tool_choice: Option<ToolChoice>,
1412
1413 #[serde(skip_serializing_if = "Option::is_none")]
1415 pub tools: Option<Vec<ToolDefinition>>,
1416
1417 #[serde(skip_serializing_if = "Option::is_none")]
1419 pub top_p: Option<f32>,
1420
1421 #[serde(skip_serializing_if = "Option::is_none")]
1423 pub truncation: Option<Truncation>,
1424
1425 #[serde(skip_serializing_if = "Option::is_none")]
1427 pub usage: Option<Usage>,
1428
1429 #[serde(skip_serializing_if = "Option::is_none")]
1431 pub user: Option<String>,
1432}
1433
1434#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1435#[serde(rename_all = "snake_case")]
1436pub enum Status {
1437 Completed,
1438 Failed,
1439 InProgress,
1440 Incomplete,
1441}
1442
1443#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1445#[serde(tag = "type")]
1446#[non_exhaustive] pub enum ResponseEvent {
1448 #[serde(rename = "response.created")]
1450 ResponseCreated(ResponseCreated),
1451 #[serde(rename = "response.in_progress")]
1453 ResponseInProgress(ResponseInProgress),
1454 #[serde(rename = "response.completed")]
1456 ResponseCompleted(ResponseCompleted),
1457 #[serde(rename = "response.failed")]
1459 ResponseFailed(ResponseFailed),
1460 #[serde(rename = "response.incomplete")]
1462 ResponseIncomplete(ResponseIncomplete),
1463 #[serde(rename = "response.queued")]
1465 ResponseQueued(ResponseQueued),
1466 #[serde(rename = "response.output_item.added")]
1468 ResponseOutputItemAdded(ResponseOutputItemAdded),
1469 #[serde(rename = "response.content_part.added")]
1471 ResponseContentPartAdded(ResponseContentPartAdded),
1472 #[serde(rename = "response.output_text.delta")]
1474 ResponseOutputTextDelta(ResponseOutputTextDelta),
1475 #[serde(rename = "response.output_text.done")]
1477 ResponseOutputTextDone(ResponseOutputTextDone),
1478 #[serde(rename = "response.refusal.delta")]
1480 ResponseRefusalDelta(ResponseRefusalDelta),
1481 #[serde(rename = "response.refusal.done")]
1483 ResponseRefusalDone(ResponseRefusalDone),
1484 #[serde(rename = "response.content_part.done")]
1486 ResponseContentPartDone(ResponseContentPartDone),
1487 #[serde(rename = "response.output_item.done")]
1489 ResponseOutputItemDone(ResponseOutputItemDone),
1490 #[serde(rename = "response.function_call_arguments.delta")]
1492 ResponseFunctionCallArgumentsDelta(ResponseFunctionCallArgumentsDelta),
1493 #[serde(rename = "response.function_call_arguments.done")]
1495 ResponseFunctionCallArgumentsDone(ResponseFunctionCallArgumentsDone),
1496 #[serde(rename = "response.file_search_call.in_progress")]
1498 ResponseFileSearchCallInProgress(ResponseFileSearchCallInProgress),
1499 #[serde(rename = "response.file_search_call.searching")]
1501 ResponseFileSearchCallSearching(ResponseFileSearchCallSearching),
1502 #[serde(rename = "response.file_search_call.completed")]
1504 ResponseFileSearchCallCompleted(ResponseFileSearchCallCompleted),
1505 #[serde(rename = "response.web_search_call.in_progress")]
1507 ResponseWebSearchCallInProgress(ResponseWebSearchCallInProgress),
1508 #[serde(rename = "response.web_search_call.searching")]
1510 ResponseWebSearchCallSearching(ResponseWebSearchCallSearching),
1511 #[serde(rename = "response.web_search_call.completed")]
1513 ResponseWebSearchCallCompleted(ResponseWebSearchCallCompleted),
1514 #[serde(rename = "response.reasoning_summary_part.added")]
1516 ResponseReasoningSummaryPartAdded(ResponseReasoningSummaryPartAdded),
1517 #[serde(rename = "response.reasoning_summary_part.done")]
1519 ResponseReasoningSummaryPartDone(ResponseReasoningSummaryPartDone),
1520 #[serde(rename = "response.reasoning_summary_text.delta")]
1522 ResponseReasoningSummaryTextDelta(ResponseReasoningSummaryTextDelta),
1523 #[serde(rename = "response.reasoning_summary_text.done")]
1525 ResponseReasoningSummaryTextDone(ResponseReasoningSummaryTextDone),
1526 #[serde(rename = "response.reasoning_summary.delta")]
1528 ResponseReasoningSummaryDelta(ResponseReasoningSummaryDelta),
1529 #[serde(rename = "response.reasoning_summary.done")]
1531 ResponseReasoningSummaryDone(ResponseReasoningSummaryDone),
1532 #[serde(rename = "response.image_generation_call.in_progress")]
1534 ResponseImageGenerationCallInProgress(ResponseImageGenerationCallInProgress),
1535 #[serde(rename = "response.image_generation_call.generating")]
1537 ResponseImageGenerationCallGenerating(ResponseImageGenerationCallGenerating),
1538 #[serde(rename = "response.image_generation_call.partial_image")]
1540 ResponseImageGenerationCallPartialImage(ResponseImageGenerationCallPartialImage),
1541 #[serde(rename = "response.image_generation_call.completed")]
1543 ResponseImageGenerationCallCompleted(ResponseImageGenerationCallCompleted),
1544 #[serde(rename = "response.mcp_call_arguments.delta")]
1546 ResponseMcpCallArgumentsDelta(ResponseMcpCallArgumentsDelta),
1547 #[serde(rename = "response.mcp_call_arguments.done")]
1549 ResponseMcpCallArgumentsDone(ResponseMcpCallArgumentsDone),
1550 #[serde(rename = "response.mcp_call.completed")]
1552 ResponseMcpCallCompleted(ResponseMcpCallCompleted),
1553 #[serde(rename = "response.mcp_call.failed")]
1555 ResponseMcpCallFailed(ResponseMcpCallFailed),
1556 #[serde(rename = "response.mcp_call.in_progress")]
1558 ResponseMcpCallInProgress(ResponseMcpCallInProgress),
1559 #[serde(rename = "response.mcp_list_tools.completed")]
1561 ResponseMcpListToolsCompleted(ResponseMcpListToolsCompleted),
1562 #[serde(rename = "response.mcp_list_tools.failed")]
1564 ResponseMcpListToolsFailed(ResponseMcpListToolsFailed),
1565 #[serde(rename = "response.mcp_list_tools.in_progress")]
1567 ResponseMcpListToolsInProgress(ResponseMcpListToolsInProgress),
1568 #[serde(rename = "response.code_interpreter_call.in_progress")]
1570 ResponseCodeInterpreterCallInProgress(ResponseCodeInterpreterCallInProgress),
1571 #[serde(rename = "response.code_interpreter_call.interpreting")]
1573 ResponseCodeInterpreterCallInterpreting(ResponseCodeInterpreterCallInterpreting),
1574 #[serde(rename = "response.code_interpreter_call.completed")]
1576 ResponseCodeInterpreterCallCompleted(ResponseCodeInterpreterCallCompleted),
1577 #[serde(rename = "response.code_interpreter_call_code.delta")]
1579 ResponseCodeInterpreterCallCodeDelta(ResponseCodeInterpreterCallCodeDelta),
1580 #[serde(rename = "response.code_interpreter_call_code.done")]
1582 ResponseCodeInterpreterCallCodeDone(ResponseCodeInterpreterCallCodeDone),
1583 #[serde(rename = "response.output_text.annotation.added")]
1585 ResponseOutputTextAnnotationAdded(ResponseOutputTextAnnotationAdded),
1586 #[serde(rename = "error")]
1588 ResponseError(ResponseError),
1589
1590 #[serde(untagged)]
1592 Unknown(serde_json::Value),
1593}
1594
1595pub type ResponseStream = OpenAIEventStream<ResponseEvent>;
1597
1598#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1599#[non_exhaustive]
1600pub struct ResponseCreated {
1601 pub sequence_number: u64,
1602 pub response: ResponseMetadata,
1603}
1604
1605#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1606#[non_exhaustive]
1607pub struct ResponseInProgress {
1608 pub sequence_number: u64,
1609 pub response: ResponseMetadata,
1610}
1611
1612#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1613#[non_exhaustive]
1614pub struct ResponseOutputItemAdded {
1615 pub sequence_number: u64,
1616 pub output_index: u32,
1617 pub item: OutputItem,
1618}
1619
1620#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1621#[non_exhaustive]
1622pub struct ResponseContentPartAdded {
1623 pub sequence_number: u64,
1624 pub item_id: String,
1625 pub output_index: u32,
1626 pub content_index: u32,
1627 pub part: ContentPart,
1628}
1629
1630#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1631#[non_exhaustive]
1632pub struct ResponseOutputTextDelta {
1633 pub sequence_number: u64,
1634 pub item_id: String,
1635 pub output_index: u32,
1636 pub content_index: u32,
1637 pub delta: String,
1638 #[serde(default, skip_serializing_if = "Option::is_none")]
1639 pub logprobs: Option<serde_json::Value>,
1640}
1641
1642#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1643#[non_exhaustive]
1644pub struct ResponseContentPartDone {
1645 pub sequence_number: u64,
1646 pub item_id: String,
1647 pub output_index: u32,
1648 pub content_index: u32,
1649 pub part: ContentPart,
1650}
1651
1652#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1653#[non_exhaustive]
1654pub struct ResponseOutputItemDone {
1655 pub sequence_number: u64,
1656 pub output_index: u32,
1657 pub item: OutputItem,
1658}
1659
1660#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1662#[non_exhaustive]
1663pub struct ResponseCompleted {
1664 pub sequence_number: u64,
1665 pub response: ResponseMetadata,
1666}
1667
1668#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1670#[non_exhaustive]
1671pub struct ResponseFailed {
1672 pub sequence_number: u64,
1673 pub response: ResponseMetadata,
1674}
1675
1676#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1678#[non_exhaustive]
1679pub struct ResponseIncomplete {
1680 pub sequence_number: u64,
1681 pub response: ResponseMetadata,
1682}
1683
1684#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1686#[non_exhaustive]
1687pub struct ResponseQueued {
1688 pub sequence_number: u64,
1689 pub response: ResponseMetadata,
1690}
1691
1692#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1694#[non_exhaustive]
1695pub struct ResponseOutputTextDone {
1696 pub sequence_number: u64,
1697 pub item_id: String,
1698 pub output_index: u32,
1699 pub content_index: u32,
1700 pub text: String,
1701 pub logprobs: Option<Vec<serde_json::Value>>,
1702}
1703
1704#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1706#[non_exhaustive]
1707pub struct ResponseRefusalDelta {
1708 pub sequence_number: u64,
1709 pub item_id: String,
1710 pub output_index: u32,
1711 pub content_index: u32,
1712 pub delta: String,
1713}
1714
1715#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1717#[non_exhaustive]
1718pub struct ResponseRefusalDone {
1719 pub sequence_number: u64,
1720 pub item_id: String,
1721 pub output_index: u32,
1722 pub content_index: u32,
1723 pub refusal: String,
1724}
1725
1726#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1728#[non_exhaustive]
1729pub struct ResponseFunctionCallArgumentsDelta {
1730 pub sequence_number: u64,
1731 pub item_id: String,
1732 pub output_index: u32,
1733 pub delta: String,
1734}
1735
1736#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1738#[non_exhaustive]
1739pub struct ResponseFunctionCallArgumentsDone {
1740 pub sequence_number: u64,
1741 pub item_id: String,
1742 pub output_index: u32,
1743 pub arguments: String,
1744}
1745
1746#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1748#[non_exhaustive]
1749pub struct ResponseError {
1750 pub sequence_number: u64,
1751 pub code: Option<String>,
1752 pub message: String,
1753 pub param: Option<String>,
1754}
1755
1756#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1758#[non_exhaustive]
1759pub struct ResponseFileSearchCallInProgress {
1760 pub sequence_number: u64,
1761 pub output_index: u32,
1762 pub item_id: String,
1763}
1764
1765#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1767#[non_exhaustive]
1768pub struct ResponseFileSearchCallSearching {
1769 pub sequence_number: u64,
1770 pub output_index: u32,
1771 pub item_id: String,
1772}
1773
1774#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1776#[non_exhaustive]
1777pub struct ResponseFileSearchCallCompleted {
1778 pub sequence_number: u64,
1779 pub output_index: u32,
1780 pub item_id: String,
1781}
1782
1783#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1785#[non_exhaustive]
1786pub struct ResponseWebSearchCallInProgress {
1787 pub sequence_number: u64,
1788 pub output_index: u32,
1789 pub item_id: String,
1790}
1791
1792#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1794#[non_exhaustive]
1795pub struct ResponseWebSearchCallSearching {
1796 pub sequence_number: u64,
1797 pub output_index: u32,
1798 pub item_id: String,
1799}
1800
1801#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1803#[non_exhaustive]
1804pub struct ResponseWebSearchCallCompleted {
1805 pub sequence_number: u64,
1806 pub output_index: u32,
1807 pub item_id: String,
1808}
1809
1810#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1812#[non_exhaustive]
1813pub struct ResponseReasoningSummaryPartAdded {
1814 pub sequence_number: u64,
1815 pub item_id: String,
1816 pub output_index: u32,
1817 pub summary_index: u32,
1818 pub part: serde_json::Value, }
1820
1821#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1823#[non_exhaustive]
1824pub struct ResponseReasoningSummaryPartDone {
1825 pub sequence_number: u64,
1826 pub item_id: String,
1827 pub output_index: u32,
1828 pub summary_index: u32,
1829 pub part: serde_json::Value,
1830}
1831
1832#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1834#[non_exhaustive]
1835pub struct ResponseReasoningSummaryTextDelta {
1836 pub sequence_number: u64,
1837 pub item_id: String,
1838 pub output_index: u32,
1839 pub summary_index: u32,
1840 pub delta: String,
1841}
1842
1843#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1845#[non_exhaustive]
1846pub struct ResponseReasoningSummaryTextDone {
1847 pub sequence_number: u64,
1848 pub item_id: String,
1849 pub output_index: u32,
1850 pub summary_index: u32,
1851 pub text: String,
1852}
1853
1854#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1856#[non_exhaustive]
1857pub struct ResponseReasoningSummaryDelta {
1858 pub sequence_number: u64,
1859 pub item_id: String,
1860 pub output_index: u32,
1861 pub summary_index: u32,
1862 pub delta: serde_json::Value,
1863}
1864
1865#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1867#[non_exhaustive]
1868pub struct ResponseReasoningSummaryDone {
1869 pub sequence_number: u64,
1870 pub item_id: String,
1871 pub output_index: u32,
1872 pub summary_index: u32,
1873 pub text: String,
1874}
1875
1876#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1878#[non_exhaustive]
1879pub struct ResponseImageGenerationCallInProgress {
1880 pub sequence_number: u64,
1881 pub output_index: u32,
1882 pub item_id: String,
1883}
1884
1885#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1887#[non_exhaustive]
1888pub struct ResponseImageGenerationCallGenerating {
1889 pub sequence_number: u64,
1890 pub output_index: u32,
1891 pub item_id: String,
1892}
1893
1894#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1896#[non_exhaustive]
1897pub struct ResponseImageGenerationCallPartialImage {
1898 pub sequence_number: u64,
1899 pub output_index: u32,
1900 pub item_id: String,
1901 pub partial_image_index: u32,
1902 pub partial_image_b64: String,
1903}
1904
1905#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1907#[non_exhaustive]
1908pub struct ResponseImageGenerationCallCompleted {
1909 pub sequence_number: u64,
1910 pub output_index: u32,
1911 pub item_id: String,
1912}
1913
1914#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1916#[non_exhaustive]
1917pub struct ResponseMcpCallArgumentsDelta {
1918 pub sequence_number: u64,
1919 pub output_index: u32,
1920 pub item_id: String,
1921 pub delta: String,
1922}
1923
1924#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1926#[non_exhaustive]
1927pub struct ResponseMcpCallArgumentsDone {
1928 pub sequence_number: u64,
1929 pub output_index: u32,
1930 pub item_id: String,
1931 pub arguments: String,
1932}
1933
1934#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1936#[non_exhaustive]
1937pub struct ResponseMcpCallCompleted {
1938 pub sequence_number: u64,
1939 pub output_index: u32,
1940 pub item_id: String,
1941}
1942
1943#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1945#[non_exhaustive]
1946pub struct ResponseMcpCallFailed {
1947 pub sequence_number: u64,
1948 pub output_index: u32,
1949 pub item_id: String,
1950}
1951
1952#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1954#[non_exhaustive]
1955pub struct ResponseMcpCallInProgress {
1956 pub sequence_number: u64,
1957 pub output_index: u32,
1958 pub item_id: String,
1959}
1960
1961#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1963#[non_exhaustive]
1964pub struct ResponseMcpListToolsCompleted {
1965 pub sequence_number: u64,
1966 pub output_index: u32,
1967 pub item_id: String,
1968}
1969
1970#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1972#[non_exhaustive]
1973pub struct ResponseMcpListToolsFailed {
1974 pub sequence_number: u64,
1975 pub output_index: u32,
1976 pub item_id: String,
1977}
1978
1979#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1981#[non_exhaustive]
1982pub struct ResponseMcpListToolsInProgress {
1983 pub sequence_number: u64,
1984 pub output_index: u32,
1985 pub item_id: String,
1986}
1987
1988#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1990#[non_exhaustive]
1991pub struct ResponseCodeInterpreterCallInProgress {
1992 pub sequence_number: u64,
1993 pub output_index: u32,
1994 pub item_id: String,
1995}
1996
1997#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1999#[non_exhaustive]
2000pub struct ResponseCodeInterpreterCallInterpreting {
2001 pub sequence_number: u64,
2002 pub output_index: u32,
2003 pub item_id: String,
2004}
2005
2006#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2008#[non_exhaustive]
2009pub struct ResponseCodeInterpreterCallCompleted {
2010 pub sequence_number: u64,
2011 pub output_index: u32,
2012 pub item_id: String,
2013}
2014
2015#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2017#[non_exhaustive]
2018pub struct ResponseCodeInterpreterCallCodeDelta {
2019 pub sequence_number: u64,
2020 pub output_index: u32,
2021 pub item_id: String,
2022 pub delta: String,
2023}
2024
2025#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2027#[non_exhaustive]
2028pub struct ResponseCodeInterpreterCallCodeDone {
2029 pub sequence_number: u64,
2030 pub output_index: u32,
2031 pub item_id: String,
2032 pub code: String,
2033}
2034
2035#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2037#[non_exhaustive]
2038pub struct ResponseMetadata {
2039 pub id: String,
2040 #[serde(skip_serializing_if = "Option::is_none")]
2041 pub object: Option<String>,
2042 pub created_at: u64,
2043 pub status: Status,
2044 #[serde(skip_serializing_if = "Option::is_none")]
2045 pub model: Option<String>,
2046 #[serde(skip_serializing_if = "Option::is_none")]
2047 pub usage: Option<Usage>,
2048 #[serde(skip_serializing_if = "Option::is_none")]
2049 pub error: Option<ErrorObject>,
2050 #[serde(skip_serializing_if = "Option::is_none")]
2051 pub incomplete_details: Option<IncompleteDetails>,
2052 #[serde(skip_serializing_if = "Option::is_none")]
2053 pub input: Option<Input>,
2054 #[serde(skip_serializing_if = "Option::is_none")]
2055 pub instructions: Option<String>,
2056 #[serde(skip_serializing_if = "Option::is_none")]
2057 pub max_output_tokens: Option<u32>,
2058 #[serde(skip_serializing_if = "Option::is_none")]
2060 pub background: Option<bool>,
2061 #[serde(skip_serializing_if = "Option::is_none")]
2063 pub service_tier: Option<ServiceTier>,
2064 #[serde(skip_serializing_if = "Option::is_none")]
2066 pub top_logprobs: Option<u32>,
2067 #[serde(skip_serializing_if = "Option::is_none")]
2069 pub max_tool_calls: Option<u32>,
2070 #[serde(skip_serializing_if = "Option::is_none")]
2071 pub output: Option<Vec<OutputItem>>,
2072 #[serde(skip_serializing_if = "Option::is_none")]
2073 pub parallel_tool_calls: Option<bool>,
2074 #[serde(skip_serializing_if = "Option::is_none")]
2075 pub previous_response_id: Option<String>,
2076 #[serde(skip_serializing_if = "Option::is_none")]
2077 pub reasoning: Option<ReasoningConfig>,
2078 #[serde(skip_serializing_if = "Option::is_none")]
2079 pub store: Option<bool>,
2080 #[serde(skip_serializing_if = "Option::is_none")]
2081 pub temperature: Option<f32>,
2082 #[serde(skip_serializing_if = "Option::is_none")]
2083 pub text: Option<TextConfig>,
2084 #[serde(skip_serializing_if = "Option::is_none")]
2085 pub tool_choice: Option<ToolChoice>,
2086 #[serde(skip_serializing_if = "Option::is_none")]
2087 pub tools: Option<Vec<ToolDefinition>>,
2088 #[serde(skip_serializing_if = "Option::is_none")]
2089 pub top_p: Option<f32>,
2090 #[serde(skip_serializing_if = "Option::is_none")]
2091 pub truncation: Option<Truncation>,
2092 #[serde(skip_serializing_if = "Option::is_none")]
2093 pub user: Option<String>,
2094 #[serde(skip_serializing_if = "Option::is_none")]
2095 pub metadata: Option<HashMap<String, String>>,
2096 #[serde(skip_serializing_if = "Option::is_none")]
2098 pub prompt_cache_key: Option<String>,
2099 #[serde(skip_serializing_if = "Option::is_none")]
2101 pub safety_identifier: Option<String>,
2102}
2103
2104#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2106#[serde(tag = "type")]
2107#[serde(rename_all = "snake_case")]
2108#[non_exhaustive]
2109pub enum OutputItem {
2110 Message(OutputMessage),
2111 FileSearchCall(FileSearchCallOutput),
2112 FunctionCall(FunctionCall),
2113 WebSearchCall(WebSearchCallOutput),
2114 ComputerCall(ComputerCallOutput),
2115 Reasoning(ReasoningItem),
2116 ImageGenerationCall(ImageGenerationCallOutput),
2117 CodeInterpreterCall(CodeInterpreterCallOutput),
2118 LocalShellCall(LocalShellCallOutput),
2119 McpCall(McpCallOutput),
2120 McpListTools(McpListToolsOutput),
2121 McpApprovalRequest(McpApprovalRequestOutput),
2122 CustomToolCall(CustomToolCallOutput),
2123}
2124
2125#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2126#[non_exhaustive]
2127pub struct CustomToolCallOutput {
2128 pub call_id: String,
2129 pub input: String,
2130 pub name: String,
2131 pub id: String,
2132}
2133
2134#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2136#[non_exhaustive]
2137pub struct ContentPart {
2138 #[serde(rename = "type")]
2139 pub part_type: String,
2140 pub text: Option<String>,
2141 #[serde(default, skip_serializing_if = "Option::is_none")]
2142 pub annotations: Option<Vec<serde_json::Value>>,
2143 #[serde(default, skip_serializing_if = "Option::is_none")]
2144 pub logprobs: Option<Vec<serde_json::Value>>,
2145}
2146
2147#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2152#[non_exhaustive]
2153pub struct ResponseOutputTextAnnotationAdded {
2154 pub sequence_number: u64,
2155 pub item_id: String,
2156 pub output_index: u32,
2157 pub content_index: u32,
2158 pub annotation_index: u32,
2159 pub annotation: TextAnnotation,
2160}
2161
2162#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2164#[non_exhaustive]
2165pub struct TextAnnotation {
2166 #[serde(rename = "type")]
2167 pub annotation_type: String,
2168 pub text: String,
2169 pub start: u32,
2170 pub end: u32,
2171}