1use crate::error::OpenAIError;
12pub use crate::types::{
13 CompletionTokensDetails, ImageDetail, PromptTokensDetails, ReasoningEffort,
14 ResponseFormatJsonSchema,
15};
16use derive_builder::Builder;
17use futures::Stream;
18use serde::{Deserialize, Serialize};
19use serde_json::Value;
20use std::collections::HashMap;
21use std::pin::Pin;
22
23#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
25#[serde(rename_all = "lowercase")]
26pub enum Role {
27 User,
28 Assistant,
29 System,
30 Developer,
31}
32
33#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
35#[serde(rename_all = "snake_case")]
36pub enum OutputStatus {
37 InProgress,
38 Completed,
39 Incomplete,
40}
41
42#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
44#[serde(untagged)]
45pub enum Input {
46 Text(String),
48 Items(Vec<InputItem>),
50}
51
52#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
54#[serde(untagged, rename_all = "snake_case")]
55pub enum InputItem {
56 Message(InputMessage),
57 Custom(serde_json::Value),
58}
59
60#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
62#[builder(
63 name = "InputMessageArgs",
64 pattern = "mutable",
65 setter(into, strip_option),
66 default
67)]
68#[builder(build_fn(error = "OpenAIError"))]
69pub struct InputMessage {
70 #[serde(default, rename = "type")]
71 pub kind: InputMessageType,
72 pub role: Role,
74 pub content: InputContent,
77}
78
79#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
80#[serde(rename_all = "snake_case")]
81pub enum InputMessageType {
82 #[default]
83 Message,
84}
85
86#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
87#[serde(untagged)]
88pub enum InputContent {
89 TextInput(String),
91 InputItemContentList(Vec<ContentType>),
93}
94
95#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
97#[serde(tag = "type", rename_all = "snake_case")]
98pub enum ContentType {
99 InputText(InputText),
101 InputImage(InputImage),
103 InputFile(InputFile),
105}
106
107#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
108pub struct InputText {
109 text: String,
110}
111
112#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
113#[builder(
114 name = "InputImageArgs",
115 pattern = "mutable",
116 setter(into, strip_option),
117 default
118)]
119#[builder(build_fn(error = "OpenAIError"))]
120pub struct InputImage {
121 detail: ImageDetail,
123 #[serde(skip_serializing_if = "Option::is_none")]
125 file_id: Option<String>,
126 #[serde(skip_serializing_if = "Option::is_none")]
129 image_url: Option<String>,
130}
131
132#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
133#[builder(
134 name = "InputFileArgs",
135 pattern = "mutable",
136 setter(into, strip_option),
137 default
138)]
139#[builder(build_fn(error = "OpenAIError"))]
140pub struct InputFile {
141 #[serde(skip_serializing_if = "Option::is_none")]
143 file_data: Option<String>,
144 #[serde(skip_serializing_if = "Option::is_none")]
146 file_id: Option<String>,
147 #[serde(skip_serializing_if = "Option::is_none")]
149 filename: Option<String>,
150}
151
152#[derive(Clone, Serialize, Deserialize, Debug, Default, Builder, PartialEq)]
154#[builder(
155 name = "CreateResponseArgs",
156 pattern = "mutable",
157 setter(into, strip_option),
158 default
159)]
160#[builder(build_fn(error = "OpenAIError"))]
161pub struct CreateResponse {
162 pub input: Input,
164
165 pub model: String,
169
170 #[serde(skip_serializing_if = "Option::is_none")]
173 pub background: Option<bool>,
174
175 #[serde(skip_serializing_if = "Option::is_none")]
193 pub include: Option<Vec<String>>,
194
195 #[serde(skip_serializing_if = "Option::is_none")]
201 pub instructions: Option<String>,
202
203 #[serde(skip_serializing_if = "Option::is_none")]
206 pub max_output_tokens: Option<u32>,
207
208 pub max_tool_calls: Option<u32>,
212
213 #[serde(skip_serializing_if = "Option::is_none")]
220 pub metadata: Option<HashMap<String, String>>,
221
222 #[serde(skip_serializing_if = "Option::is_none")]
224 pub parallel_tool_calls: Option<bool>,
225
226 #[serde(skip_serializing_if = "Option::is_none")]
229 pub previous_response_id: Option<String>,
230
231 #[serde(skip_serializing_if = "Option::is_none")]
233 pub prompt: Option<PromptConfig>,
234
235 #[serde(skip_serializing_if = "Option::is_none")]
237 pub reasoning: Option<ReasoningConfig>,
238
239 #[serde(skip_serializing_if = "Option::is_none")]
259 pub service_tier: Option<ServiceTier>,
260
261 #[serde(skip_serializing_if = "Option::is_none")]
263 pub store: Option<bool>,
264
265 #[serde(skip_serializing_if = "Option::is_none")]
268 pub stream: Option<bool>,
269
270 #[serde(skip_serializing_if = "Option::is_none")]
275 pub temperature: Option<f32>,
276
277 #[serde(skip_serializing_if = "Option::is_none")]
280 pub text: Option<TextConfig>,
281
282 #[serde(skip_serializing_if = "Option::is_none")]
285 pub tool_choice: Option<ToolChoice>,
286
287 #[serde(skip_serializing_if = "Option::is_none")]
291 pub tools: Option<Vec<ToolDefinition>>,
292
293 #[serde(skip_serializing_if = "Option::is_none")]
296 pub top_logprobs: Option<u32>, #[serde(skip_serializing_if = "Option::is_none")]
304 pub top_p: Option<f32>,
305
306 #[serde(skip_serializing_if = "Option::is_none")]
310 pub truncation: Option<Truncation>,
311
312 #[serde(skip_serializing_if = "Option::is_none")]
315 pub user: Option<String>,
316}
317
318#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
320pub struct PromptConfig {
321 pub id: String,
323
324 #[serde(skip_serializing_if = "Option::is_none")]
326 pub version: Option<String>,
327
328 #[serde(skip_serializing_if = "Option::is_none")]
332 pub variables: Option<HashMap<String, String>>,
333}
334
335#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
337#[serde(rename_all = "lowercase")]
338pub enum ServiceTier {
339 Auto,
340 Default,
341 Flex,
342}
343
344#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
346#[serde(rename_all = "lowercase")]
347pub enum Truncation {
348 Auto,
349 Disabled,
350}
351
352#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
354#[builder(
355 name = "ReasoningConfigArgs",
356 pattern = "mutable",
357 setter(into, strip_option),
358 default
359)]
360#[builder(build_fn(error = "OpenAIError"))]
361pub struct ReasoningConfig {
362 #[serde(skip_serializing_if = "Option::is_none")]
364 pub effort: Option<ReasoningEffort>,
365 #[serde(skip_serializing_if = "Option::is_none")]
367 pub summary: Option<ReasoningSummary>,
368}
369
370#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
371#[serde(rename_all = "lowercase")]
372pub enum ReasoningSummary {
373 Auto,
374 Concise,
375 Detailed,
376}
377
378#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
380pub struct TextConfig {
381 pub format: TextResponseFormat,
383}
384
385#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
386#[serde(tag = "type", rename_all = "snake_case")]
387pub enum TextResponseFormat {
388 Text,
390 JsonObject,
392 JsonSchema(ResponseFormatJsonSchema),
394}
395
396#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
398#[serde(tag = "type", rename_all = "snake_case")]
399pub enum ToolDefinition {
400 FileSearch(FileSearch),
402 Function(Function),
404 WebSearchPreview(WebSearchPreview),
406 ComputerUsePreview(ComputerUsePreview),
408 Mcp(Mcp),
410 CodeInterpreter(CodeInterpreter),
412 ImageGeneration(ImageGeneration),
414 LocalShell,
416}
417
418#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
419#[builder(
420 name = "FileSearchArgs",
421 pattern = "mutable",
422 setter(into, strip_option),
423 default
424)]
425#[builder(build_fn(error = "OpenAIError"))]
426pub struct FileSearch {
427 pub vector_store_ids: Vec<String>,
429 #[serde(skip_serializing_if = "Option::is_none")]
431 pub max_num_results: Option<u32>,
432 #[serde(skip_serializing_if = "Option::is_none")]
434 pub filters: Option<Filter>,
435 #[serde(skip_serializing_if = "Option::is_none")]
437 pub ranking_options: Option<RankingOptions>,
438}
439
440#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
441#[builder(
442 name = "FunctionArgs",
443 pattern = "mutable",
444 setter(into, strip_option),
445 default
446)]
447pub struct Function {
448 pub name: String,
450 pub parameters: serde_json::Value,
452 pub strict: bool,
454 #[serde(skip_serializing_if = "Option::is_none")]
457 pub description: Option<String>,
458}
459
460#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
461#[builder(
462 name = "WebSearchPreviewArgs",
463 pattern = "mutable",
464 setter(into, strip_option),
465 default
466)]
467pub struct WebSearchPreview {
468 #[serde(skip_serializing_if = "Option::is_none")]
470 pub user_location: Option<Location>,
471 #[serde(skip_serializing_if = "Option::is_none")]
473 pub search_context_size: Option<WebSearchContextSize>,
474}
475
476#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
477#[serde(rename_all = "lowercase")]
478pub enum WebSearchContextSize {
479 Low,
480 Medium,
481 High,
482}
483
484#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
485#[builder(
486 name = "ComputerUsePreviewArgs",
487 pattern = "mutable",
488 setter(into, strip_option),
489 default
490)]
491pub struct ComputerUsePreview {
492 environment: String,
494 display_width: u32,
496 display_height: u32,
498}
499
500#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
502pub struct RankingOptions {
503 pub ranker: String,
505 #[serde(skip_serializing_if = "Option::is_none")]
508 pub score_threshold: Option<f32>,
509}
510
511#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
513#[serde(untagged)]
514pub enum Filter {
515 Comparison(ComparisonFilter),
518 Compound(CompoundFilter),
520}
521
522#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
524pub struct ComparisonFilter {
525 #[serde(rename = "type")]
527 pub op: ComparisonType,
528 pub key: String,
530 pub value: serde_json::Value,
532}
533
534#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
535pub enum ComparisonType {
536 #[serde(rename = "eq")]
537 Equals,
538 #[serde(rename = "ne")]
539 NotEquals,
540 #[serde(rename = "gt")]
541 GreaterThan,
542 #[serde(rename = "gte")]
543 GreaterThanOrEqualTo,
544 #[serde(rename = "lt")]
545 LessThan,
546 #[serde(rename = "lte")]
547 LessThanOrEqualTo,
548}
549
550#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
552pub struct CompoundFilter {
553 #[serde(rename = "type")]
555 pub op: ComparisonType,
556 pub filters: Vec<Filter>,
558}
559
560#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
561#[serde(rename_all = "lowercase")]
562pub enum CompoundType {
563 And,
564 Or,
565}
566
567#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
569#[builder(
570 name = "LocationArgs",
571 pattern = "mutable",
572 setter(into, strip_option),
573 default
574)]
575#[builder(build_fn(error = "OpenAIError"))]
576pub struct Location {
577 #[serde(rename = "type")]
579 pub kind: String,
580 #[serde(skip_serializing_if = "Option::is_none")]
582 pub city: Option<String>,
583 #[serde(skip_serializing_if = "Option::is_none")]
585 pub country: Option<String>,
586 #[serde(skip_serializing_if = "Option::is_none")]
588 pub region: Option<String>,
589 #[serde(skip_serializing_if = "Option::is_none")]
591 pub timezone: Option<String>,
592}
593
594#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
596#[builder(
597 name = "McpArgs",
598 pattern = "mutable",
599 setter(into, strip_option),
600 default
601)]
602#[builder(build_fn(error = "OpenAIError"))]
603pub struct Mcp {
604 pub server_label: String,
606 pub server_url: String,
608 #[serde(skip_serializing_if = "Option::is_none")]
610 pub allowed_tools: Option<AllowedTools>,
611 #[serde(skip_serializing_if = "Option::is_none")]
613 pub headers: Option<Value>,
614 #[serde(skip_serializing_if = "Option::is_none")]
616 pub require_approval: Option<RequireApproval>,
617}
618
619#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
621#[serde(untagged)]
622pub enum AllowedTools {
623 List(Vec<String>),
625 Filter(McpAllowedToolsFilter),
627}
628
629#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
631pub struct McpAllowedToolsFilter {
632 #[serde(skip_serializing_if = "Option::is_none")]
634 pub tool_names: Option<Vec<String>>,
635}
636
637#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
639#[serde(untagged)]
640pub enum RequireApproval {
641 Policy(RequireApprovalPolicy),
643 Filter(McpApprovalFilter),
645}
646
647#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
648#[serde(rename_all = "lowercase")]
649pub enum RequireApprovalPolicy {
650 Always,
651 Never,
652}
653
654#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
656pub struct McpApprovalFilter {
657 #[serde(skip_serializing_if = "Option::is_none")]
659 pub always: Option<McpAllowedToolsFilter>,
660 #[serde(skip_serializing_if = "Option::is_none")]
662 pub never: Option<McpAllowedToolsFilter>,
663}
664
665#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
667#[serde(untagged)]
668pub enum CodeInterpreterContainer {
669 Id(String),
671 Container(CodeInterpreterContainerKind),
673}
674
675#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
677#[serde(tag = "type", rename_all = "snake_case")]
678pub enum CodeInterpreterContainerKind {
679 Auto {
680 #[serde(skip_serializing_if = "Option::is_none")]
682 file_ids: Option<Vec<String>>,
683 },
684}
685
686#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
688#[builder(
689 name = "CodeInterpreterArgs",
690 pattern = "mutable",
691 setter(into, strip_option),
692 default
693)]
694#[builder(build_fn(error = "OpenAIError"))]
695pub struct CodeInterpreter {
696 pub container: CodeInterpreterContainer,
698}
699
700#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
702pub struct InputImageMask {
703 #[serde(skip_serializing_if = "Option::is_none")]
705 pub image_url: Option<String>,
706 #[serde(skip_serializing_if = "Option::is_none")]
708 pub file_id: Option<String>,
709}
710
711#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
713#[builder(
714 name = "ImageGenerationArgs",
715 pattern = "mutable",
716 setter(into, strip_option),
717 default
718)]
719#[builder(build_fn(error = "OpenAIError"))]
720pub struct ImageGeneration {
721 #[serde(skip_serializing_if = "Option::is_none")]
723 pub background: Option<ImageGenerationBackground>,
724 #[serde(skip_serializing_if = "Option::is_none")]
726 pub input_image_mask: Option<InputImageMask>,
727 #[serde(skip_serializing_if = "Option::is_none")]
729 pub model: Option<String>,
730 #[serde(skip_serializing_if = "Option::is_none")]
732 pub moderation: Option<String>,
733 #[serde(skip_serializing_if = "Option::is_none")]
735 pub output_compression: Option<u8>,
736 #[serde(skip_serializing_if = "Option::is_none")]
738 pub output_format: Option<ImageGenerationOutputFormat>,
739 #[serde(skip_serializing_if = "Option::is_none")]
741 pub partial_images: Option<u8>,
742 #[serde(skip_serializing_if = "Option::is_none")]
744 pub quality: Option<ImageGenerationQuality>,
745 #[serde(skip_serializing_if = "Option::is_none")]
747 pub size: Option<ImageGenerationSize>,
748}
749
750#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
751#[serde(rename_all = "lowercase")]
752pub enum ImageGenerationBackground {
753 Transparent,
754 Opaque,
755 Auto,
756}
757
758#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
759#[serde(rename_all = "lowercase")]
760pub enum ImageGenerationOutputFormat {
761 Png,
762 Webp,
763 Jpeg,
764}
765
766#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
767#[serde(rename_all = "lowercase")]
768pub enum ImageGenerationQuality {
769 Low,
770 Medium,
771 High,
772 Auto,
773}
774
775#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
776#[serde(rename_all = "lowercase")]
777pub enum ImageGenerationSize {
778 Auto,
779 #[serde(rename = "1024x1024")]
780 Size1024x1024,
781 #[serde(rename = "1024x1536")]
782 Size1024x1536,
783 #[serde(rename = "1536x1024")]
784 Size1536x1024,
785}
786
787#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
789#[serde(untagged)]
790pub enum ToolChoice {
791 Mode(ToolChoiceMode),
793 Hosted {
795 #[serde(rename = "type")]
797 kind: HostedToolType,
798 },
799 Function {
801 name: String,
803 },
804}
805
806#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
808#[serde(rename_all = "lowercase")]
809pub enum ToolChoiceMode {
810 None,
812 Auto,
814 Required,
816}
817
818#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
820#[serde(rename_all = "snake_case")]
821pub enum HostedToolType {
822 FileSearch,
823 WebSearchPreview,
824 ComputerUsePreview,
825}
826
827#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
829pub struct ErrorObject {
830 pub code: String,
832 pub message: String,
834}
835
836#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
838pub struct IncompleteDetails {
839 pub reason: String,
841}
842
843#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
845pub struct OutputText {
846 pub annotations: Vec<Annotation>,
848 pub text: String,
850}
851
852#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
853#[serde(tag = "type", rename_all = "snake_case")]
854pub enum Annotation {
855 FileCitation(FileCitation),
857 UrlCitation(UrlCitation),
859 FilePath(FilePath),
861}
862
863#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
864pub struct FileCitation {
865 file_id: String,
867 index: u32,
869}
870
871#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
872pub struct UrlCitation {
873 end_index: u32,
875 start_index: u32,
877 title: String,
879 url: String,
881}
882
883#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
884pub struct FilePath {
885 file_id: String,
887 index: u32,
889}
890
891#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
893pub struct Refusal {
894 pub refusal: String,
896}
897
898#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
900pub struct OutputMessage {
901 pub content: Vec<Content>,
903 pub id: String,
905 pub role: Role,
907 pub status: OutputStatus,
909}
910
911#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
912#[serde(tag = "type", rename_all = "snake_case")]
913pub enum Content {
914 OutputText(OutputText),
916 Refusal(Refusal),
918}
919
920#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
922#[serde(tag = "type", rename_all = "snake_case")]
923pub enum OutputContent {
924 Message(OutputMessage),
926 FileSearchCall(FileSearchCallOutput),
928 FunctionCall(FunctionCall),
930 WebSearchCall(WebSearchCallOutput),
932 ComputerCall(ComputerCallOutput),
934 Reasoning(ReasoningItem),
938 ImageGenerationCall(ImageGenerationCallOutput),
940 CodeInterpreterCall(CodeInterpreterCallOutput),
942 LocalShellCall(LocalShellCallOutput),
944 McpCall(McpCallOutput),
946 McpListTools(McpListToolsOutput),
948 McpApprovalRequest(McpApprovalRequestOutput),
950}
951
952#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
954pub struct ReasoningItem {
955 pub id: String,
957 pub summary: Vec<SummaryText>,
959 #[serde(skip_serializing_if = "Option::is_none")]
962 pub encrypted_content: Option<String>,
963 #[serde(skip_serializing_if = "Option::is_none")]
965 pub status: Option<OutputStatus>,
966}
967
968#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
970pub struct SummaryText {
971 pub text: String,
973}
974
975#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
977pub struct FileSearchCallOutput {
978 pub id: String,
980 pub queries: Vec<String>,
982 pub status: FileSearchCallOutputStatus,
984 #[serde(skip_serializing_if = "Option::is_none")]
986 pub results: Option<Vec<FileSearchResult>>,
987}
988
989#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
990#[serde(rename_all = "snake_case")]
991pub enum FileSearchCallOutputStatus {
992 InProgress,
993 Searching,
994 Incomplete,
995 Failed,
996 Completed,
997}
998
999#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1001pub struct FileSearchResult {
1002 pub file_id: String,
1004 pub filename: String,
1006 pub score: f32,
1008 pub text: String,
1010 pub attributes: HashMap<String, serde_json::Value>,
1015}
1016
1017#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1018pub struct SafetyCheck {
1019 pub id: String,
1021 pub code: String,
1023 pub message: String,
1025}
1026
1027#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1029pub struct WebSearchCallOutput {
1030 pub id: String,
1032 pub status: String,
1034}
1035
1036#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1038pub struct ComputerCallOutput {
1039 pub action: ComputerCallAction,
1040 pub call_id: String,
1042 pub id: String,
1044 pub pending_safety_checks: Vec<SafetyCheck>,
1046 pub status: OutputStatus,
1048}
1049
1050#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1052pub struct Point {
1053 pub x: i32,
1054 pub y: i32,
1055}
1056
1057#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1059#[serde(tag = "type", rename_all = "snake_case")]
1060pub enum ComputerCallAction {
1061 Click(Click),
1063
1064 DoubleClick(DoubleClick),
1066
1067 Drag(Drag),
1069
1070 KeyPress(KeyPress),
1072
1073 Move(MoveAction),
1075
1076 Screenshot,
1078
1079 Scroll(Scroll),
1081
1082 Type(TypeAction),
1084
1085 Wait,
1087}
1088
1089#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1090#[serde(rename_all = "snake_case")]
1091pub enum ButtonPress {
1092 Left,
1093 Right,
1094 Wheel,
1095 Back,
1096 Forward,
1097}
1098
1099#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1101pub struct Click {
1102 pub button: ButtonPress,
1104 pub x: i32,
1106 pub y: i32,
1108}
1109
1110#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1112pub struct DoubleClick {
1113 pub x: i32,
1115 pub y: i32,
1117}
1118
1119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1121pub struct Drag {
1122 pub path: Vec<Point>,
1124 pub x: i32,
1126 pub y: i32,
1128}
1129
1130#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1132pub struct KeyPress {
1133 pub keys: Vec<String>,
1135}
1136
1137#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1139pub struct MoveAction {
1140 pub x: i32,
1142 pub y: i32,
1144}
1145
1146#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1148pub struct Scroll {
1149 pub scroll_x: i32,
1151 pub scroll_y: i32,
1153 pub x: i32,
1155 pub y: i32,
1157}
1158
1159#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1161pub struct TypeAction {
1162 pub text: String,
1164}
1165
1166#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1168pub struct FunctionCall {
1169 pub id: String,
1171 pub call_id: String,
1173 pub name: String,
1175 pub arguments: String,
1177 pub status: OutputStatus,
1179}
1180
1181#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1183pub struct ImageGenerationCallOutput {
1184 pub id: String,
1186 pub result: Option<String>,
1188 pub status: String,
1190}
1191
1192#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1194pub struct CodeInterpreterCallOutput {
1195 pub code: String,
1197 pub id: String,
1199 pub status: String,
1201 pub container_id: String,
1203 pub results: Vec<CodeInterpreterResult>,
1205}
1206
1207#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1209#[serde(tag = "type", rename_all = "snake_case")]
1210pub enum CodeInterpreterResult {
1211 Logs(CodeInterpreterTextOutput),
1213 Files(CodeInterpreterFileOutput),
1215}
1216
1217#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1219pub struct CodeInterpreterTextOutput {
1220 pub logs: String,
1222}
1223
1224#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1226pub struct CodeInterpreterFileOutput {
1227 pub files: Vec<CodeInterpreterFile>,
1229}
1230
1231#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1232pub struct CodeInterpreterFile {
1233 file_id: String,
1235 mime_type: String,
1237}
1238
1239#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1241pub struct LocalShellCallOutput {
1242 pub action: LocalShellAction,
1244 pub call_id: String,
1246 pub id: String,
1248 pub status: String,
1250}
1251
1252#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1254pub struct LocalShellAction {
1255 pub command: Vec<String>,
1257 pub env: HashMap<String, String>,
1259 pub timeout_ms: Option<u64>,
1261 pub user: Option<String>,
1263 pub working_directory: Option<String>,
1265}
1266
1267#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1269pub struct McpCallOutput {
1270 pub arguments: String,
1272 pub id: String,
1274 pub name: String,
1276 pub server_label: String,
1278 pub error: Option<String>,
1280 pub output: Option<String>,
1282}
1283
1284#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1286pub struct McpListToolsOutput {
1287 pub id: String,
1289 pub server_label: String,
1291 pub tools: Vec<McpToolInfo>,
1293 #[serde(skip_serializing_if = "Option::is_none")]
1295 pub error: Option<String>,
1296}
1297
1298#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1300pub struct McpToolInfo {
1301 pub name: String,
1303 pub input_schema: Value,
1305 #[serde(skip_serializing_if = "Option::is_none")]
1307 pub annotations: Option<Value>,
1308 #[serde(skip_serializing_if = "Option::is_none")]
1310 pub description: Option<String>,
1311}
1312
1313#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1315pub struct McpApprovalRequestOutput {
1316 pub arguments: String,
1318 pub id: String,
1320 pub name: String,
1322 pub server_label: String,
1324}
1325
1326#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1328pub struct Usage {
1329 pub input_tokens: u32,
1331 pub input_tokens_details: PromptTokensDetails,
1333 pub output_tokens: u32,
1335 pub output_tokens_details: CompletionTokensDetails,
1337 pub total_tokens: u32,
1339}
1340
1341#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1343pub struct Response {
1344 pub created_at: u64,
1346
1347 #[serde(skip_serializing_if = "Option::is_none")]
1349 pub error: Option<ErrorObject>,
1350
1351 pub id: String,
1353
1354 #[serde(skip_serializing_if = "Option::is_none")]
1356 pub incomplete_details: Option<IncompleteDetails>,
1357
1358 #[serde(skip_serializing_if = "Option::is_none")]
1360 pub instructions: Option<String>,
1361
1362 #[serde(skip_serializing_if = "Option::is_none")]
1364 pub max_output_tokens: Option<u32>,
1365
1366 #[serde(skip_serializing_if = "Option::is_none")]
1368 pub metadata: Option<HashMap<String, String>>,
1369
1370 pub model: String,
1372
1373 pub object: String,
1375
1376 pub output: Vec<OutputContent>,
1378
1379 #[serde(skip_serializing_if = "Option::is_none")]
1383 pub output_text: Option<String>,
1384
1385 #[serde(skip_serializing_if = "Option::is_none")]
1387 pub parallel_tool_calls: Option<bool>,
1388
1389 #[serde(skip_serializing_if = "Option::is_none")]
1391 pub previous_response_id: Option<String>,
1392
1393 #[serde(skip_serializing_if = "Option::is_none")]
1395 pub reasoning: Option<ReasoningConfig>,
1396
1397 #[serde(skip_serializing_if = "Option::is_none")]
1399 pub store: Option<bool>,
1400
1401 #[serde(skip_serializing_if = "Option::is_none")]
1403 pub service_tier: Option<ServiceTier>,
1404
1405 pub status: Status,
1407
1408 #[serde(skip_serializing_if = "Option::is_none")]
1410 pub temperature: Option<f32>,
1411
1412 #[serde(skip_serializing_if = "Option::is_none")]
1414 pub text: Option<TextConfig>,
1415
1416 #[serde(skip_serializing_if = "Option::is_none")]
1418 pub tool_choice: Option<ToolChoice>,
1419
1420 #[serde(skip_serializing_if = "Option::is_none")]
1422 pub tools: Option<Vec<ToolDefinition>>,
1423
1424 #[serde(skip_serializing_if = "Option::is_none")]
1426 pub top_p: Option<f32>,
1427
1428 #[serde(skip_serializing_if = "Option::is_none")]
1430 pub truncation: Option<Truncation>,
1431
1432 #[serde(skip_serializing_if = "Option::is_none")]
1434 pub usage: Option<Usage>,
1435
1436 #[serde(skip_serializing_if = "Option::is_none")]
1438 pub user: Option<String>,
1439}
1440
1441#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1442#[serde(rename_all = "snake_case")]
1443pub enum Status {
1444 Completed,
1445 Failed,
1446 InProgress,
1447 Incomplete,
1448}
1449
1450#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1452#[serde(tag = "type")]
1453#[non_exhaustive] pub enum ResponseEvent {
1455 #[serde(rename = "response.created")]
1457 ResponseCreated(ResponseCreated),
1458 #[serde(rename = "response.in_progress")]
1460 ResponseInProgress(ResponseInProgress),
1461 #[serde(rename = "response.completed")]
1463 ResponseCompleted(ResponseCompleted),
1464 #[serde(rename = "response.failed")]
1466 ResponseFailed(ResponseFailed),
1467 #[serde(rename = "response.incomplete")]
1469 ResponseIncomplete(ResponseIncomplete),
1470 #[serde(rename = "response.queued")]
1472 ResponseQueued(ResponseQueued),
1473 #[serde(rename = "response.output_item.added")]
1475 ResponseOutputItemAdded(ResponseOutputItemAdded),
1476 #[serde(rename = "response.content_part.added")]
1478 ResponseContentPartAdded(ResponseContentPartAdded),
1479 #[serde(rename = "response.output_text.delta")]
1481 ResponseOutputTextDelta(ResponseOutputTextDelta),
1482 #[serde(rename = "response.output_text.done")]
1484 ResponseOutputTextDone(ResponseOutputTextDone),
1485 #[serde(rename = "response.refusal.delta")]
1487 ResponseRefusalDelta(ResponseRefusalDelta),
1488 #[serde(rename = "response.refusal.done")]
1490 ResponseRefusalDone(ResponseRefusalDone),
1491 #[serde(rename = "response.content_part.done")]
1493 ResponseContentPartDone(ResponseContentPartDone),
1494 #[serde(rename = "response.output_item.done")]
1496 ResponseOutputItemDone(ResponseOutputItemDone),
1497 #[serde(rename = "response.function_call_arguments.delta")]
1499 ResponseFunctionCallArgumentsDelta(ResponseFunctionCallArgumentsDelta),
1500 #[serde(rename = "response.function_call_arguments.done")]
1502 ResponseFunctionCallArgumentsDone(ResponseFunctionCallArgumentsDone),
1503 #[serde(rename = "response.file_search_call.in_progress")]
1505 ResponseFileSearchCallInProgress(ResponseFileSearchCallInProgress),
1506 #[serde(rename = "response.file_search_call.searching")]
1508 ResponseFileSearchCallSearching(ResponseFileSearchCallSearching),
1509 #[serde(rename = "response.file_search_call.completed")]
1511 ResponseFileSearchCallCompleted(ResponseFileSearchCallCompleted),
1512 #[serde(rename = "response.web_search_call.in_progress")]
1514 ResponseWebSearchCallInProgress(ResponseWebSearchCallInProgress),
1515 #[serde(rename = "response.web_search_call.searching")]
1517 ResponseWebSearchCallSearching(ResponseWebSearchCallSearching),
1518 #[serde(rename = "response.web_search_call.completed")]
1520 ResponseWebSearchCallCompleted(ResponseWebSearchCallCompleted),
1521 #[serde(rename = "response.reasoning_summary_part.added")]
1523 ResponseReasoningSummaryPartAdded(ResponseReasoningSummaryPartAdded),
1524 #[serde(rename = "response.reasoning_summary_part.done")]
1526 ResponseReasoningSummaryPartDone(ResponseReasoningSummaryPartDone),
1527 #[serde(rename = "response.reasoning_summary_text.delta")]
1529 ResponseReasoningSummaryTextDelta(ResponseReasoningSummaryTextDelta),
1530 #[serde(rename = "response.reasoning_summary_text.done")]
1532 ResponseReasoningSummaryTextDone(ResponseReasoningSummaryTextDone),
1533 #[serde(rename = "response.reasoning_summary.delta")]
1535 ResponseReasoningSummaryDelta(ResponseReasoningSummaryDelta),
1536 #[serde(rename = "response.reasoning_summary.done")]
1538 ResponseReasoningSummaryDone(ResponseReasoningSummaryDone),
1539 #[serde(rename = "response.image_generation_call.in_progress")]
1541 ResponseImageGenerationCallInProgress(ResponseImageGenerationCallInProgress),
1542 #[serde(rename = "response.image_generation_call.generating")]
1544 ResponseImageGenerationCallGenerating(ResponseImageGenerationCallGenerating),
1545 #[serde(rename = "response.image_generation_call.partial_image")]
1547 ResponseImageGenerationCallPartialImage(ResponseImageGenerationCallPartialImage),
1548 #[serde(rename = "response.image_generation_call.completed")]
1550 ResponseImageGenerationCallCompleted(ResponseImageGenerationCallCompleted),
1551 #[serde(rename = "response.mcp_call_arguments.delta")]
1553 ResponseMcpCallArgumentsDelta(ResponseMcpCallArgumentsDelta),
1554 #[serde(rename = "response.mcp_call_arguments.done")]
1556 ResponseMcpCallArgumentsDone(ResponseMcpCallArgumentsDone),
1557 #[serde(rename = "response.mcp_call.completed")]
1559 ResponseMcpCallCompleted(ResponseMcpCallCompleted),
1560 #[serde(rename = "response.mcp_call.failed")]
1562 ResponseMcpCallFailed(ResponseMcpCallFailed),
1563 #[serde(rename = "response.mcp_call.in_progress")]
1565 ResponseMcpCallInProgress(ResponseMcpCallInProgress),
1566 #[serde(rename = "response.mcp_list_tools.completed")]
1568 ResponseMcpListToolsCompleted(ResponseMcpListToolsCompleted),
1569 #[serde(rename = "response.mcp_list_tools.failed")]
1571 ResponseMcpListToolsFailed(ResponseMcpListToolsFailed),
1572 #[serde(rename = "response.mcp_list_tools.in_progress")]
1574 ResponseMcpListToolsInProgress(ResponseMcpListToolsInProgress),
1575 #[serde(rename = "response.code_interpreter_call.in_progress")]
1577 ResponseCodeInterpreterCallInProgress(ResponseCodeInterpreterCallInProgress),
1578 #[serde(rename = "response.code_interpreter_call.interpreting")]
1580 ResponseCodeInterpreterCallInterpreting(ResponseCodeInterpreterCallInterpreting),
1581 #[serde(rename = "response.code_interpreter_call.completed")]
1583 ResponseCodeInterpreterCallCompleted(ResponseCodeInterpreterCallCompleted),
1584 #[serde(rename = "response.code_interpreter_call_code.delta")]
1586 ResponseCodeInterpreterCallCodeDelta(ResponseCodeInterpreterCallCodeDelta),
1587 #[serde(rename = "response.code_interpreter_call_code.done")]
1589 ResponseCodeInterpreterCallCodeDone(ResponseCodeInterpreterCallCodeDone),
1590 #[serde(rename = "response.output_text.annotation.added")]
1592 ResponseOutputTextAnnotationAdded(ResponseOutputTextAnnotationAdded),
1593 #[serde(rename = "error")]
1595 ResponseError(ResponseError),
1596
1597 #[serde(untagged)]
1599 Unknown(serde_json::Value),
1600}
1601
1602pub type ResponseStream = Pin<Box<dyn Stream<Item = Result<ResponseEvent, OpenAIError>> + Send>>;
1604
1605#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1606#[non_exhaustive]
1607pub struct ResponseCreated {
1608 pub sequence_number: u64,
1609 pub response: ResponseMetadata,
1610}
1611
1612#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1613#[non_exhaustive]
1614pub struct ResponseInProgress {
1615 pub sequence_number: u64,
1616 pub response: ResponseMetadata,
1617}
1618
1619#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1620#[non_exhaustive]
1621pub struct ResponseOutputItemAdded {
1622 pub sequence_number: u64,
1623 pub output_index: u32,
1624 pub item: OutputItem,
1625}
1626
1627#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1628#[non_exhaustive]
1629pub struct ResponseContentPartAdded {
1630 pub sequence_number: u64,
1631 pub item_id: String,
1632 pub output_index: u32,
1633 pub content_index: u32,
1634 pub part: ContentPart,
1635}
1636
1637#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1638#[non_exhaustive]
1639pub struct ResponseOutputTextDelta {
1640 pub sequence_number: u64,
1641 pub item_id: String,
1642 pub output_index: u32,
1643 pub content_index: u32,
1644 pub delta: String,
1645 #[serde(default, skip_serializing_if = "Option::is_none")]
1646 pub logprobs: Option<serde_json::Value>,
1647}
1648
1649#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1650#[non_exhaustive]
1651pub struct ResponseContentPartDone {
1652 pub sequence_number: u64,
1653 pub item_id: String,
1654 pub output_index: u32,
1655 pub content_index: u32,
1656 pub part: ContentPart,
1657}
1658
1659#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1660#[non_exhaustive]
1661pub struct ResponseOutputItemDone {
1662 pub sequence_number: u64,
1663 pub output_index: u32,
1664 pub item: OutputItem,
1665}
1666
1667#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1669#[non_exhaustive]
1670pub struct ResponseCompleted {
1671 pub sequence_number: u64,
1672 pub response: ResponseMetadata,
1673}
1674
1675#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1677#[non_exhaustive]
1678pub struct ResponseFailed {
1679 pub sequence_number: u64,
1680 pub response: ResponseMetadata,
1681}
1682
1683#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1685#[non_exhaustive]
1686pub struct ResponseIncomplete {
1687 pub sequence_number: u64,
1688 pub response: ResponseMetadata,
1689}
1690
1691#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1693#[non_exhaustive]
1694pub struct ResponseQueued {
1695 pub sequence_number: u64,
1696 pub response: ResponseMetadata,
1697}
1698
1699#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1701#[non_exhaustive]
1702pub struct ResponseOutputTextDone {
1703 pub sequence_number: u64,
1704 pub item_id: String,
1705 pub output_index: u32,
1706 pub content_index: u32,
1707 pub text: String,
1708 pub logprobs: Option<Vec<serde_json::Value>>,
1709}
1710
1711#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1713#[non_exhaustive]
1714pub struct ResponseRefusalDelta {
1715 pub sequence_number: u64,
1716 pub item_id: String,
1717 pub output_index: u32,
1718 pub content_index: u32,
1719 pub delta: String,
1720}
1721
1722#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1724#[non_exhaustive]
1725pub struct ResponseRefusalDone {
1726 pub sequence_number: u64,
1727 pub item_id: String,
1728 pub output_index: u32,
1729 pub content_index: u32,
1730 pub refusal: String,
1731}
1732
1733#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1735#[non_exhaustive]
1736pub struct ResponseFunctionCallArgumentsDelta {
1737 pub sequence_number: u64,
1738 pub item_id: String,
1739 pub output_index: u32,
1740 pub delta: String,
1741}
1742
1743#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1745#[non_exhaustive]
1746pub struct ResponseFunctionCallArgumentsDone {
1747 pub sequence_number: u64,
1748 pub item_id: String,
1749 pub output_index: u32,
1750 pub arguments: String,
1751}
1752
1753#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1755#[non_exhaustive]
1756pub struct ResponseError {
1757 pub sequence_number: u64,
1758 pub code: Option<String>,
1759 pub message: String,
1760 pub param: Option<String>,
1761}
1762
1763#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1765#[non_exhaustive]
1766pub struct ResponseFileSearchCallInProgress {
1767 pub sequence_number: u64,
1768 pub output_index: u32,
1769 pub item_id: String,
1770}
1771
1772#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1774#[non_exhaustive]
1775pub struct ResponseFileSearchCallSearching {
1776 pub sequence_number: u64,
1777 pub output_index: u32,
1778 pub item_id: String,
1779}
1780
1781#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1783#[non_exhaustive]
1784pub struct ResponseFileSearchCallCompleted {
1785 pub sequence_number: u64,
1786 pub output_index: u32,
1787 pub item_id: String,
1788}
1789
1790#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1792#[non_exhaustive]
1793pub struct ResponseWebSearchCallInProgress {
1794 pub sequence_number: u64,
1795 pub output_index: u32,
1796 pub item_id: String,
1797}
1798
1799#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1801#[non_exhaustive]
1802pub struct ResponseWebSearchCallSearching {
1803 pub sequence_number: u64,
1804 pub output_index: u32,
1805 pub item_id: String,
1806}
1807
1808#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1810#[non_exhaustive]
1811pub struct ResponseWebSearchCallCompleted {
1812 pub sequence_number: u64,
1813 pub output_index: u32,
1814 pub item_id: String,
1815}
1816
1817#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1819#[non_exhaustive]
1820pub struct ResponseReasoningSummaryPartAdded {
1821 pub sequence_number: u64,
1822 pub item_id: String,
1823 pub output_index: u32,
1824 pub summary_index: u32,
1825 pub part: serde_json::Value, }
1827
1828#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1830#[non_exhaustive]
1831pub struct ResponseReasoningSummaryPartDone {
1832 pub sequence_number: u64,
1833 pub item_id: String,
1834 pub output_index: u32,
1835 pub summary_index: u32,
1836 pub part: serde_json::Value,
1837}
1838
1839#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1841#[non_exhaustive]
1842pub struct ResponseReasoningSummaryTextDelta {
1843 pub sequence_number: u64,
1844 pub item_id: String,
1845 pub output_index: u32,
1846 pub summary_index: u32,
1847 pub delta: String,
1848}
1849
1850#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1852#[non_exhaustive]
1853pub struct ResponseReasoningSummaryTextDone {
1854 pub sequence_number: u64,
1855 pub item_id: String,
1856 pub output_index: u32,
1857 pub summary_index: u32,
1858 pub text: String,
1859}
1860
1861#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1863#[non_exhaustive]
1864pub struct ResponseReasoningSummaryDelta {
1865 pub sequence_number: u64,
1866 pub item_id: String,
1867 pub output_index: u32,
1868 pub summary_index: u32,
1869 pub delta: serde_json::Value,
1870}
1871
1872#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1874#[non_exhaustive]
1875pub struct ResponseReasoningSummaryDone {
1876 pub sequence_number: u64,
1877 pub item_id: String,
1878 pub output_index: u32,
1879 pub summary_index: u32,
1880 pub text: String,
1881}
1882
1883#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1885#[non_exhaustive]
1886pub struct ResponseImageGenerationCallInProgress {
1887 pub sequence_number: u64,
1888 pub output_index: u32,
1889 pub item_id: String,
1890}
1891
1892#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1894#[non_exhaustive]
1895pub struct ResponseImageGenerationCallGenerating {
1896 pub sequence_number: u64,
1897 pub output_index: u32,
1898 pub item_id: String,
1899}
1900
1901#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1903#[non_exhaustive]
1904pub struct ResponseImageGenerationCallPartialImage {
1905 pub sequence_number: u64,
1906 pub output_index: u32,
1907 pub item_id: String,
1908 pub partial_image_index: u32,
1909 pub partial_image_b64: String,
1910}
1911
1912#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1914#[non_exhaustive]
1915pub struct ResponseImageGenerationCallCompleted {
1916 pub sequence_number: u64,
1917 pub output_index: u32,
1918 pub item_id: String,
1919}
1920
1921#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1923#[non_exhaustive]
1924pub struct ResponseMcpCallArgumentsDelta {
1925 pub sequence_number: u64,
1926 pub output_index: u32,
1927 pub item_id: String,
1928 pub delta: String,
1929}
1930
1931#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1933#[non_exhaustive]
1934pub struct ResponseMcpCallArgumentsDone {
1935 pub sequence_number: u64,
1936 pub output_index: u32,
1937 pub item_id: String,
1938 pub arguments: String,
1939}
1940
1941#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1943#[non_exhaustive]
1944pub struct ResponseMcpCallCompleted {
1945 pub sequence_number: u64,
1946 pub output_index: u32,
1947 pub item_id: String,
1948}
1949
1950#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1952#[non_exhaustive]
1953pub struct ResponseMcpCallFailed {
1954 pub sequence_number: u64,
1955 pub output_index: u32,
1956 pub item_id: String,
1957}
1958
1959#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1961#[non_exhaustive]
1962pub struct ResponseMcpCallInProgress {
1963 pub sequence_number: u64,
1964 pub output_index: u32,
1965 pub item_id: String,
1966}
1967
1968#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1970#[non_exhaustive]
1971pub struct ResponseMcpListToolsCompleted {
1972 pub sequence_number: u64,
1973 pub output_index: u32,
1974 pub item_id: String,
1975}
1976
1977#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1979#[non_exhaustive]
1980pub struct ResponseMcpListToolsFailed {
1981 pub sequence_number: u64,
1982 pub output_index: u32,
1983 pub item_id: String,
1984}
1985
1986#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1988#[non_exhaustive]
1989pub struct ResponseMcpListToolsInProgress {
1990 pub sequence_number: u64,
1991 pub output_index: u32,
1992 pub item_id: String,
1993}
1994
1995#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1997#[non_exhaustive]
1998pub struct ResponseCodeInterpreterCallInProgress {
1999 pub sequence_number: u64,
2000 pub output_index: u32,
2001 pub item_id: String,
2002}
2003
2004#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2006#[non_exhaustive]
2007pub struct ResponseCodeInterpreterCallInterpreting {
2008 pub sequence_number: u64,
2009 pub output_index: u32,
2010 pub item_id: String,
2011}
2012
2013#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2015#[non_exhaustive]
2016pub struct ResponseCodeInterpreterCallCompleted {
2017 pub sequence_number: u64,
2018 pub output_index: u32,
2019 pub item_id: String,
2020}
2021
2022#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2024#[non_exhaustive]
2025pub struct ResponseCodeInterpreterCallCodeDelta {
2026 pub sequence_number: u64,
2027 pub output_index: u32,
2028 pub item_id: String,
2029 pub delta: String,
2030}
2031
2032#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2034#[non_exhaustive]
2035pub struct ResponseCodeInterpreterCallCodeDone {
2036 pub sequence_number: u64,
2037 pub output_index: u32,
2038 pub item_id: String,
2039 pub code: String,
2040}
2041
2042#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2044#[non_exhaustive]
2045pub struct ResponseMetadata {
2046 pub id: String,
2047 #[serde(skip_serializing_if = "Option::is_none")]
2048 pub object: Option<String>,
2049 pub created_at: u64,
2050 pub status: Status,
2051 #[serde(skip_serializing_if = "Option::is_none")]
2052 pub model: Option<String>,
2053 #[serde(skip_serializing_if = "Option::is_none")]
2054 pub usage: Option<Usage>,
2055 #[serde(skip_serializing_if = "Option::is_none")]
2056 pub error: Option<ErrorObject>,
2057 #[serde(skip_serializing_if = "Option::is_none")]
2058 pub incomplete_details: Option<IncompleteDetails>,
2059 #[serde(skip_serializing_if = "Option::is_none")]
2060 pub input: Option<Input>,
2061 #[serde(skip_serializing_if = "Option::is_none")]
2062 pub instructions: Option<String>,
2063 #[serde(skip_serializing_if = "Option::is_none")]
2064 pub max_output_tokens: Option<u32>,
2065 #[serde(skip_serializing_if = "Option::is_none")]
2067 pub background: Option<bool>,
2068 #[serde(skip_serializing_if = "Option::is_none")]
2070 pub service_tier: Option<ServiceTier>,
2071 #[serde(skip_serializing_if = "Option::is_none")]
2073 pub top_logprobs: Option<u32>,
2074 #[serde(skip_serializing_if = "Option::is_none")]
2076 pub max_tool_calls: Option<u32>,
2077 #[serde(skip_serializing_if = "Option::is_none")]
2078 pub output: Option<Vec<OutputItem>>,
2079 #[serde(skip_serializing_if = "Option::is_none")]
2080 pub parallel_tool_calls: Option<bool>,
2081 #[serde(skip_serializing_if = "Option::is_none")]
2082 pub previous_response_id: Option<String>,
2083 #[serde(skip_serializing_if = "Option::is_none")]
2084 pub reasoning: Option<ReasoningConfig>,
2085 #[serde(skip_serializing_if = "Option::is_none")]
2086 pub store: Option<bool>,
2087 #[serde(skip_serializing_if = "Option::is_none")]
2088 pub temperature: Option<f32>,
2089 #[serde(skip_serializing_if = "Option::is_none")]
2090 pub text: Option<TextConfig>,
2091 #[serde(skip_serializing_if = "Option::is_none")]
2092 pub tool_choice: Option<ToolChoice>,
2093 #[serde(skip_serializing_if = "Option::is_none")]
2094 pub tools: Option<Vec<ToolDefinition>>,
2095 #[serde(skip_serializing_if = "Option::is_none")]
2096 pub top_p: Option<f32>,
2097 #[serde(skip_serializing_if = "Option::is_none")]
2098 pub truncation: Option<Truncation>,
2099 #[serde(skip_serializing_if = "Option::is_none")]
2100 pub user: Option<String>,
2101 #[serde(skip_serializing_if = "Option::is_none")]
2102 pub metadata: Option<HashMap<String, String>>,
2103 #[serde(skip_serializing_if = "Option::is_none")]
2105 pub prompt_cache_key: Option<String>,
2106 #[serde(skip_serializing_if = "Option::is_none")]
2108 pub safety_identifier: Option<String>,
2109}
2110
2111#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2113#[non_exhaustive]
2114pub struct OutputItem {
2115 pub id: String,
2116 #[serde(rename = "type")]
2117 pub item_type: String,
2118 #[serde(skip_serializing_if = "Option::is_none")]
2119 pub status: Option<String>,
2120 #[serde(skip_serializing_if = "Option::is_none")]
2121 pub content: Option<Vec<ContentPart>>,
2122 #[serde(skip_serializing_if = "Option::is_none")]
2123 pub role: Option<String>,
2124 #[serde(skip_serializing_if = "Option::is_none")]
2126 pub summary: Option<Vec<serde_json::Value>>,
2127}
2128
2129#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2131#[non_exhaustive]
2132pub struct ContentPart {
2133 #[serde(rename = "type")]
2134 pub part_type: String,
2135 pub text: Option<String>,
2136 #[serde(default, skip_serializing_if = "Option::is_none")]
2137 pub annotations: Option<Vec<serde_json::Value>>,
2138 #[serde(default, skip_serializing_if = "Option::is_none")]
2139 pub logprobs: Option<Vec<serde_json::Value>>,
2140}
2141
2142#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2147#[non_exhaustive]
2148pub struct ResponseOutputTextAnnotationAdded {
2149 pub sequence_number: u64,
2150 pub item_id: String,
2151 pub output_index: u32,
2152 pub content_index: u32,
2153 pub annotation_index: u32,
2154 pub annotation: TextAnnotation,
2155}
2156
2157#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2159#[non_exhaustive]
2160pub struct TextAnnotation {
2161 #[serde(rename = "type")]
2162 pub annotation_type: String,
2163 pub text: String,
2164 pub start: u32,
2165 pub end: u32,
2166}