1use crate::error::OpenAIError;
2pub use crate::types::{
3 CompletionTokensDetails, ImageDetail, PromptTokensDetails, ReasoningEffort,
4 ResponseFormatJsonSchema,
5};
6use derive_builder::Builder;
7use futures::Stream;
8use serde::{Deserialize, Serialize};
9use serde_json::Value;
10use std::collections::HashMap;
11use std::pin::Pin;
12
13#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
15#[serde(rename_all = "lowercase")]
16pub enum Role {
17 User,
18 Assistant,
19 System,
20 Developer,
21}
22
23#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
25#[serde(rename_all = "snake_case")]
26pub enum OutputStatus {
27 InProgress,
28 Completed,
29 Incomplete,
30}
31
32#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
34#[serde(untagged)]
35pub enum Input {
36 Text(String),
38 Items(Vec<InputItem>),
40}
41
42#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
44#[serde(untagged, rename_all = "snake_case")]
45pub enum InputItem {
46 Message(InputMessage),
47 Custom(serde_json::Value),
48}
49
50#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
52#[builder(
53 name = "InputMessageArgs",
54 pattern = "mutable",
55 setter(into, strip_option),
56 default
57)]
58#[builder(build_fn(error = "OpenAIError"))]
59pub struct InputMessage {
60 #[serde(default, rename = "type")]
61 pub kind: InputMessageType,
62 pub role: Role,
64 pub content: InputContent,
67}
68
69#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
70#[serde(rename_all = "snake_case")]
71pub enum InputMessageType {
72 #[default]
73 Message,
74}
75
76#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
77#[serde(untagged)]
78pub enum InputContent {
79 TextInput(String),
81 InputItemContentList(Vec<ContentType>),
83}
84
85#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
87#[serde(tag = "type", rename_all = "snake_case")]
88pub enum ContentType {
89 InputText(InputText),
91 InputImage(InputImage),
93 InputFile(InputFile),
95}
96
97#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
98pub struct InputText {
99 text: String,
100}
101
102#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
103#[builder(
104 name = "InputImageArgs",
105 pattern = "mutable",
106 setter(into, strip_option),
107 default
108)]
109#[builder(build_fn(error = "OpenAIError"))]
110pub struct InputImage {
111 detail: ImageDetail,
113 #[serde(skip_serializing_if = "Option::is_none")]
115 file_id: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
119 image_url: Option<String>,
120}
121
122#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
123#[builder(
124 name = "InputFileArgs",
125 pattern = "mutable",
126 setter(into, strip_option),
127 default
128)]
129#[builder(build_fn(error = "OpenAIError"))]
130pub struct InputFile {
131 #[serde(skip_serializing_if = "Option::is_none")]
133 file_data: Option<String>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 file_id: Option<String>,
137 #[serde(skip_serializing_if = "Option::is_none")]
139 filename: Option<String>,
140}
141
142#[derive(Clone, Serialize, Deserialize, Debug, Default, Builder, PartialEq)]
144#[builder(
145 name = "CreateResponseArgs",
146 pattern = "mutable",
147 setter(into, strip_option),
148 default
149)]
150#[builder(build_fn(error = "OpenAIError"))]
151pub struct CreateResponse {
152 pub input: Input,
154
155 pub model: String,
159
160 #[serde(skip_serializing_if = "Option::is_none")]
163 pub background: Option<bool>,
164
165 #[serde(skip_serializing_if = "Option::is_none")]
183 pub include: Option<Vec<String>>,
184
185 #[serde(skip_serializing_if = "Option::is_none")]
191 pub instructions: Option<String>,
192
193 #[serde(skip_serializing_if = "Option::is_none")]
196 pub max_output_tokens: Option<u32>,
197
198 pub max_tool_calls: Option<u32>,
202
203 #[serde(skip_serializing_if = "Option::is_none")]
210 pub metadata: Option<HashMap<String, String>>,
211
212 #[serde(skip_serializing_if = "Option::is_none")]
214 pub parallel_tool_calls: Option<bool>,
215
216 #[serde(skip_serializing_if = "Option::is_none")]
219 pub previous_response_id: Option<String>,
220
221 #[serde(skip_serializing_if = "Option::is_none")]
223 pub prompt: Option<PromptConfig>,
224
225 #[serde(skip_serializing_if = "Option::is_none")]
227 pub reasoning: Option<ReasoningConfig>,
228
229 #[serde(skip_serializing_if = "Option::is_none")]
249 pub service_tier: Option<ServiceTier>,
250
251 #[serde(skip_serializing_if = "Option::is_none")]
253 pub store: Option<bool>,
254
255 #[serde(skip_serializing_if = "Option::is_none")]
258 pub stream: Option<bool>,
259
260 #[serde(skip_serializing_if = "Option::is_none")]
265 pub temperature: Option<f32>,
266
267 #[serde(skip_serializing_if = "Option::is_none")]
270 pub text: Option<TextConfig>,
271
272 #[serde(skip_serializing_if = "Option::is_none")]
275 pub tool_choice: Option<ToolChoice>,
276
277 #[serde(skip_serializing_if = "Option::is_none")]
281 pub tools: Option<Vec<ToolDefinition>>,
282
283 #[serde(skip_serializing_if = "Option::is_none")]
286 pub top_logprobs: Option<u32>, #[serde(skip_serializing_if = "Option::is_none")]
294 pub top_p: Option<f32>,
295
296 #[serde(skip_serializing_if = "Option::is_none")]
300 pub truncation: Option<Truncation>,
301
302 #[serde(skip_serializing_if = "Option::is_none")]
305 pub user: Option<String>,
306}
307
308#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
310pub struct PromptConfig {
311 pub id: String,
313
314 #[serde(skip_serializing_if = "Option::is_none")]
316 pub version: Option<String>,
317
318 #[serde(skip_serializing_if = "Option::is_none")]
322 pub variables: Option<HashMap<String, String>>,
323}
324
325#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
327#[serde(rename_all = "lowercase")]
328pub enum ServiceTier {
329 Auto,
330 Default,
331 Flex,
332}
333
334#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
336#[serde(rename_all = "lowercase")]
337pub enum Truncation {
338 Auto,
339 Disabled,
340}
341
342#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
344#[builder(
345 name = "ReasoningConfigArgs",
346 pattern = "mutable",
347 setter(into, strip_option),
348 default
349)]
350#[builder(build_fn(error = "OpenAIError"))]
351pub struct ReasoningConfig {
352 #[serde(skip_serializing_if = "Option::is_none")]
354 pub effort: Option<ReasoningEffort>,
355 #[serde(skip_serializing_if = "Option::is_none")]
357 pub summary: Option<ReasoningSummary>,
358}
359
360#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
361#[serde(rename_all = "lowercase")]
362pub enum ReasoningSummary {
363 Auto,
364 Concise,
365 Detailed,
366}
367
368#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
370pub struct TextConfig {
371 pub format: TextResponseFormat,
373}
374
375#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
376#[serde(tag = "type", rename_all = "snake_case")]
377pub enum TextResponseFormat {
378 Text,
380 JsonObject,
382 JsonSchema(ResponseFormatJsonSchema),
384}
385
386#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
388#[serde(tag = "type", rename_all = "snake_case")]
389pub enum ToolDefinition {
390 FileSearch(FileSearch),
392 Function(Function),
394 WebSearchPreview(WebSearchPreview),
396 ComputerUsePreview(ComputerUsePreview),
398 Mcp(Mcp),
400 CodeInterpreter(CodeInterpreter),
402 ImageGeneration(ImageGeneration),
404 LocalShell,
406}
407
408#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
409#[builder(
410 name = "FileSearchArgs",
411 pattern = "mutable",
412 setter(into, strip_option),
413 default
414)]
415#[builder(build_fn(error = "OpenAIError"))]
416pub struct FileSearch {
417 pub vector_store_ids: Vec<String>,
419 #[serde(skip_serializing_if = "Option::is_none")]
421 pub max_num_results: Option<u32>,
422 #[serde(skip_serializing_if = "Option::is_none")]
424 pub filters: Option<Filter>,
425 #[serde(skip_serializing_if = "Option::is_none")]
427 pub ranking_options: Option<RankingOptions>,
428}
429
430#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
431#[builder(
432 name = "FunctionArgs",
433 pattern = "mutable",
434 setter(into, strip_option),
435 default
436)]
437pub struct Function {
438 pub name: String,
440 pub parameters: serde_json::Value,
442 pub strict: bool,
444 #[serde(skip_serializing_if = "Option::is_none")]
447 pub description: Option<String>,
448}
449
450#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
451#[builder(
452 name = "WebSearchPreviewArgs",
453 pattern = "mutable",
454 setter(into, strip_option),
455 default
456)]
457pub struct WebSearchPreview {
458 #[serde(skip_serializing_if = "Option::is_none")]
460 pub user_location: Option<Location>,
461 #[serde(skip_serializing_if = "Option::is_none")]
463 pub search_context_size: Option<WebSearchContextSize>,
464}
465
466#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
467#[serde(rename_all = "lowercase")]
468pub enum WebSearchContextSize {
469 Low,
470 Medium,
471 High,
472}
473
474#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
475#[builder(
476 name = "ComputerUsePreviewArgs",
477 pattern = "mutable",
478 setter(into, strip_option),
479 default
480)]
481pub struct ComputerUsePreview {
482 environment: String,
484 display_width: u32,
486 display_height: u32,
488}
489
490#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
492pub struct RankingOptions {
493 pub ranker: String,
495 #[serde(skip_serializing_if = "Option::is_none")]
498 pub score_threshold: Option<f32>,
499}
500
501#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
503#[serde(untagged)]
504pub enum Filter {
505 Comparison(ComparisonFilter),
508 Compound(CompoundFilter),
510}
511
512#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
514pub struct ComparisonFilter {
515 #[serde(rename = "type")]
517 pub op: ComparisonType,
518 pub key: String,
520 pub value: serde_json::Value,
522}
523
524#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
525pub enum ComparisonType {
526 #[serde(rename = "eq")]
527 Equals,
528 #[serde(rename = "ne")]
529 NotEquals,
530 #[serde(rename = "gt")]
531 GreaterThan,
532 #[serde(rename = "gte")]
533 GreaterThanOrEqualTo,
534 #[serde(rename = "lt")]
535 LessThan,
536 #[serde(rename = "lte")]
537 LessThanOrEqualTo,
538}
539
540#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
542pub struct CompoundFilter {
543 #[serde(rename = "type")]
545 pub op: ComparisonType,
546 pub filters: Vec<Filter>,
548}
549
550#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
551#[serde(rename_all = "lowercase")]
552pub enum CompoundType {
553 And,
554 Or,
555}
556
557#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
559#[builder(
560 name = "LocationArgs",
561 pattern = "mutable",
562 setter(into, strip_option),
563 default
564)]
565#[builder(build_fn(error = "OpenAIError"))]
566pub struct Location {
567 #[serde(rename = "type")]
569 pub kind: String,
570 #[serde(skip_serializing_if = "Option::is_none")]
572 pub city: Option<String>,
573 #[serde(skip_serializing_if = "Option::is_none")]
575 pub country: Option<String>,
576 #[serde(skip_serializing_if = "Option::is_none")]
578 pub region: Option<String>,
579 #[serde(skip_serializing_if = "Option::is_none")]
581 pub timezone: Option<String>,
582}
583
584#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
586#[builder(
587 name = "McpArgs",
588 pattern = "mutable",
589 setter(into, strip_option),
590 default
591)]
592#[builder(build_fn(error = "OpenAIError"))]
593pub struct Mcp {
594 pub server_label: String,
596 pub server_url: String,
598 #[serde(skip_serializing_if = "Option::is_none")]
600 pub allowed_tools: Option<AllowedTools>,
601 #[serde(skip_serializing_if = "Option::is_none")]
603 pub headers: Option<Value>,
604 #[serde(skip_serializing_if = "Option::is_none")]
606 pub require_approval: Option<RequireApproval>,
607}
608
609#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
611#[serde(untagged)]
612pub enum AllowedTools {
613 List(Vec<String>),
615 Filter(McpAllowedToolsFilter),
617}
618
619#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
621pub struct McpAllowedToolsFilter {
622 #[serde(skip_serializing_if = "Option::is_none")]
624 pub tool_names: Option<Vec<String>>,
625}
626
627#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
629#[serde(untagged)]
630pub enum RequireApproval {
631 Policy(RequireApprovalPolicy),
633 Filter(McpApprovalFilter),
635}
636
637#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
638#[serde(rename_all = "lowercase")]
639pub enum RequireApprovalPolicy {
640 Always,
641 Never,
642}
643
644#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
646pub struct McpApprovalFilter {
647 #[serde(skip_serializing_if = "Option::is_none")]
649 pub always: Option<McpAllowedToolsFilter>,
650 #[serde(skip_serializing_if = "Option::is_none")]
652 pub never: Option<McpAllowedToolsFilter>,
653}
654
655#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
657#[serde(untagged)]
658pub enum CodeInterpreterContainer {
659 Id(String),
661 Container(CodeInterpreterContainerKind),
663}
664
665#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
667#[serde(tag = "type", rename_all = "snake_case")]
668pub enum CodeInterpreterContainerKind {
669 Auto {
670 #[serde(skip_serializing_if = "Option::is_none")]
672 file_ids: Option<Vec<String>>,
673 },
674}
675
676#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
678#[builder(
679 name = "CodeInterpreterArgs",
680 pattern = "mutable",
681 setter(into, strip_option),
682 default
683)]
684#[builder(build_fn(error = "OpenAIError"))]
685pub struct CodeInterpreter {
686 pub container: CodeInterpreterContainer,
688}
689
690#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
692pub struct InputImageMask {
693 #[serde(skip_serializing_if = "Option::is_none")]
695 pub image_url: Option<String>,
696 #[serde(skip_serializing_if = "Option::is_none")]
698 pub file_id: Option<String>,
699}
700
701#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
703#[builder(
704 name = "ImageGenerationArgs",
705 pattern = "mutable",
706 setter(into, strip_option),
707 default
708)]
709#[builder(build_fn(error = "OpenAIError"))]
710pub struct ImageGeneration {
711 #[serde(skip_serializing_if = "Option::is_none")]
713 pub background: Option<ImageGenerationBackground>,
714 #[serde(skip_serializing_if = "Option::is_none")]
716 pub input_image_mask: Option<InputImageMask>,
717 #[serde(skip_serializing_if = "Option::is_none")]
719 pub model: Option<String>,
720 #[serde(skip_serializing_if = "Option::is_none")]
722 pub moderation: Option<String>,
723 #[serde(skip_serializing_if = "Option::is_none")]
725 pub output_compression: Option<u8>,
726 #[serde(skip_serializing_if = "Option::is_none")]
728 pub output_format: Option<ImageGenerationOutputFormat>,
729 #[serde(skip_serializing_if = "Option::is_none")]
731 pub partial_images: Option<u8>,
732 #[serde(skip_serializing_if = "Option::is_none")]
734 pub quality: Option<ImageGenerationQuality>,
735 #[serde(skip_serializing_if = "Option::is_none")]
737 pub size: Option<ImageGenerationSize>,
738}
739
740#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
741#[serde(rename_all = "lowercase")]
742pub enum ImageGenerationBackground {
743 Transparent,
744 Opaque,
745 Auto,
746}
747
748#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
749#[serde(rename_all = "lowercase")]
750pub enum ImageGenerationOutputFormat {
751 Png,
752 Webp,
753 Jpeg,
754}
755
756#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
757#[serde(rename_all = "lowercase")]
758pub enum ImageGenerationQuality {
759 Low,
760 Medium,
761 High,
762 Auto,
763}
764
765#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
766#[serde(rename_all = "lowercase")]
767pub enum ImageGenerationSize {
768 Auto,
769 #[serde(rename = "1024x1024")]
770 Size1024x1024,
771 #[serde(rename = "1024x1536")]
772 Size1024x1536,
773 #[serde(rename = "1536x1024")]
774 Size1536x1024,
775}
776
777#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
779#[serde(untagged)]
780pub enum ToolChoice {
781 Mode(ToolChoiceMode),
783 Hosted {
785 #[serde(rename = "type")]
787 kind: HostedToolType,
788 },
789 Function {
791 name: String,
793 },
794}
795
796#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
798#[serde(rename_all = "lowercase")]
799pub enum ToolChoiceMode {
800 None,
802 Auto,
804 Required,
806}
807
808#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
810#[serde(rename_all = "snake_case")]
811pub enum HostedToolType {
812 FileSearch,
813 WebSearchPreview,
814 ComputerUsePreview,
815}
816
817#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
819pub struct ErrorObject {
820 pub code: String,
822 pub message: String,
824}
825
826#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
828pub struct IncompleteDetails {
829 pub reason: String,
831}
832
833#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
835pub struct OutputText {
836 pub annotations: Vec<Annotation>,
838 pub text: String,
840}
841
842#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
843#[serde(tag = "type", rename_all = "snake_case")]
844pub enum Annotation {
845 FileCitation(FileCitation),
847 UrlCitation(UrlCitation),
849 FilePath(FilePath),
851}
852
853#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
854pub struct FileCitation {
855 file_id: String,
857 index: u32,
859}
860
861#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
862pub struct UrlCitation {
863 end_index: u32,
865 start_index: u32,
867 title: String,
869 url: String,
871}
872
873#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
874pub struct FilePath {
875 file_id: String,
877 index: u32,
879}
880
881#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
883pub struct Refusal {
884 pub refusal: String,
886}
887
888#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
890pub struct OutputMessage {
891 pub content: Vec<Content>,
893 pub id: String,
895 pub role: Role,
897 pub status: OutputStatus,
899}
900
901#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
902#[serde(tag = "type", rename_all = "snake_case")]
903pub enum Content {
904 OutputText(OutputText),
906 Refusal(Refusal),
908}
909
910#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
912#[serde(tag = "type", rename_all = "snake_case")]
913pub enum OutputContent {
914 Message(OutputMessage),
916 FileSearchCall(FileSearchCallOutput),
918 FunctionCall(FunctionCall),
920 WebSearchCall(WebSearchCallOutput),
922 ComputerCall(ComputerCallOutput),
924 Reasoning(ReasoningItem),
928 ImageGenerationCall(ImageGenerationCallOutput),
930 CodeInterpreterCall(CodeInterpreterCallOutput),
932 LocalShellCall(LocalShellCallOutput),
934 McpCall(McpCallOutput),
936 McpListTools(McpListToolsOutput),
938 McpApprovalRequest(McpApprovalRequestOutput),
940}
941
942#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
944pub struct ReasoningItem {
945 pub id: String,
947 pub summary: Vec<SummaryText>,
949 #[serde(skip_serializing_if = "Option::is_none")]
952 pub encrypted_content: Option<String>,
953 #[serde(skip_serializing_if = "Option::is_none")]
955 pub status: Option<OutputStatus>,
956}
957
958#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
960pub struct SummaryText {
961 pub text: String,
963}
964
965#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
967pub struct FileSearchCallOutput {
968 pub id: String,
970 pub queries: Vec<String>,
972 pub status: FileSearchCallOutputStatus,
974 #[serde(skip_serializing_if = "Option::is_none")]
976 pub results: Option<Vec<FileSearchResult>>,
977}
978
979#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
980#[serde(rename_all = "snake_case")]
981pub enum FileSearchCallOutputStatus {
982 InProgress,
983 Searching,
984 Incomplete,
985 Failed,
986 Completed,
987}
988
989#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
991pub struct FileSearchResult {
992 pub file_id: String,
994 pub filename: String,
996 pub score: f32,
998 pub text: String,
1000 pub attributes: HashMap<String, serde_json::Value>,
1005}
1006
1007#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1008pub struct SafetyCheck {
1009 pub id: String,
1011 pub code: String,
1013 pub message: String,
1015}
1016
1017#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1019pub struct WebSearchCallOutput {
1020 pub id: String,
1022 pub status: String,
1024}
1025
1026#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1028pub struct ComputerCallOutput {
1029 pub action: ComputerCallAction,
1030 pub call_id: String,
1032 pub id: String,
1034 pub pending_safety_checks: Vec<SafetyCheck>,
1036 pub status: OutputStatus,
1038}
1039
1040#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1042pub struct Point {
1043 pub x: i32,
1044 pub y: i32,
1045}
1046
1047#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1049#[serde(tag = "type", rename_all = "snake_case")]
1050pub enum ComputerCallAction {
1051 Click(Click),
1053
1054 DoubleClick(DoubleClick),
1056
1057 Drag(Drag),
1059
1060 KeyPress(KeyPress),
1062
1063 Move(MoveAction),
1065
1066 Screenshot,
1068
1069 Scroll(Scroll),
1071
1072 Type(TypeAction),
1074
1075 Wait,
1077}
1078
1079#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1080#[serde(rename_all = "snake_case")]
1081pub enum ButtonPress {
1082 Left,
1083 Right,
1084 Wheel,
1085 Back,
1086 Forward,
1087}
1088
1089#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1091pub struct Click {
1092 pub button: ButtonPress,
1094 pub x: i32,
1096 pub y: i32,
1098}
1099
1100#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1102pub struct DoubleClick {
1103 pub x: i32,
1105 pub y: i32,
1107}
1108
1109#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1111pub struct Drag {
1112 pub path: Vec<Point>,
1114 pub x: i32,
1116 pub y: i32,
1118}
1119
1120#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1122pub struct KeyPress {
1123 pub keys: Vec<String>,
1125}
1126
1127#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1129pub struct MoveAction {
1130 pub x: i32,
1132 pub y: i32,
1134}
1135
1136#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1138pub struct Scroll {
1139 pub scroll_x: i32,
1141 pub scroll_y: i32,
1143 pub x: i32,
1145 pub y: i32,
1147}
1148
1149#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1151pub struct TypeAction {
1152 pub text: String,
1154}
1155
1156#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1158pub struct FunctionCall {
1159 pub id: String,
1161 pub call_id: String,
1163 pub name: String,
1165 pub arguments: String,
1167 pub status: OutputStatus,
1169}
1170
1171#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1173pub struct ImageGenerationCallOutput {
1174 pub id: String,
1176 pub result: Option<String>,
1178 pub status: String,
1180}
1181
1182#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1184pub struct CodeInterpreterCallOutput {
1185 pub code: String,
1187 pub id: String,
1189 pub status: String,
1191 pub container_id: String,
1193 pub results: Vec<CodeInterpreterResult>,
1195}
1196
1197#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1199#[serde(tag = "type", rename_all = "snake_case")]
1200pub enum CodeInterpreterResult {
1201 Logs(CodeInterpreterTextOutput),
1203 Files(CodeInterpreterFileOutput),
1205}
1206
1207#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1209pub struct CodeInterpreterTextOutput {
1210 pub logs: String,
1212}
1213
1214#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1216pub struct CodeInterpreterFileOutput {
1217 pub files: Vec<CodeInterpreterFile>,
1219}
1220
1221#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1222pub struct CodeInterpreterFile {
1223 file_id: String,
1225 mime_type: String,
1227}
1228
1229#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1231pub struct LocalShellCallOutput {
1232 pub action: LocalShellAction,
1234 pub call_id: String,
1236 pub id: String,
1238 pub status: String,
1240}
1241
1242#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1244pub struct LocalShellAction {
1245 pub command: Vec<String>,
1247 pub env: HashMap<String, String>,
1249 pub timeout_ms: Option<u64>,
1251 pub user: Option<String>,
1253 pub working_directory: Option<String>,
1255}
1256
1257#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1259pub struct McpCallOutput {
1260 pub arguments: String,
1262 pub id: String,
1264 pub name: String,
1266 pub server_label: String,
1268 pub error: Option<String>,
1270 pub output: Option<String>,
1272}
1273
1274#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1276pub struct McpListToolsOutput {
1277 pub id: String,
1279 pub server_label: String,
1281 pub tools: Vec<McpToolInfo>,
1283 #[serde(skip_serializing_if = "Option::is_none")]
1285 pub error: Option<String>,
1286}
1287
1288#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1290pub struct McpToolInfo {
1291 pub name: String,
1293 pub input_schema: Value,
1295 #[serde(skip_serializing_if = "Option::is_none")]
1297 pub annotations: Option<Value>,
1298 #[serde(skip_serializing_if = "Option::is_none")]
1300 pub description: Option<String>,
1301}
1302
1303#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1305pub struct McpApprovalRequestOutput {
1306 pub arguments: String,
1308 pub id: String,
1310 pub name: String,
1312 pub server_label: String,
1314}
1315
1316#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1318pub struct Usage {
1319 pub input_tokens: u32,
1321 pub input_tokens_details: PromptTokensDetails,
1323 pub output_tokens: u32,
1325 pub output_tokens_details: CompletionTokensDetails,
1327 pub total_tokens: u32,
1329}
1330
1331#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1333pub struct Response {
1334 pub created_at: u64,
1336
1337 #[serde(skip_serializing_if = "Option::is_none")]
1339 pub error: Option<ErrorObject>,
1340
1341 pub id: String,
1343
1344 #[serde(skip_serializing_if = "Option::is_none")]
1346 pub incomplete_details: Option<IncompleteDetails>,
1347
1348 #[serde(skip_serializing_if = "Option::is_none")]
1350 pub instructions: Option<String>,
1351
1352 #[serde(skip_serializing_if = "Option::is_none")]
1354 pub max_output_tokens: Option<u32>,
1355
1356 #[serde(skip_serializing_if = "Option::is_none")]
1358 pub metadata: Option<HashMap<String, String>>,
1359
1360 pub model: String,
1362
1363 pub object: String,
1365
1366 pub output: Vec<OutputContent>,
1368
1369 #[serde(skip_serializing_if = "Option::is_none")]
1373 pub output_text: Option<String>,
1374
1375 #[serde(skip_serializing_if = "Option::is_none")]
1377 pub parallel_tool_calls: Option<bool>,
1378
1379 #[serde(skip_serializing_if = "Option::is_none")]
1381 pub previous_response_id: Option<String>,
1382
1383 #[serde(skip_serializing_if = "Option::is_none")]
1385 pub reasoning: Option<ReasoningConfig>,
1386
1387 #[serde(skip_serializing_if = "Option::is_none")]
1389 pub store: Option<bool>,
1390
1391 #[serde(skip_serializing_if = "Option::is_none")]
1393 pub service_tier: Option<ServiceTier>,
1394
1395 pub status: Status,
1397
1398 #[serde(skip_serializing_if = "Option::is_none")]
1400 pub temperature: Option<f32>,
1401
1402 #[serde(skip_serializing_if = "Option::is_none")]
1404 pub text: Option<TextConfig>,
1405
1406 #[serde(skip_serializing_if = "Option::is_none")]
1408 pub tool_choice: Option<ToolChoice>,
1409
1410 #[serde(skip_serializing_if = "Option::is_none")]
1412 pub tools: Option<Vec<ToolDefinition>>,
1413
1414 #[serde(skip_serializing_if = "Option::is_none")]
1416 pub top_p: Option<f32>,
1417
1418 #[serde(skip_serializing_if = "Option::is_none")]
1420 pub truncation: Option<Truncation>,
1421
1422 #[serde(skip_serializing_if = "Option::is_none")]
1424 pub usage: Option<Usage>,
1425
1426 #[serde(skip_serializing_if = "Option::is_none")]
1428 pub user: Option<String>,
1429}
1430
1431#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1432#[serde(rename_all = "snake_case")]
1433pub enum Status {
1434 Completed,
1435 Failed,
1436 InProgress,
1437 Incomplete,
1438}
1439
1440#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1442#[serde(tag = "type")]
1443#[non_exhaustive] pub enum ResponseEvent {
1445 #[serde(rename = "response.created")]
1447 ResponseCreated(ResponseCreated),
1448 #[serde(rename = "response.in_progress")]
1450 ResponseInProgress(ResponseInProgress),
1451 #[serde(rename = "response.completed")]
1453 ResponseCompleted(ResponseCompleted),
1454 #[serde(rename = "response.failed")]
1456 ResponseFailed(ResponseFailed),
1457 #[serde(rename = "response.incomplete")]
1459 ResponseIncomplete(ResponseIncomplete),
1460 #[serde(rename = "response.queued")]
1462 ResponseQueued(ResponseQueued),
1463 #[serde(rename = "response.output_item.added")]
1465 ResponseOutputItemAdded(ResponseOutputItemAdded),
1466 #[serde(rename = "response.content_part.added")]
1468 ResponseContentPartAdded(ResponseContentPartAdded),
1469 #[serde(rename = "response.output_text.delta")]
1471 ResponseOutputTextDelta(ResponseOutputTextDelta),
1472 #[serde(rename = "response.output_text.done")]
1474 ResponseOutputTextDone(ResponseOutputTextDone),
1475 #[serde(rename = "response.refusal.delta")]
1477 ResponseRefusalDelta(ResponseRefusalDelta),
1478 #[serde(rename = "response.refusal.done")]
1480 ResponseRefusalDone(ResponseRefusalDone),
1481 #[serde(rename = "response.content_part.done")]
1483 ResponseContentPartDone(ResponseContentPartDone),
1484 #[serde(rename = "response.output_item.done")]
1486 ResponseOutputItemDone(ResponseOutputItemDone),
1487 #[serde(rename = "response.function_call_arguments.delta")]
1489 ResponseFunctionCallArgumentsDelta(ResponseFunctionCallArgumentsDelta),
1490 #[serde(rename = "response.function_call_arguments.done")]
1492 ResponseFunctionCallArgumentsDone(ResponseFunctionCallArgumentsDone),
1493 #[serde(rename = "response.file_search_call.in_progress")]
1495 ResponseFileSearchCallInProgress(ResponseFileSearchCallInProgress),
1496 #[serde(rename = "response.file_search_call.searching")]
1498 ResponseFileSearchCallSearching(ResponseFileSearchCallSearching),
1499 #[serde(rename = "response.file_search_call.completed")]
1501 ResponseFileSearchCallCompleted(ResponseFileSearchCallCompleted),
1502 #[serde(rename = "response.web_search_call.in_progress")]
1504 ResponseWebSearchCallInProgress(ResponseWebSearchCallInProgress),
1505 #[serde(rename = "response.web_search_call.searching")]
1507 ResponseWebSearchCallSearching(ResponseWebSearchCallSearching),
1508 #[serde(rename = "response.web_search_call.completed")]
1510 ResponseWebSearchCallCompleted(ResponseWebSearchCallCompleted),
1511 #[serde(rename = "response.reasoning_summary_part.added")]
1513 ResponseReasoningSummaryPartAdded(ResponseReasoningSummaryPartAdded),
1514 #[serde(rename = "response.reasoning_summary_part.done")]
1516 ResponseReasoningSummaryPartDone(ResponseReasoningSummaryPartDone),
1517 #[serde(rename = "response.reasoning_summary_text.delta")]
1519 ResponseReasoningSummaryTextDelta(ResponseReasoningSummaryTextDelta),
1520 #[serde(rename = "response.reasoning_summary_text.done")]
1522 ResponseReasoningSummaryTextDone(ResponseReasoningSummaryTextDone),
1523 #[serde(rename = "response.reasoning_summary.delta")]
1525 ResponseReasoningSummaryDelta(ResponseReasoningSummaryDelta),
1526 #[serde(rename = "response.reasoning_summary.done")]
1528 ResponseReasoningSummaryDone(ResponseReasoningSummaryDone),
1529 #[serde(rename = "response.image_generation_call.in_progress")]
1531 ResponseImageGenerationCallInProgress(ResponseImageGenerationCallInProgress),
1532 #[serde(rename = "response.image_generation_call.generating")]
1534 ResponseImageGenerationCallGenerating(ResponseImageGenerationCallGenerating),
1535 #[serde(rename = "response.image_generation_call.partial_image")]
1537 ResponseImageGenerationCallPartialImage(ResponseImageGenerationCallPartialImage),
1538 #[serde(rename = "response.image_generation_call.completed")]
1540 ResponseImageGenerationCallCompleted(ResponseImageGenerationCallCompleted),
1541 #[serde(rename = "response.mcp_call_arguments.delta")]
1543 ResponseMcpCallArgumentsDelta(ResponseMcpCallArgumentsDelta),
1544 #[serde(rename = "response.mcp_call_arguments.done")]
1546 ResponseMcpCallArgumentsDone(ResponseMcpCallArgumentsDone),
1547 #[serde(rename = "response.mcp_call.completed")]
1549 ResponseMcpCallCompleted(ResponseMcpCallCompleted),
1550 #[serde(rename = "response.mcp_call.failed")]
1552 ResponseMcpCallFailed(ResponseMcpCallFailed),
1553 #[serde(rename = "response.mcp_call.in_progress")]
1555 ResponseMcpCallInProgress(ResponseMcpCallInProgress),
1556 #[serde(rename = "response.mcp_list_tools.completed")]
1558 ResponseMcpListToolsCompleted(ResponseMcpListToolsCompleted),
1559 #[serde(rename = "response.mcp_list_tools.failed")]
1561 ResponseMcpListToolsFailed(ResponseMcpListToolsFailed),
1562 #[serde(rename = "response.mcp_list_tools.in_progress")]
1564 ResponseMcpListToolsInProgress(ResponseMcpListToolsInProgress),
1565 #[serde(rename = "response.code_interpreter_call.in_progress")]
1567 ResponseCodeInterpreterCallInProgress(ResponseCodeInterpreterCallInProgress),
1568 #[serde(rename = "response.code_interpreter_call.interpreting")]
1570 ResponseCodeInterpreterCallInterpreting(ResponseCodeInterpreterCallInterpreting),
1571 #[serde(rename = "response.code_interpreter_call.completed")]
1573 ResponseCodeInterpreterCallCompleted(ResponseCodeInterpreterCallCompleted),
1574 #[serde(rename = "response.code_interpreter_call_code.delta")]
1576 ResponseCodeInterpreterCallCodeDelta(ResponseCodeInterpreterCallCodeDelta),
1577 #[serde(rename = "response.code_interpreter_call_code.done")]
1579 ResponseCodeInterpreterCallCodeDone(ResponseCodeInterpreterCallCodeDone),
1580 #[serde(rename = "response.output_text.annotation.added")]
1582 ResponseOutputTextAnnotationAdded(ResponseOutputTextAnnotationAdded),
1583 #[serde(rename = "error")]
1585 ResponseError(ResponseError),
1586
1587 #[serde(untagged)]
1589 Unknown(serde_json::Value),
1590}
1591
1592pub type ResponseStream = Pin<Box<dyn Stream<Item = Result<ResponseEvent, OpenAIError>> + Send>>;
1594
1595#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1596#[non_exhaustive]
1597pub struct ResponseCreated {
1598 pub sequence_number: u64,
1599 pub response: ResponseMetadata,
1600}
1601
1602#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1603#[non_exhaustive]
1604pub struct ResponseInProgress {
1605 pub sequence_number: u64,
1606 pub response: ResponseMetadata,
1607}
1608
1609#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1610#[non_exhaustive]
1611pub struct ResponseOutputItemAdded {
1612 pub sequence_number: u64,
1613 pub output_index: u32,
1614 pub item: OutputItem,
1615}
1616
1617#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1618#[non_exhaustive]
1619pub struct ResponseContentPartAdded {
1620 pub sequence_number: u64,
1621 pub item_id: String,
1622 pub output_index: u32,
1623 pub content_index: u32,
1624 pub part: ContentPart,
1625}
1626
1627#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1628#[non_exhaustive]
1629pub struct ResponseOutputTextDelta {
1630 pub sequence_number: u64,
1631 pub item_id: String,
1632 pub output_index: u32,
1633 pub content_index: u32,
1634 pub delta: String,
1635 #[serde(default, skip_serializing_if = "Option::is_none")]
1636 pub logprobs: Option<serde_json::Value>,
1637}
1638
1639#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1640#[non_exhaustive]
1641pub struct ResponseContentPartDone {
1642 pub sequence_number: u64,
1643 pub item_id: String,
1644 pub output_index: u32,
1645 pub content_index: u32,
1646 pub part: ContentPart,
1647}
1648
1649#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1650#[non_exhaustive]
1651pub struct ResponseOutputItemDone {
1652 pub sequence_number: u64,
1653 pub output_index: u32,
1654 pub item: OutputItem,
1655}
1656
1657#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1659#[non_exhaustive]
1660pub struct ResponseCompleted {
1661 pub sequence_number: u64,
1662 pub response: ResponseMetadata,
1663}
1664
1665#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1667#[non_exhaustive]
1668pub struct ResponseFailed {
1669 pub sequence_number: u64,
1670 pub response: ResponseMetadata,
1671}
1672
1673#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1675#[non_exhaustive]
1676pub struct ResponseIncomplete {
1677 pub sequence_number: u64,
1678 pub response: ResponseMetadata,
1679}
1680
1681#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1683#[non_exhaustive]
1684pub struct ResponseQueued {
1685 pub sequence_number: u64,
1686 pub response: ResponseMetadata,
1687}
1688
1689#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1691#[non_exhaustive]
1692pub struct ResponseOutputTextDone {
1693 pub sequence_number: u64,
1694 pub item_id: String,
1695 pub output_index: u32,
1696 pub content_index: u32,
1697 pub text: String,
1698 pub logprobs: Option<Vec<serde_json::Value>>,
1699}
1700
1701#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1703#[non_exhaustive]
1704pub struct ResponseRefusalDelta {
1705 pub sequence_number: u64,
1706 pub item_id: String,
1707 pub output_index: u32,
1708 pub content_index: u32,
1709 pub delta: String,
1710}
1711
1712#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1714#[non_exhaustive]
1715pub struct ResponseRefusalDone {
1716 pub sequence_number: u64,
1717 pub item_id: String,
1718 pub output_index: u32,
1719 pub content_index: u32,
1720 pub refusal: String,
1721}
1722
1723#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1725#[non_exhaustive]
1726pub struct ResponseFunctionCallArgumentsDelta {
1727 pub sequence_number: u64,
1728 pub item_id: String,
1729 pub output_index: u32,
1730 pub delta: String,
1731}
1732
1733#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1735#[non_exhaustive]
1736pub struct ResponseFunctionCallArgumentsDone {
1737 pub sequence_number: u64,
1738 pub item_id: String,
1739 pub output_index: u32,
1740 pub arguments: String,
1741}
1742
1743#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1745#[non_exhaustive]
1746pub struct ResponseError {
1747 pub sequence_number: u64,
1748 pub code: Option<String>,
1749 pub message: String,
1750 pub param: Option<String>,
1751}
1752
1753#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1755#[non_exhaustive]
1756pub struct ResponseFileSearchCallInProgress {
1757 pub sequence_number: u64,
1758 pub output_index: u32,
1759 pub item_id: String,
1760}
1761
1762#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1764#[non_exhaustive]
1765pub struct ResponseFileSearchCallSearching {
1766 pub sequence_number: u64,
1767 pub output_index: u32,
1768 pub item_id: String,
1769}
1770
1771#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1773#[non_exhaustive]
1774pub struct ResponseFileSearchCallCompleted {
1775 pub sequence_number: u64,
1776 pub output_index: u32,
1777 pub item_id: String,
1778}
1779
1780#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1782#[non_exhaustive]
1783pub struct ResponseWebSearchCallInProgress {
1784 pub sequence_number: u64,
1785 pub output_index: u32,
1786 pub item_id: String,
1787}
1788
1789#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1791#[non_exhaustive]
1792pub struct ResponseWebSearchCallSearching {
1793 pub sequence_number: u64,
1794 pub output_index: u32,
1795 pub item_id: String,
1796}
1797
1798#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1800#[non_exhaustive]
1801pub struct ResponseWebSearchCallCompleted {
1802 pub sequence_number: u64,
1803 pub output_index: u32,
1804 pub item_id: String,
1805}
1806
1807#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1809#[non_exhaustive]
1810pub struct ResponseReasoningSummaryPartAdded {
1811 pub sequence_number: u64,
1812 pub item_id: String,
1813 pub output_index: u32,
1814 pub summary_index: u32,
1815 pub part: serde_json::Value, }
1817
1818#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1820#[non_exhaustive]
1821pub struct ResponseReasoningSummaryPartDone {
1822 pub sequence_number: u64,
1823 pub item_id: String,
1824 pub output_index: u32,
1825 pub summary_index: u32,
1826 pub part: serde_json::Value,
1827}
1828
1829#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1831#[non_exhaustive]
1832pub struct ResponseReasoningSummaryTextDelta {
1833 pub sequence_number: u64,
1834 pub item_id: String,
1835 pub output_index: u32,
1836 pub summary_index: u32,
1837 pub delta: String,
1838}
1839
1840#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1842#[non_exhaustive]
1843pub struct ResponseReasoningSummaryTextDone {
1844 pub sequence_number: u64,
1845 pub item_id: String,
1846 pub output_index: u32,
1847 pub summary_index: u32,
1848 pub text: String,
1849}
1850
1851#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1853#[non_exhaustive]
1854pub struct ResponseReasoningSummaryDelta {
1855 pub sequence_number: u64,
1856 pub item_id: String,
1857 pub output_index: u32,
1858 pub summary_index: u32,
1859 pub delta: serde_json::Value,
1860}
1861
1862#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1864#[non_exhaustive]
1865pub struct ResponseReasoningSummaryDone {
1866 pub sequence_number: u64,
1867 pub item_id: String,
1868 pub output_index: u32,
1869 pub summary_index: u32,
1870 pub text: String,
1871}
1872
1873#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1875#[non_exhaustive]
1876pub struct ResponseImageGenerationCallInProgress {
1877 pub sequence_number: u64,
1878 pub output_index: u32,
1879 pub item_id: String,
1880}
1881
1882#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1884#[non_exhaustive]
1885pub struct ResponseImageGenerationCallGenerating {
1886 pub sequence_number: u64,
1887 pub output_index: u32,
1888 pub item_id: String,
1889}
1890
1891#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1893#[non_exhaustive]
1894pub struct ResponseImageGenerationCallPartialImage {
1895 pub sequence_number: u64,
1896 pub output_index: u32,
1897 pub item_id: String,
1898 pub partial_image_index: u32,
1899 pub partial_image_b64: String,
1900}
1901
1902#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1904#[non_exhaustive]
1905pub struct ResponseImageGenerationCallCompleted {
1906 pub sequence_number: u64,
1907 pub output_index: u32,
1908 pub item_id: String,
1909}
1910
1911#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1913#[non_exhaustive]
1914pub struct ResponseMcpCallArgumentsDelta {
1915 pub sequence_number: u64,
1916 pub output_index: u32,
1917 pub item_id: String,
1918 pub delta: String,
1919}
1920
1921#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1923#[non_exhaustive]
1924pub struct ResponseMcpCallArgumentsDone {
1925 pub sequence_number: u64,
1926 pub output_index: u32,
1927 pub item_id: String,
1928 pub arguments: String,
1929}
1930
1931#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1933#[non_exhaustive]
1934pub struct ResponseMcpCallCompleted {
1935 pub sequence_number: u64,
1936 pub output_index: u32,
1937 pub item_id: String,
1938}
1939
1940#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1942#[non_exhaustive]
1943pub struct ResponseMcpCallFailed {
1944 pub sequence_number: u64,
1945 pub output_index: u32,
1946 pub item_id: String,
1947}
1948
1949#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1951#[non_exhaustive]
1952pub struct ResponseMcpCallInProgress {
1953 pub sequence_number: u64,
1954 pub output_index: u32,
1955 pub item_id: String,
1956}
1957
1958#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1960#[non_exhaustive]
1961pub struct ResponseMcpListToolsCompleted {
1962 pub sequence_number: u64,
1963 pub output_index: u32,
1964 pub item_id: String,
1965}
1966
1967#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1969#[non_exhaustive]
1970pub struct ResponseMcpListToolsFailed {
1971 pub sequence_number: u64,
1972 pub output_index: u32,
1973 pub item_id: String,
1974}
1975
1976#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1978#[non_exhaustive]
1979pub struct ResponseMcpListToolsInProgress {
1980 pub sequence_number: u64,
1981 pub output_index: u32,
1982 pub item_id: String,
1983}
1984
1985#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1987#[non_exhaustive]
1988pub struct ResponseCodeInterpreterCallInProgress {
1989 pub sequence_number: u64,
1990 pub output_index: u32,
1991 pub item_id: String,
1992}
1993
1994#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1996#[non_exhaustive]
1997pub struct ResponseCodeInterpreterCallInterpreting {
1998 pub sequence_number: u64,
1999 pub output_index: u32,
2000 pub item_id: String,
2001}
2002
2003#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2005#[non_exhaustive]
2006pub struct ResponseCodeInterpreterCallCompleted {
2007 pub sequence_number: u64,
2008 pub output_index: u32,
2009 pub item_id: String,
2010}
2011
2012#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2014#[non_exhaustive]
2015pub struct ResponseCodeInterpreterCallCodeDelta {
2016 pub sequence_number: u64,
2017 pub output_index: u32,
2018 pub item_id: String,
2019 pub delta: String,
2020}
2021
2022#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2024#[non_exhaustive]
2025pub struct ResponseCodeInterpreterCallCodeDone {
2026 pub sequence_number: u64,
2027 pub output_index: u32,
2028 pub item_id: String,
2029 pub code: String,
2030}
2031
2032#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2034#[non_exhaustive]
2035pub struct ResponseMetadata {
2036 pub id: String,
2037 #[serde(skip_serializing_if = "Option::is_none")]
2038 pub object: Option<String>,
2039 pub created_at: u64,
2040 pub status: Status,
2041 #[serde(skip_serializing_if = "Option::is_none")]
2042 pub model: Option<String>,
2043 #[serde(skip_serializing_if = "Option::is_none")]
2044 pub usage: Option<Usage>,
2045 #[serde(skip_serializing_if = "Option::is_none")]
2046 pub error: Option<ErrorObject>,
2047 #[serde(skip_serializing_if = "Option::is_none")]
2048 pub incomplete_details: Option<IncompleteDetails>,
2049 #[serde(skip_serializing_if = "Option::is_none")]
2050 pub input: Option<Input>,
2051 #[serde(skip_serializing_if = "Option::is_none")]
2052 pub instructions: Option<String>,
2053 #[serde(skip_serializing_if = "Option::is_none")]
2054 pub max_output_tokens: Option<u32>,
2055 #[serde(skip_serializing_if = "Option::is_none")]
2057 pub background: Option<bool>,
2058 #[serde(skip_serializing_if = "Option::is_none")]
2060 pub service_tier: Option<ServiceTier>,
2061 #[serde(skip_serializing_if = "Option::is_none")]
2063 pub top_logprobs: Option<u32>,
2064 #[serde(skip_serializing_if = "Option::is_none")]
2066 pub max_tool_calls: Option<u32>,
2067 #[serde(skip_serializing_if = "Option::is_none")]
2068 pub output: Option<Vec<OutputItem>>,
2069 #[serde(skip_serializing_if = "Option::is_none")]
2070 pub parallel_tool_calls: Option<bool>,
2071 #[serde(skip_serializing_if = "Option::is_none")]
2072 pub previous_response_id: Option<String>,
2073 #[serde(skip_serializing_if = "Option::is_none")]
2074 pub reasoning: Option<ReasoningConfig>,
2075 #[serde(skip_serializing_if = "Option::is_none")]
2076 pub store: Option<bool>,
2077 #[serde(skip_serializing_if = "Option::is_none")]
2078 pub temperature: Option<f32>,
2079 #[serde(skip_serializing_if = "Option::is_none")]
2080 pub text: Option<TextConfig>,
2081 #[serde(skip_serializing_if = "Option::is_none")]
2082 pub tool_choice: Option<ToolChoice>,
2083 #[serde(skip_serializing_if = "Option::is_none")]
2084 pub tools: Option<Vec<ToolDefinition>>,
2085 #[serde(skip_serializing_if = "Option::is_none")]
2086 pub top_p: Option<f32>,
2087 #[serde(skip_serializing_if = "Option::is_none")]
2088 pub truncation: Option<Truncation>,
2089 #[serde(skip_serializing_if = "Option::is_none")]
2090 pub user: Option<String>,
2091 #[serde(skip_serializing_if = "Option::is_none")]
2092 pub metadata: Option<HashMap<String, String>>,
2093 #[serde(skip_serializing_if = "Option::is_none")]
2095 pub prompt_cache_key: Option<String>,
2096 #[serde(skip_serializing_if = "Option::is_none")]
2098 pub safety_identifier: Option<String>,
2099}
2100
2101#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2103#[non_exhaustive]
2104pub struct OutputItem {
2105 pub id: String,
2106 #[serde(rename = "type")]
2107 pub item_type: String,
2108 #[serde(skip_serializing_if = "Option::is_none")]
2109 pub status: Option<String>,
2110 #[serde(skip_serializing_if = "Option::is_none")]
2111 pub content: Option<Vec<ContentPart>>,
2112 #[serde(skip_serializing_if = "Option::is_none")]
2113 pub role: Option<String>,
2114 #[serde(skip_serializing_if = "Option::is_none")]
2116 pub summary: Option<Vec<serde_json::Value>>,
2117}
2118
2119#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2121#[non_exhaustive]
2122pub struct ContentPart {
2123 #[serde(rename = "type")]
2124 pub part_type: String,
2125 pub text: Option<String>,
2126 #[serde(default, skip_serializing_if = "Option::is_none")]
2127 pub annotations: Option<Vec<serde_json::Value>>,
2128 #[serde(default, skip_serializing_if = "Option::is_none")]
2129 pub logprobs: Option<Vec<serde_json::Value>>,
2130}
2131
2132#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2138#[non_exhaustive]
2139pub struct ResponseOutputTextAnnotationAdded {
2140 pub sequence_number: u64,
2141 pub item_id: String,
2142 pub output_index: u32,
2143 pub content_index: u32,
2144 pub annotation_index: u32,
2145 pub annotation: TextAnnotation,
2146}
2147
2148#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2150#[non_exhaustive]
2151pub struct TextAnnotation {
2152 #[serde(rename = "type")]
2153 pub annotation_type: String,
2154 pub text: String,
2155 pub start: u32,
2156 pub end: u32,
2157}