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 Scale,
333 Priority,
334}
335
336#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
338#[serde(rename_all = "lowercase")]
339pub enum Truncation {
340 Auto,
341 Disabled,
342}
343
344#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
346#[builder(
347 name = "ReasoningConfigArgs",
348 pattern = "mutable",
349 setter(into, strip_option),
350 default
351)]
352#[builder(build_fn(error = "OpenAIError"))]
353pub struct ReasoningConfig {
354 #[serde(skip_serializing_if = "Option::is_none")]
356 pub effort: Option<ReasoningEffort>,
357 #[serde(skip_serializing_if = "Option::is_none")]
359 pub summary: Option<ReasoningSummary>,
360}
361
362#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
363#[serde(rename_all = "lowercase")]
364pub enum ReasoningSummary {
365 Auto,
366 Concise,
367 Detailed,
368}
369
370#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
372pub struct TextConfig {
373 pub format: TextResponseFormat,
375}
376
377#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
378#[serde(tag = "type", rename_all = "snake_case")]
379pub enum TextResponseFormat {
380 Text,
382 JsonObject,
384 JsonSchema(ResponseFormatJsonSchema),
386}
387
388#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
390#[serde(tag = "type", rename_all = "snake_case")]
391pub enum ToolDefinition {
392 FileSearch(FileSearch),
394 Function(Function),
396 WebSearchPreview(WebSearchPreview),
398 ComputerUsePreview(ComputerUsePreview),
400 Mcp(Mcp),
402 CodeInterpreter(CodeInterpreter),
404 ImageGeneration(ImageGeneration),
406 LocalShell,
408}
409
410#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
411#[builder(
412 name = "FileSearchArgs",
413 pattern = "mutable",
414 setter(into, strip_option),
415 default
416)]
417#[builder(build_fn(error = "OpenAIError"))]
418pub struct FileSearch {
419 pub vector_store_ids: Vec<String>,
421 #[serde(skip_serializing_if = "Option::is_none")]
423 pub max_num_results: Option<u32>,
424 #[serde(skip_serializing_if = "Option::is_none")]
426 pub filters: Option<Filter>,
427 #[serde(skip_serializing_if = "Option::is_none")]
429 pub ranking_options: Option<RankingOptions>,
430}
431
432#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
433#[builder(
434 name = "FunctionArgs",
435 pattern = "mutable",
436 setter(into, strip_option),
437 default
438)]
439pub struct Function {
440 pub name: String,
442 pub parameters: serde_json::Value,
444 pub strict: bool,
446 #[serde(skip_serializing_if = "Option::is_none")]
449 pub description: Option<String>,
450}
451
452#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
453#[builder(
454 name = "WebSearchPreviewArgs",
455 pattern = "mutable",
456 setter(into, strip_option),
457 default
458)]
459pub struct WebSearchPreview {
460 #[serde(skip_serializing_if = "Option::is_none")]
462 pub user_location: Option<Location>,
463 #[serde(skip_serializing_if = "Option::is_none")]
465 pub search_context_size: Option<WebSearchContextSize>,
466}
467
468#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
469#[serde(rename_all = "lowercase")]
470pub enum WebSearchContextSize {
471 Low,
472 Medium,
473 High,
474}
475
476#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
477#[builder(
478 name = "ComputerUsePreviewArgs",
479 pattern = "mutable",
480 setter(into, strip_option),
481 default
482)]
483pub struct ComputerUsePreview {
484 environment: String,
486 display_width: u32,
488 display_height: u32,
490}
491
492#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
494pub struct RankingOptions {
495 pub ranker: String,
497 #[serde(skip_serializing_if = "Option::is_none")]
500 pub score_threshold: Option<f32>,
501}
502
503#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
505#[serde(untagged)]
506pub enum Filter {
507 Comparison(ComparisonFilter),
510 Compound(CompoundFilter),
512}
513
514#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
516pub struct ComparisonFilter {
517 #[serde(rename = "type")]
519 pub op: ComparisonType,
520 pub key: String,
522 pub value: serde_json::Value,
524}
525
526#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
527pub enum ComparisonType {
528 #[serde(rename = "eq")]
529 Equals,
530 #[serde(rename = "ne")]
531 NotEquals,
532 #[serde(rename = "gt")]
533 GreaterThan,
534 #[serde(rename = "gte")]
535 GreaterThanOrEqualTo,
536 #[serde(rename = "lt")]
537 LessThan,
538 #[serde(rename = "lte")]
539 LessThanOrEqualTo,
540}
541
542#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
544pub struct CompoundFilter {
545 #[serde(rename = "type")]
547 pub op: ComparisonType,
548 pub filters: Vec<Filter>,
550}
551
552#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
553#[serde(rename_all = "lowercase")]
554pub enum CompoundType {
555 And,
556 Or,
557}
558
559#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
561#[builder(
562 name = "LocationArgs",
563 pattern = "mutable",
564 setter(into, strip_option),
565 default
566)]
567#[builder(build_fn(error = "OpenAIError"))]
568pub struct Location {
569 #[serde(rename = "type")]
571 pub kind: String,
572 #[serde(skip_serializing_if = "Option::is_none")]
574 pub city: Option<String>,
575 #[serde(skip_serializing_if = "Option::is_none")]
577 pub country: Option<String>,
578 #[serde(skip_serializing_if = "Option::is_none")]
580 pub region: Option<String>,
581 #[serde(skip_serializing_if = "Option::is_none")]
583 pub timezone: Option<String>,
584}
585
586#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
588#[builder(
589 name = "McpArgs",
590 pattern = "mutable",
591 setter(into, strip_option),
592 default
593)]
594#[builder(build_fn(error = "OpenAIError"))]
595pub struct Mcp {
596 pub server_label: String,
598 pub server_url: String,
600 #[serde(skip_serializing_if = "Option::is_none")]
602 pub allowed_tools: Option<AllowedTools>,
603 #[serde(skip_serializing_if = "Option::is_none")]
605 pub headers: Option<Value>,
606 #[serde(skip_serializing_if = "Option::is_none")]
608 pub require_approval: Option<RequireApproval>,
609}
610
611#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
613#[serde(untagged)]
614pub enum AllowedTools {
615 List(Vec<String>),
617 Filter(McpAllowedToolsFilter),
619}
620
621#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
623pub struct McpAllowedToolsFilter {
624 #[serde(skip_serializing_if = "Option::is_none")]
626 pub tool_names: Option<Vec<String>>,
627}
628
629#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
631#[serde(untagged)]
632pub enum RequireApproval {
633 Policy(RequireApprovalPolicy),
635 Filter(McpApprovalFilter),
637}
638
639#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
640#[serde(rename_all = "lowercase")]
641pub enum RequireApprovalPolicy {
642 Always,
643 Never,
644}
645
646#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
648pub struct McpApprovalFilter {
649 #[serde(skip_serializing_if = "Option::is_none")]
651 pub always: Option<McpAllowedToolsFilter>,
652 #[serde(skip_serializing_if = "Option::is_none")]
654 pub never: Option<McpAllowedToolsFilter>,
655}
656
657#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
659#[serde(untagged)]
660pub enum CodeInterpreterContainer {
661 Id(String),
663 Container(CodeInterpreterContainerKind),
665}
666
667#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
669#[serde(tag = "type", rename_all = "snake_case")]
670pub enum CodeInterpreterContainerKind {
671 Auto {
672 #[serde(skip_serializing_if = "Option::is_none")]
674 file_ids: Option<Vec<String>>,
675 },
676}
677
678#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
680#[builder(
681 name = "CodeInterpreterArgs",
682 pattern = "mutable",
683 setter(into, strip_option),
684 default
685)]
686#[builder(build_fn(error = "OpenAIError"))]
687pub struct CodeInterpreter {
688 pub container: CodeInterpreterContainer,
690}
691
692#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
694pub struct InputImageMask {
695 #[serde(skip_serializing_if = "Option::is_none")]
697 pub image_url: Option<String>,
698 #[serde(skip_serializing_if = "Option::is_none")]
700 pub file_id: Option<String>,
701}
702
703#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default, Builder)]
705#[builder(
706 name = "ImageGenerationArgs",
707 pattern = "mutable",
708 setter(into, strip_option),
709 default
710)]
711#[builder(build_fn(error = "OpenAIError"))]
712pub struct ImageGeneration {
713 #[serde(skip_serializing_if = "Option::is_none")]
715 pub background: Option<ImageGenerationBackground>,
716 #[serde(skip_serializing_if = "Option::is_none")]
718 pub input_image_mask: Option<InputImageMask>,
719 #[serde(skip_serializing_if = "Option::is_none")]
721 pub model: Option<String>,
722 #[serde(skip_serializing_if = "Option::is_none")]
724 pub moderation: Option<String>,
725 #[serde(skip_serializing_if = "Option::is_none")]
727 pub output_compression: Option<u8>,
728 #[serde(skip_serializing_if = "Option::is_none")]
730 pub output_format: Option<ImageGenerationOutputFormat>,
731 #[serde(skip_serializing_if = "Option::is_none")]
733 pub partial_images: Option<u8>,
734 #[serde(skip_serializing_if = "Option::is_none")]
736 pub quality: Option<ImageGenerationQuality>,
737 #[serde(skip_serializing_if = "Option::is_none")]
739 pub size: Option<ImageGenerationSize>,
740}
741
742#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
743#[serde(rename_all = "lowercase")]
744pub enum ImageGenerationBackground {
745 Transparent,
746 Opaque,
747 Auto,
748}
749
750#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
751#[serde(rename_all = "lowercase")]
752pub enum ImageGenerationOutputFormat {
753 Png,
754 Webp,
755 Jpeg,
756}
757
758#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
759#[serde(rename_all = "lowercase")]
760pub enum ImageGenerationQuality {
761 Low,
762 Medium,
763 High,
764 Auto,
765}
766
767#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
768#[serde(rename_all = "lowercase")]
769pub enum ImageGenerationSize {
770 Auto,
771 #[serde(rename = "1024x1024")]
772 Size1024x1024,
773 #[serde(rename = "1024x1536")]
774 Size1024x1536,
775 #[serde(rename = "1536x1024")]
776 Size1536x1024,
777}
778
779#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
781#[serde(untagged)]
782pub enum ToolChoice {
783 Mode(ToolChoiceMode),
785 Hosted {
787 #[serde(rename = "type")]
789 kind: HostedToolType,
790 },
791 Function {
793 name: String,
795 },
796}
797
798#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
800#[serde(rename_all = "lowercase")]
801pub enum ToolChoiceMode {
802 None,
804 Auto,
806 Required,
808}
809
810#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
812#[serde(rename_all = "snake_case")]
813pub enum HostedToolType {
814 FileSearch,
815 WebSearchPreview,
816 ComputerUsePreview,
817}
818
819#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
821pub struct ErrorObject {
822 pub code: String,
824 pub message: String,
826}
827
828#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
830pub struct IncompleteDetails {
831 pub reason: String,
833}
834
835#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
837pub struct OutputText {
838 pub annotations: Vec<Annotation>,
840 pub text: String,
842}
843
844#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
845#[serde(tag = "type", rename_all = "snake_case")]
846pub enum Annotation {
847 FileCitation(FileCitation),
849 UrlCitation(UrlCitation),
851 FilePath(FilePath),
853}
854
855#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
856pub struct FileCitation {
857 file_id: String,
859 index: u32,
861}
862
863#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
864pub struct UrlCitation {
865 end_index: u32,
867 start_index: u32,
869 title: String,
871 url: String,
873}
874
875#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
876pub struct FilePath {
877 file_id: String,
879 index: u32,
881}
882
883#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
885pub struct Refusal {
886 pub refusal: String,
888}
889
890#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
892pub struct OutputMessage {
893 pub content: Vec<Content>,
895 pub id: String,
897 pub role: Role,
899 pub status: OutputStatus,
901}
902
903#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
904#[serde(tag = "type", rename_all = "snake_case")]
905pub enum Content {
906 OutputText(OutputText),
908 Refusal(Refusal),
910}
911
912#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
914#[serde(tag = "type", rename_all = "snake_case")]
915pub enum OutputContent {
916 Message(OutputMessage),
918 FileSearchCall(FileSearchCallOutput),
920 FunctionCall(FunctionCall),
922 WebSearchCall(WebSearchCallOutput),
924 ComputerCall(ComputerCallOutput),
926 Reasoning(ReasoningItem),
930 ImageGenerationCall(ImageGenerationCallOutput),
932 CodeInterpreterCall(CodeInterpreterCallOutput),
934 LocalShellCall(LocalShellCallOutput),
936 McpCall(McpCallOutput),
938 McpListTools(McpListToolsOutput),
940 McpApprovalRequest(McpApprovalRequestOutput),
942}
943
944#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
946pub struct ReasoningItem {
947 pub id: String,
949 pub summary: Vec<SummaryText>,
951 #[serde(skip_serializing_if = "Option::is_none")]
954 pub encrypted_content: Option<String>,
955 #[serde(skip_serializing_if = "Option::is_none")]
957 pub status: Option<OutputStatus>,
958}
959
960#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
962pub struct SummaryText {
963 pub text: String,
965}
966
967#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
969pub struct FileSearchCallOutput {
970 pub id: String,
972 pub queries: Vec<String>,
974 pub status: FileSearchCallOutputStatus,
976 #[serde(skip_serializing_if = "Option::is_none")]
978 pub results: Option<Vec<FileSearchResult>>,
979}
980
981#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
982#[serde(rename_all = "snake_case")]
983pub enum FileSearchCallOutputStatus {
984 InProgress,
985 Searching,
986 Incomplete,
987 Failed,
988 Completed,
989}
990
991#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
993pub struct FileSearchResult {
994 pub file_id: String,
996 pub filename: String,
998 pub score: f32,
1000 pub text: String,
1002 pub attributes: HashMap<String, serde_json::Value>,
1007}
1008
1009#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1010pub struct SafetyCheck {
1011 pub id: String,
1013 pub code: String,
1015 pub message: String,
1017}
1018
1019#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1021pub struct WebSearchCallOutput {
1022 pub id: String,
1024 pub status: String,
1026}
1027
1028#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1030pub struct ComputerCallOutput {
1031 pub action: ComputerCallAction,
1032 pub call_id: String,
1034 pub id: String,
1036 pub pending_safety_checks: Vec<SafetyCheck>,
1038 pub status: OutputStatus,
1040}
1041
1042#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1044pub struct Point {
1045 pub x: i32,
1046 pub y: i32,
1047}
1048
1049#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1051#[serde(tag = "type", rename_all = "snake_case")]
1052pub enum ComputerCallAction {
1053 Click(Click),
1055
1056 DoubleClick(DoubleClick),
1058
1059 Drag(Drag),
1061
1062 KeyPress(KeyPress),
1064
1065 Move(MoveAction),
1067
1068 Screenshot,
1070
1071 Scroll(Scroll),
1073
1074 Type(TypeAction),
1076
1077 Wait,
1079}
1080
1081#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1082#[serde(rename_all = "snake_case")]
1083pub enum ButtonPress {
1084 Left,
1085 Right,
1086 Wheel,
1087 Back,
1088 Forward,
1089}
1090
1091#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1093pub struct Click {
1094 pub button: ButtonPress,
1096 pub x: i32,
1098 pub y: i32,
1100}
1101
1102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1104pub struct DoubleClick {
1105 pub x: i32,
1107 pub y: i32,
1109}
1110
1111#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1113pub struct Drag {
1114 pub path: Vec<Point>,
1116 pub x: i32,
1118 pub y: i32,
1120}
1121
1122#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1124pub struct KeyPress {
1125 pub keys: Vec<String>,
1127}
1128
1129#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1131pub struct MoveAction {
1132 pub x: i32,
1134 pub y: i32,
1136}
1137
1138#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1140pub struct Scroll {
1141 pub scroll_x: i32,
1143 pub scroll_y: i32,
1145 pub x: i32,
1147 pub y: i32,
1149}
1150
1151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1153pub struct TypeAction {
1154 pub text: String,
1156}
1157
1158#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1160pub struct FunctionCall {
1161 pub id: String,
1163 pub call_id: String,
1165 pub name: String,
1167 pub arguments: String,
1169 pub status: OutputStatus,
1171}
1172
1173#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1175pub struct ImageGenerationCallOutput {
1176 pub id: String,
1178 pub result: Option<String>,
1180 pub status: String,
1182}
1183
1184#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1186pub struct CodeInterpreterCallOutput {
1187 #[serde(skip_serializing_if = "Option::is_none")]
1189 pub code: Option<String>,
1190 pub id: String,
1192 pub status: String,
1194 pub container_id: String,
1196 #[serde(skip_serializing_if = "Option::is_none")]
1198 pub outputs: Option<Vec<CodeInterpreterResult>>,
1199}
1200
1201#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1203#[serde(tag = "type", rename_all = "snake_case")]
1204pub enum CodeInterpreterResult {
1205 Logs(CodeInterpreterTextOutput),
1207 Files(CodeInterpreterFileOutput),
1209}
1210
1211#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1213pub struct CodeInterpreterTextOutput {
1214 pub logs: String,
1216}
1217
1218#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1220pub struct CodeInterpreterFileOutput {
1221 pub files: Vec<CodeInterpreterFile>,
1223}
1224
1225#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1226pub struct CodeInterpreterFile {
1227 file_id: String,
1229 mime_type: String,
1231}
1232
1233#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1235pub struct LocalShellCallOutput {
1236 pub action: LocalShellAction,
1238 pub call_id: String,
1240 pub id: String,
1242 pub status: String,
1244}
1245
1246#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1248pub struct LocalShellAction {
1249 pub command: Vec<String>,
1251 pub env: HashMap<String, String>,
1253 pub timeout_ms: Option<u64>,
1255 pub user: Option<String>,
1257 pub working_directory: Option<String>,
1259}
1260
1261#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1263pub struct McpCallOutput {
1264 pub arguments: String,
1266 pub id: String,
1268 pub name: String,
1270 pub server_label: String,
1272 pub error: Option<String>,
1274 pub output: Option<String>,
1276}
1277
1278#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1280pub struct McpListToolsOutput {
1281 pub id: String,
1283 pub server_label: String,
1285 pub tools: Vec<McpToolInfo>,
1287 #[serde(skip_serializing_if = "Option::is_none")]
1289 pub error: Option<String>,
1290}
1291
1292#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1294pub struct McpToolInfo {
1295 pub name: String,
1297 pub input_schema: Value,
1299 #[serde(skip_serializing_if = "Option::is_none")]
1301 pub annotations: Option<Value>,
1302 #[serde(skip_serializing_if = "Option::is_none")]
1304 pub description: Option<String>,
1305}
1306
1307#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1309pub struct McpApprovalRequestOutput {
1310 pub arguments: String,
1312 pub id: String,
1314 pub name: String,
1316 pub server_label: String,
1318}
1319
1320#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1322pub struct Usage {
1323 pub input_tokens: u32,
1325 pub input_tokens_details: PromptTokensDetails,
1327 pub output_tokens: u32,
1329 pub output_tokens_details: CompletionTokensDetails,
1331 pub total_tokens: u32,
1333}
1334
1335#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1337pub struct Response {
1338 pub created_at: u64,
1340
1341 #[serde(skip_serializing_if = "Option::is_none")]
1343 pub error: Option<ErrorObject>,
1344
1345 pub id: String,
1347
1348 #[serde(skip_serializing_if = "Option::is_none")]
1350 pub incomplete_details: Option<IncompleteDetails>,
1351
1352 #[serde(skip_serializing_if = "Option::is_none")]
1354 pub instructions: Option<String>,
1355
1356 #[serde(skip_serializing_if = "Option::is_none")]
1358 pub max_output_tokens: Option<u32>,
1359
1360 #[serde(skip_serializing_if = "Option::is_none")]
1362 pub metadata: Option<HashMap<String, String>>,
1363
1364 pub model: String,
1366
1367 pub object: String,
1369
1370 pub output: Vec<OutputContent>,
1372
1373 #[serde(skip_serializing_if = "Option::is_none")]
1377 pub output_text: Option<String>,
1378
1379 #[serde(skip_serializing_if = "Option::is_none")]
1381 pub parallel_tool_calls: Option<bool>,
1382
1383 #[serde(skip_serializing_if = "Option::is_none")]
1385 pub previous_response_id: Option<String>,
1386
1387 #[serde(skip_serializing_if = "Option::is_none")]
1389 pub reasoning: Option<ReasoningConfig>,
1390
1391 #[serde(skip_serializing_if = "Option::is_none")]
1393 pub store: Option<bool>,
1394
1395 #[serde(skip_serializing_if = "Option::is_none")]
1397 pub service_tier: Option<ServiceTier>,
1398
1399 pub status: Status,
1401
1402 #[serde(skip_serializing_if = "Option::is_none")]
1404 pub temperature: Option<f32>,
1405
1406 #[serde(skip_serializing_if = "Option::is_none")]
1408 pub text: Option<TextConfig>,
1409
1410 #[serde(skip_serializing_if = "Option::is_none")]
1412 pub tool_choice: Option<ToolChoice>,
1413
1414 #[serde(skip_serializing_if = "Option::is_none")]
1416 pub tools: Option<Vec<ToolDefinition>>,
1417
1418 #[serde(skip_serializing_if = "Option::is_none")]
1420 pub top_p: Option<f32>,
1421
1422 #[serde(skip_serializing_if = "Option::is_none")]
1424 pub truncation: Option<Truncation>,
1425
1426 #[serde(skip_serializing_if = "Option::is_none")]
1428 pub usage: Option<Usage>,
1429
1430 #[serde(skip_serializing_if = "Option::is_none")]
1432 pub user: Option<String>,
1433}
1434
1435#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1436#[serde(rename_all = "snake_case")]
1437pub enum Status {
1438 Completed,
1439 Failed,
1440 InProgress,
1441 Incomplete,
1442}
1443
1444#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1446#[serde(tag = "type")]
1447#[non_exhaustive] pub enum ResponseEvent {
1449 #[serde(rename = "response.created")]
1451 ResponseCreated(ResponseCreated),
1452 #[serde(rename = "response.in_progress")]
1454 ResponseInProgress(ResponseInProgress),
1455 #[serde(rename = "response.completed")]
1457 ResponseCompleted(ResponseCompleted),
1458 #[serde(rename = "response.failed")]
1460 ResponseFailed(ResponseFailed),
1461 #[serde(rename = "response.incomplete")]
1463 ResponseIncomplete(ResponseIncomplete),
1464 #[serde(rename = "response.queued")]
1466 ResponseQueued(ResponseQueued),
1467 #[serde(rename = "response.output_item.added")]
1469 ResponseOutputItemAdded(ResponseOutputItemAdded),
1470 #[serde(rename = "response.content_part.added")]
1472 ResponseContentPartAdded(ResponseContentPartAdded),
1473 #[serde(rename = "response.output_text.delta")]
1475 ResponseOutputTextDelta(ResponseOutputTextDelta),
1476 #[serde(rename = "response.output_text.done")]
1478 ResponseOutputTextDone(ResponseOutputTextDone),
1479 #[serde(rename = "response.refusal.delta")]
1481 ResponseRefusalDelta(ResponseRefusalDelta),
1482 #[serde(rename = "response.refusal.done")]
1484 ResponseRefusalDone(ResponseRefusalDone),
1485 #[serde(rename = "response.content_part.done")]
1487 ResponseContentPartDone(ResponseContentPartDone),
1488 #[serde(rename = "response.output_item.done")]
1490 ResponseOutputItemDone(ResponseOutputItemDone),
1491 #[serde(rename = "response.function_call_arguments.delta")]
1493 ResponseFunctionCallArgumentsDelta(ResponseFunctionCallArgumentsDelta),
1494 #[serde(rename = "response.function_call_arguments.done")]
1496 ResponseFunctionCallArgumentsDone(ResponseFunctionCallArgumentsDone),
1497 #[serde(rename = "response.file_search_call.in_progress")]
1499 ResponseFileSearchCallInProgress(ResponseFileSearchCallInProgress),
1500 #[serde(rename = "response.file_search_call.searching")]
1502 ResponseFileSearchCallSearching(ResponseFileSearchCallSearching),
1503 #[serde(rename = "response.file_search_call.completed")]
1505 ResponseFileSearchCallCompleted(ResponseFileSearchCallCompleted),
1506 #[serde(rename = "response.web_search_call.in_progress")]
1508 ResponseWebSearchCallInProgress(ResponseWebSearchCallInProgress),
1509 #[serde(rename = "response.web_search_call.searching")]
1511 ResponseWebSearchCallSearching(ResponseWebSearchCallSearching),
1512 #[serde(rename = "response.web_search_call.completed")]
1514 ResponseWebSearchCallCompleted(ResponseWebSearchCallCompleted),
1515 #[serde(rename = "response.reasoning_summary_part.added")]
1517 ResponseReasoningSummaryPartAdded(ResponseReasoningSummaryPartAdded),
1518 #[serde(rename = "response.reasoning_summary_part.done")]
1520 ResponseReasoningSummaryPartDone(ResponseReasoningSummaryPartDone),
1521 #[serde(rename = "response.reasoning_summary_text.delta")]
1523 ResponseReasoningSummaryTextDelta(ResponseReasoningSummaryTextDelta),
1524 #[serde(rename = "response.reasoning_summary_text.done")]
1526 ResponseReasoningSummaryTextDone(ResponseReasoningSummaryTextDone),
1527 #[serde(rename = "response.reasoning_summary.delta")]
1529 ResponseReasoningSummaryDelta(ResponseReasoningSummaryDelta),
1530 #[serde(rename = "response.reasoning_summary.done")]
1532 ResponseReasoningSummaryDone(ResponseReasoningSummaryDone),
1533 #[serde(rename = "response.image_generation_call.in_progress")]
1535 ResponseImageGenerationCallInProgress(ResponseImageGenerationCallInProgress),
1536 #[serde(rename = "response.image_generation_call.generating")]
1538 ResponseImageGenerationCallGenerating(ResponseImageGenerationCallGenerating),
1539 #[serde(rename = "response.image_generation_call.partial_image")]
1541 ResponseImageGenerationCallPartialImage(ResponseImageGenerationCallPartialImage),
1542 #[serde(rename = "response.image_generation_call.completed")]
1544 ResponseImageGenerationCallCompleted(ResponseImageGenerationCallCompleted),
1545 #[serde(rename = "response.mcp_call_arguments.delta")]
1547 ResponseMcpCallArgumentsDelta(ResponseMcpCallArgumentsDelta),
1548 #[serde(rename = "response.mcp_call_arguments.done")]
1550 ResponseMcpCallArgumentsDone(ResponseMcpCallArgumentsDone),
1551 #[serde(rename = "response.mcp_call.completed")]
1553 ResponseMcpCallCompleted(ResponseMcpCallCompleted),
1554 #[serde(rename = "response.mcp_call.failed")]
1556 ResponseMcpCallFailed(ResponseMcpCallFailed),
1557 #[serde(rename = "response.mcp_call.in_progress")]
1559 ResponseMcpCallInProgress(ResponseMcpCallInProgress),
1560 #[serde(rename = "response.mcp_list_tools.completed")]
1562 ResponseMcpListToolsCompleted(ResponseMcpListToolsCompleted),
1563 #[serde(rename = "response.mcp_list_tools.failed")]
1565 ResponseMcpListToolsFailed(ResponseMcpListToolsFailed),
1566 #[serde(rename = "response.mcp_list_tools.in_progress")]
1568 ResponseMcpListToolsInProgress(ResponseMcpListToolsInProgress),
1569 #[serde(rename = "response.code_interpreter_call.in_progress")]
1571 ResponseCodeInterpreterCallInProgress(ResponseCodeInterpreterCallInProgress),
1572 #[serde(rename = "response.code_interpreter_call.interpreting")]
1574 ResponseCodeInterpreterCallInterpreting(ResponseCodeInterpreterCallInterpreting),
1575 #[serde(rename = "response.code_interpreter_call.completed")]
1577 ResponseCodeInterpreterCallCompleted(ResponseCodeInterpreterCallCompleted),
1578 #[serde(rename = "response.code_interpreter_call_code.delta")]
1580 ResponseCodeInterpreterCallCodeDelta(ResponseCodeInterpreterCallCodeDelta),
1581 #[serde(rename = "response.code_interpreter_call_code.done")]
1583 ResponseCodeInterpreterCallCodeDone(ResponseCodeInterpreterCallCodeDone),
1584 #[serde(rename = "response.output_text.annotation.added")]
1586 ResponseOutputTextAnnotationAdded(ResponseOutputTextAnnotationAdded),
1587 #[serde(rename = "error")]
1589 ResponseError(ResponseError),
1590
1591 #[serde(untagged)]
1593 Unknown(serde_json::Value),
1594}
1595
1596pub type ResponseStream = Pin<Box<dyn Stream<Item = Result<ResponseEvent, OpenAIError>> + Send>>;
1598
1599#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1600#[non_exhaustive]
1601pub struct ResponseCreated {
1602 pub sequence_number: u64,
1603 pub response: ResponseMetadata,
1604}
1605
1606#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1607#[non_exhaustive]
1608pub struct ResponseInProgress {
1609 pub sequence_number: u64,
1610 pub response: ResponseMetadata,
1611}
1612
1613#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1614#[non_exhaustive]
1615pub struct ResponseOutputItemAdded {
1616 pub sequence_number: u64,
1617 pub output_index: u32,
1618 pub item: OutputItem,
1619}
1620
1621#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1622#[non_exhaustive]
1623pub struct ResponseContentPartAdded {
1624 pub sequence_number: u64,
1625 pub item_id: String,
1626 pub output_index: u32,
1627 pub content_index: u32,
1628 pub part: ContentPart,
1629}
1630
1631#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1632#[non_exhaustive]
1633pub struct ResponseOutputTextDelta {
1634 pub sequence_number: u64,
1635 pub item_id: String,
1636 pub output_index: u32,
1637 pub content_index: u32,
1638 pub delta: String,
1639 #[serde(default, skip_serializing_if = "Option::is_none")]
1640 pub logprobs: Option<serde_json::Value>,
1641}
1642
1643#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1644#[non_exhaustive]
1645pub struct ResponseContentPartDone {
1646 pub sequence_number: u64,
1647 pub item_id: String,
1648 pub output_index: u32,
1649 pub content_index: u32,
1650 pub part: ContentPart,
1651}
1652
1653#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1654#[non_exhaustive]
1655pub struct ResponseOutputItemDone {
1656 pub sequence_number: u64,
1657 pub output_index: u32,
1658 pub item: OutputItem,
1659}
1660
1661#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1663#[non_exhaustive]
1664pub struct ResponseCompleted {
1665 pub sequence_number: u64,
1666 pub response: ResponseMetadata,
1667}
1668
1669#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1671#[non_exhaustive]
1672pub struct ResponseFailed {
1673 pub sequence_number: u64,
1674 pub response: ResponseMetadata,
1675}
1676
1677#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1679#[non_exhaustive]
1680pub struct ResponseIncomplete {
1681 pub sequence_number: u64,
1682 pub response: ResponseMetadata,
1683}
1684
1685#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1687#[non_exhaustive]
1688pub struct ResponseQueued {
1689 pub sequence_number: u64,
1690 pub response: ResponseMetadata,
1691}
1692
1693#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1695#[non_exhaustive]
1696pub struct ResponseOutputTextDone {
1697 pub sequence_number: u64,
1698 pub item_id: String,
1699 pub output_index: u32,
1700 pub content_index: u32,
1701 pub text: String,
1702 pub logprobs: Option<Vec<serde_json::Value>>,
1703}
1704
1705#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1707#[non_exhaustive]
1708pub struct ResponseRefusalDelta {
1709 pub sequence_number: u64,
1710 pub item_id: String,
1711 pub output_index: u32,
1712 pub content_index: u32,
1713 pub delta: String,
1714}
1715
1716#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1718#[non_exhaustive]
1719pub struct ResponseRefusalDone {
1720 pub sequence_number: u64,
1721 pub item_id: String,
1722 pub output_index: u32,
1723 pub content_index: u32,
1724 pub refusal: String,
1725}
1726
1727#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1729#[non_exhaustive]
1730pub struct ResponseFunctionCallArgumentsDelta {
1731 pub sequence_number: u64,
1732 pub item_id: String,
1733 pub output_index: u32,
1734 pub delta: String,
1735}
1736
1737#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1739#[non_exhaustive]
1740pub struct ResponseFunctionCallArgumentsDone {
1741 pub sequence_number: u64,
1742 pub item_id: String,
1743 pub output_index: u32,
1744 pub arguments: String,
1745}
1746
1747#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1749#[non_exhaustive]
1750pub struct ResponseError {
1751 pub sequence_number: u64,
1752 pub code: Option<String>,
1753 pub message: String,
1754 pub param: Option<String>,
1755}
1756
1757#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1759#[non_exhaustive]
1760pub struct ResponseFileSearchCallInProgress {
1761 pub sequence_number: u64,
1762 pub output_index: u32,
1763 pub item_id: String,
1764}
1765
1766#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1768#[non_exhaustive]
1769pub struct ResponseFileSearchCallSearching {
1770 pub sequence_number: u64,
1771 pub output_index: u32,
1772 pub item_id: String,
1773}
1774
1775#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1777#[non_exhaustive]
1778pub struct ResponseFileSearchCallCompleted {
1779 pub sequence_number: u64,
1780 pub output_index: u32,
1781 pub item_id: String,
1782}
1783
1784#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1786#[non_exhaustive]
1787pub struct ResponseWebSearchCallInProgress {
1788 pub sequence_number: u64,
1789 pub output_index: u32,
1790 pub item_id: String,
1791}
1792
1793#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1795#[non_exhaustive]
1796pub struct ResponseWebSearchCallSearching {
1797 pub sequence_number: u64,
1798 pub output_index: u32,
1799 pub item_id: String,
1800}
1801
1802#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1804#[non_exhaustive]
1805pub struct ResponseWebSearchCallCompleted {
1806 pub sequence_number: u64,
1807 pub output_index: u32,
1808 pub item_id: String,
1809}
1810
1811#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1813#[non_exhaustive]
1814pub struct ResponseReasoningSummaryPartAdded {
1815 pub sequence_number: u64,
1816 pub item_id: String,
1817 pub output_index: u32,
1818 pub summary_index: u32,
1819 pub part: serde_json::Value, }
1821
1822#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1824#[non_exhaustive]
1825pub struct ResponseReasoningSummaryPartDone {
1826 pub sequence_number: u64,
1827 pub item_id: String,
1828 pub output_index: u32,
1829 pub summary_index: u32,
1830 pub part: serde_json::Value,
1831}
1832
1833#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1835#[non_exhaustive]
1836pub struct ResponseReasoningSummaryTextDelta {
1837 pub sequence_number: u64,
1838 pub item_id: String,
1839 pub output_index: u32,
1840 pub summary_index: u32,
1841 pub delta: String,
1842}
1843
1844#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1846#[non_exhaustive]
1847pub struct ResponseReasoningSummaryTextDone {
1848 pub sequence_number: u64,
1849 pub item_id: String,
1850 pub output_index: u32,
1851 pub summary_index: u32,
1852 pub text: String,
1853}
1854
1855#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1857#[non_exhaustive]
1858pub struct ResponseReasoningSummaryDelta {
1859 pub sequence_number: u64,
1860 pub item_id: String,
1861 pub output_index: u32,
1862 pub summary_index: u32,
1863 pub delta: serde_json::Value,
1864}
1865
1866#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1868#[non_exhaustive]
1869pub struct ResponseReasoningSummaryDone {
1870 pub sequence_number: u64,
1871 pub item_id: String,
1872 pub output_index: u32,
1873 pub summary_index: u32,
1874 pub text: String,
1875}
1876
1877#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1879#[non_exhaustive]
1880pub struct ResponseImageGenerationCallInProgress {
1881 pub sequence_number: u64,
1882 pub output_index: u32,
1883 pub item_id: String,
1884}
1885
1886#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1888#[non_exhaustive]
1889pub struct ResponseImageGenerationCallGenerating {
1890 pub sequence_number: u64,
1891 pub output_index: u32,
1892 pub item_id: String,
1893}
1894
1895#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1897#[non_exhaustive]
1898pub struct ResponseImageGenerationCallPartialImage {
1899 pub sequence_number: u64,
1900 pub output_index: u32,
1901 pub item_id: String,
1902 pub partial_image_index: u32,
1903 pub partial_image_b64: String,
1904}
1905
1906#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1908#[non_exhaustive]
1909pub struct ResponseImageGenerationCallCompleted {
1910 pub sequence_number: u64,
1911 pub output_index: u32,
1912 pub item_id: String,
1913}
1914
1915#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1917#[non_exhaustive]
1918pub struct ResponseMcpCallArgumentsDelta {
1919 pub sequence_number: u64,
1920 pub output_index: u32,
1921 pub item_id: String,
1922 pub delta: String,
1923}
1924
1925#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1927#[non_exhaustive]
1928pub struct ResponseMcpCallArgumentsDone {
1929 pub sequence_number: u64,
1930 pub output_index: u32,
1931 pub item_id: String,
1932 pub arguments: String,
1933}
1934
1935#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1937#[non_exhaustive]
1938pub struct ResponseMcpCallCompleted {
1939 pub sequence_number: u64,
1940 pub output_index: u32,
1941 pub item_id: String,
1942}
1943
1944#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1946#[non_exhaustive]
1947pub struct ResponseMcpCallFailed {
1948 pub sequence_number: u64,
1949 pub output_index: u32,
1950 pub item_id: String,
1951}
1952
1953#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1955#[non_exhaustive]
1956pub struct ResponseMcpCallInProgress {
1957 pub sequence_number: u64,
1958 pub output_index: u32,
1959 pub item_id: String,
1960}
1961
1962#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1964#[non_exhaustive]
1965pub struct ResponseMcpListToolsCompleted {
1966 pub sequence_number: u64,
1967 pub output_index: u32,
1968 pub item_id: String,
1969}
1970
1971#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1973#[non_exhaustive]
1974pub struct ResponseMcpListToolsFailed {
1975 pub sequence_number: u64,
1976 pub output_index: u32,
1977 pub item_id: String,
1978}
1979
1980#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1982#[non_exhaustive]
1983pub struct ResponseMcpListToolsInProgress {
1984 pub sequence_number: u64,
1985 pub output_index: u32,
1986 pub item_id: String,
1987}
1988
1989#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
1991#[non_exhaustive]
1992pub struct ResponseCodeInterpreterCallInProgress {
1993 pub sequence_number: u64,
1994 pub output_index: u32,
1995 pub item_id: String,
1996}
1997
1998#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2000#[non_exhaustive]
2001pub struct ResponseCodeInterpreterCallInterpreting {
2002 pub sequence_number: u64,
2003 pub output_index: u32,
2004 pub item_id: String,
2005}
2006
2007#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2009#[non_exhaustive]
2010pub struct ResponseCodeInterpreterCallCompleted {
2011 pub sequence_number: u64,
2012 pub output_index: u32,
2013 pub item_id: String,
2014}
2015
2016#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2018#[non_exhaustive]
2019pub struct ResponseCodeInterpreterCallCodeDelta {
2020 pub sequence_number: u64,
2021 pub output_index: u32,
2022 pub item_id: String,
2023 pub delta: String,
2024}
2025
2026#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2028#[non_exhaustive]
2029pub struct ResponseCodeInterpreterCallCodeDone {
2030 pub sequence_number: u64,
2031 pub output_index: u32,
2032 pub item_id: String,
2033 pub code: String,
2034}
2035
2036#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2038#[non_exhaustive]
2039pub struct ResponseMetadata {
2040 pub id: String,
2041 #[serde(skip_serializing_if = "Option::is_none")]
2042 pub object: Option<String>,
2043 pub created_at: u64,
2044 pub status: Status,
2045 #[serde(skip_serializing_if = "Option::is_none")]
2046 pub model: Option<String>,
2047 #[serde(skip_serializing_if = "Option::is_none")]
2048 pub usage: Option<Usage>,
2049 #[serde(skip_serializing_if = "Option::is_none")]
2050 pub error: Option<ErrorObject>,
2051 #[serde(skip_serializing_if = "Option::is_none")]
2052 pub incomplete_details: Option<IncompleteDetails>,
2053 #[serde(skip_serializing_if = "Option::is_none")]
2054 pub input: Option<Input>,
2055 #[serde(skip_serializing_if = "Option::is_none")]
2056 pub instructions: Option<String>,
2057 #[serde(skip_serializing_if = "Option::is_none")]
2058 pub max_output_tokens: Option<u32>,
2059 #[serde(skip_serializing_if = "Option::is_none")]
2061 pub background: Option<bool>,
2062 #[serde(skip_serializing_if = "Option::is_none")]
2064 pub service_tier: Option<ServiceTier>,
2065 #[serde(skip_serializing_if = "Option::is_none")]
2067 pub top_logprobs: Option<u32>,
2068 #[serde(skip_serializing_if = "Option::is_none")]
2070 pub max_tool_calls: Option<u32>,
2071 #[serde(skip_serializing_if = "Option::is_none")]
2072 pub output: Option<Vec<OutputItem>>,
2073 #[serde(skip_serializing_if = "Option::is_none")]
2074 pub parallel_tool_calls: Option<bool>,
2075 #[serde(skip_serializing_if = "Option::is_none")]
2076 pub previous_response_id: Option<String>,
2077 #[serde(skip_serializing_if = "Option::is_none")]
2078 pub reasoning: Option<ReasoningConfig>,
2079 #[serde(skip_serializing_if = "Option::is_none")]
2080 pub store: Option<bool>,
2081 #[serde(skip_serializing_if = "Option::is_none")]
2082 pub temperature: Option<f32>,
2083 #[serde(skip_serializing_if = "Option::is_none")]
2084 pub text: Option<TextConfig>,
2085 #[serde(skip_serializing_if = "Option::is_none")]
2086 pub tool_choice: Option<ToolChoice>,
2087 #[serde(skip_serializing_if = "Option::is_none")]
2088 pub tools: Option<Vec<ToolDefinition>>,
2089 #[serde(skip_serializing_if = "Option::is_none")]
2090 pub top_p: Option<f32>,
2091 #[serde(skip_serializing_if = "Option::is_none")]
2092 pub truncation: Option<Truncation>,
2093 #[serde(skip_serializing_if = "Option::is_none")]
2094 pub user: Option<String>,
2095 #[serde(skip_serializing_if = "Option::is_none")]
2096 pub metadata: Option<HashMap<String, String>>,
2097 #[serde(skip_serializing_if = "Option::is_none")]
2099 pub prompt_cache_key: Option<String>,
2100 #[serde(skip_serializing_if = "Option::is_none")]
2102 pub safety_identifier: Option<String>,
2103}
2104
2105#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2107#[non_exhaustive]
2108pub struct OutputItem {
2109 pub id: String,
2110 #[serde(rename = "type")]
2111 pub item_type: String,
2112 #[serde(skip_serializing_if = "Option::is_none")]
2113 pub status: Option<String>,
2114 #[serde(skip_serializing_if = "Option::is_none")]
2115 pub content: Option<Vec<ContentPart>>,
2116 #[serde(skip_serializing_if = "Option::is_none")]
2117 pub role: Option<String>,
2118 #[serde(skip_serializing_if = "Option::is_none")]
2120 pub summary: Option<Vec<serde_json::Value>>,
2121}
2122
2123#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2125#[non_exhaustive]
2126pub struct ContentPart {
2127 #[serde(rename = "type")]
2128 pub part_type: String,
2129 pub text: Option<String>,
2130 #[serde(default, skip_serializing_if = "Option::is_none")]
2131 pub annotations: Option<Vec<serde_json::Value>>,
2132 #[serde(default, skip_serializing_if = "Option::is_none")]
2133 pub logprobs: Option<Vec<serde_json::Value>>,
2134}
2135
2136#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2142#[non_exhaustive]
2143pub struct ResponseOutputTextAnnotationAdded {
2144 pub sequence_number: u64,
2145 pub item_id: String,
2146 pub output_index: u32,
2147 pub content_index: u32,
2148 pub annotation_index: u32,
2149 pub annotation: TextAnnotation,
2150}
2151
2152#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
2154#[non_exhaustive]
2155pub struct TextAnnotation {
2156 #[serde(rename = "type")]
2157 pub annotation_type: String,
2158 pub text: String,
2159 pub start: u32,
2160 pub end: u32,
2161}