openai 0.99.0 → 0.101.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/README.md +1 -1
- data/bedrock.md +17 -1
- data/lib/openai/client.rb +13 -0
- data/lib/openai/helpers/agents/session_stream.rb +11 -36
- data/lib/openai/helpers/agents/tools.rb +34 -4
- data/lib/openai/helpers/beta/agents/creation_stream.rb +26 -0
- data/lib/openai/helpers/beta/agents/function_tool.rb +11 -4
- data/lib/openai/helpers/beta/agents/tool_dispatcher.rb +74 -0
- data/lib/openai/helpers/beta/agents/tool_error.rb +28 -0
- data/lib/openai/models/admin/organization/usage_audio_speeches_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_audio_transcriptions_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_code_interpreter_sessions_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_completions_params.rb +9 -4
- data/lib/openai/models/admin/organization/usage_completions_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_costs_params.rb +16 -4
- data/lib/openai/models/admin/organization/usage_costs_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_embeddings_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_file_search_calls_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_images_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_moderations_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_vector_stores_response.rb +125 -3
- data/lib/openai/models/admin/organization/usage_web_search_calls_params.rb +9 -4
- data/lib/openai/models/admin/organization/usage_web_search_calls_response.rb +125 -3
- data/lib/openai/models/beta/agents/environments/template_create_params.rb +6 -6
- data/lib/openai/models/beta/agents/environments/template_update_params.rb +3 -6
- data/lib/openai/models/beta/agents/sessions/turns/item_list_params.rb +79 -0
- data/lib/openai/models/beta/beta_response_computer_tool_call_output_item.rb +2 -2
- data/lib/openai/models/beta/beta_response_error.rb +12 -1
- data/lib/openai/models/beta/beta_response_tool_search_output_item_param.rb +1166 -3
- data/lib/openai/models/beta/beta_responses_server_event.rb +12 -1
- data/lib/openai/models/beta/beta_tool.rb +12 -9
- data/lib/openai/models/beta/beta_tool_search_output_namespace_tool.rb +176 -0
- data/lib/openai/models/beta/environment_param.rb +6 -6
- data/lib/openai/models/beta/session_turn_error.rb +9 -0
- data/lib/openai/models/chat/chat_completion_chunk.rb +85 -18
- data/lib/openai/models/decision.rb +313 -0
- data/lib/openai/models/decision_create_params.rb +233 -0
- data/lib/openai/models/decision_input_image.rb +53 -0
- data/lib/openai/models/decision_input_message.rb +60 -0
- data/lib/openai/models/decision_input_part.rb +20 -0
- data/lib/openai/models/decision_input_text.rb +21 -0
- data/lib/openai/models/error_object.rb +12 -1
- data/lib/openai/models/eval_create_params.rb +1 -1
- data/lib/openai/models/eval_create_response.rb +1 -1
- data/lib/openai/models/eval_list_response.rb +1 -1
- data/lib/openai/models/eval_retrieve_response.rb +1 -1
- data/lib/openai/models/eval_update_response.rb +1 -1
- data/lib/openai/models/fine_tuning/job_list_params.rb +14 -4
- data/lib/openai/models/graders/score_model_grader.rb +2 -2
- data/lib/openai/models/image_edit_params.rb +12 -9
- data/lib/openai/models/realtime/realtime_client_event.rb +9 -0
- data/lib/openai/models/realtime/session_update_event.rb +16 -0
- data/lib/openai/models/responses/response_computer_tool_call_output_item.rb +2 -2
- data/lib/openai/models/responses/response_error.rb +12 -1
- data/lib/openai/models/responses/response_tool_search_output_item_param.rb +1166 -3
- data/lib/openai/models/responses/responses_server_event.rb +12 -1
- data/lib/openai/models/responses/tool.rb +12 -9
- data/lib/openai/models/responses/tool_search_output_namespace_tool.rb +174 -0
- data/lib/openai/models/video_create_error.rb +12 -1
- data/lib/openai/models.rb +12 -0
- data/lib/openai/providers/bedrock.rb +20 -1
- data/lib/openai/resources/admin/organization/usage.rb +15 -6
- data/lib/openai/resources/beta/agents/environments/templates.rb +3 -4
- data/lib/openai/resources/beta/agents/sessions/turns/items.rb +68 -0
- data/lib/openai/resources/beta/agents/sessions/turns.rb +4 -0
- data/lib/openai/resources/beta/agents/sessions.rb +22 -2
- data/lib/openai/resources/decisions.rb +59 -0
- data/lib/openai/resources/fine_tuning/jobs.rb +7 -2
- data/lib/openai/resources/images.rb +8 -6
- data/lib/openai/version.rb +1 -1
- data/lib/openai.rb +11 -0
- data/rbi/openai/client.rbi +3 -0
- data/rbi/openai/helpers/agents.rbi +2 -0
- data/rbi/openai/helpers/beta/agents/function_tool.rbi +8 -3
- data/rbi/openai/helpers/beta/agents/tool_error.rbi +19 -0
- data/rbi/openai/helpers/beta/agents.rbi +12 -0
- data/rbi/openai/models/admin/organization/usage_audio_speeches_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_audio_transcriptions_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_code_interpreter_sessions_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_completions_params.rbi +9 -4
- data/rbi/openai/models/admin/organization/usage_completions_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_costs_params.rbi +16 -4
- data/rbi/openai/models/admin/organization/usage_costs_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_embeddings_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_file_search_calls_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_images_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_moderations_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_vector_stores_response.rbi +194 -1
- data/rbi/openai/models/admin/organization/usage_web_search_calls_params.rbi +12 -4
- data/rbi/openai/models/admin/organization/usage_web_search_calls_response.rbi +194 -1
- data/rbi/openai/models/beta/agents/environments/template_create_params.rbi +6 -6
- data/rbi/openai/models/beta/agents/environments/template_update_params.rbi +3 -6
- data/rbi/openai/models/beta/agents/sessions/turns/item_list_params.rbi +139 -0
- data/rbi/openai/models/beta/beta_response_computer_tool_call_output_item.rbi +2 -2
- data/rbi/openai/models/beta/beta_response_error.rbi +12 -0
- data/rbi/openai/models/beta/beta_response_tool_search_output_item_param.rbi +1893 -18
- data/rbi/openai/models/beta/beta_responses_server_event.rbi +12 -0
- data/rbi/openai/models/beta/beta_tool.rbi +12 -9
- data/rbi/openai/models/beta/beta_tool_search_output_namespace_tool.rbi +272 -0
- data/rbi/openai/models/beta/environment_param.rbi +6 -6
- data/rbi/openai/models/beta/session_turn_error.rbi +18 -0
- data/rbi/openai/models/chat/chat_completion_chunk.rbi +123 -17
- data/rbi/openai/models/decision.rbi +586 -0
- data/rbi/openai/models/decision_create_params.rbi +435 -0
- data/rbi/openai/models/decision_input_image.rbi +81 -0
- data/rbi/openai/models/decision_input_message.rbi +96 -0
- data/rbi/openai/models/decision_input_part.rbi +24 -0
- data/rbi/openai/models/decision_input_text.rbi +49 -0
- data/rbi/openai/models/error_object.rbi +12 -0
- data/rbi/openai/models/eval_create_params.rbi +1 -1
- data/rbi/openai/models/eval_create_response.rbi +1 -1
- data/rbi/openai/models/eval_list_response.rbi +1 -1
- data/rbi/openai/models/eval_retrieve_response.rbi +1 -1
- data/rbi/openai/models/eval_update_response.rbi +1 -1
- data/rbi/openai/models/fine_tuning/job_list_params.rbi +14 -4
- data/rbi/openai/models/graders/score_model_grader.rbi +2 -2
- data/rbi/openai/models/image_edit_params.rbi +12 -9
- data/rbi/openai/models/realtime/session_update_event.rbi +16 -0
- data/rbi/openai/models/responses/response_computer_tool_call_output_item.rbi +2 -2
- data/rbi/openai/models/responses/response_error.rbi +12 -0
- data/rbi/openai/models/responses/response_tool_search_output_item_param.rbi +1901 -18
- data/rbi/openai/models/responses/responses_server_event.rbi +12 -0
- data/rbi/openai/models/responses/tool.rbi +12 -9
- data/rbi/openai/models/responses/tool_search_output_namespace_tool.rbi +272 -0
- data/rbi/openai/models/video_create_error.rbi +12 -0
- data/rbi/openai/models.rbi +12 -0
- data/rbi/openai/resources/admin/organization/usage.rbi +15 -6
- data/rbi/openai/resources/beta/agents/environments/templates.rbi +3 -4
- data/rbi/openai/resources/beta/agents/sessions/turns/items.rbi +62 -0
- data/rbi/openai/resources/beta/agents/sessions/turns.rbi +3 -0
- data/rbi/openai/resources/beta/agents/sessions.rbi +2 -0
- data/rbi/openai/resources/decisions.rbi +57 -0
- data/rbi/openai/resources/fine_tuning/jobs.rbi +7 -2
- data/rbi/openai/resources/images.rbi +8 -6
- data/sig/openai/client.rbs +2 -0
- data/sig/openai/helpers/agents.rbs +3 -0
- data/sig/openai/helpers/beta/agents/function_tool.rbs +5 -2
- data/sig/openai/helpers/beta/agents/tool_error.rbs +17 -0
- data/sig/openai/helpers/beta/agents.rbs +5 -0
- data/sig/openai/models/admin/organization/usage_audio_speeches_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_audio_transcriptions_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_code_interpreter_sessions_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_completions_params.rbs +14 -6
- data/sig/openai/models/admin/organization/usage_completions_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_costs_params.rbs +25 -7
- data/sig/openai/models/admin/organization/usage_costs_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_embeddings_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_file_search_calls_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_images_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_moderations_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_vector_stores_response.rbs +87 -2
- data/sig/openai/models/admin/organization/usage_web_search_calls_params.rbs +19 -7
- data/sig/openai/models/admin/organization/usage_web_search_calls_response.rbs +87 -2
- data/sig/openai/models/beta/agents/environments/template_create_params.rbs +4 -4
- data/sig/openai/models/beta/agents/environments/template_update_params.rbs +2 -4
- data/sig/openai/models/beta/agents/sessions/turns/item_list_params.rbs +91 -0
- data/sig/openai/models/beta/beta_response_computer_tool_call_output_item.rbs +2 -2
- data/sig/openai/models/beta/beta_response_error.rbs +10 -0
- data/sig/openai/models/beta/beta_response_tool_search_output_item_param.rbs +993 -4
- data/sig/openai/models/beta/beta_responses_server_event.rbs +10 -0
- data/sig/openai/models/beta/beta_tool.rbs +8 -6
- data/sig/openai/models/beta/beta_tool_search_output_namespace_tool.rbs +162 -0
- data/sig/openai/models/beta/environment_param.rbs +4 -4
- data/sig/openai/models/beta/session_turn_error.rbs +12 -0
- data/sig/openai/models/chat/chat_completion_chunk.rbs +96 -12
- data/sig/openai/models/decision.rbs +296 -0
- data/sig/openai/models/decision_create_params.rbs +227 -0
- data/sig/openai/models/decision_input_image.rbs +51 -0
- data/sig/openai/models/decision_input_message.rbs +57 -0
- data/sig/openai/models/decision_input_part.rbs +12 -0
- data/sig/openai/models/decision_input_text.rbs +15 -0
- data/sig/openai/models/error_object.rbs +10 -0
- data/sig/openai/models/eval_create_params.rbs +1 -1
- data/sig/openai/models/eval_create_response.rbs +1 -1
- data/sig/openai/models/eval_list_response.rbs +1 -1
- data/sig/openai/models/eval_retrieve_response.rbs +1 -1
- data/sig/openai/models/eval_update_response.rbs +1 -1
- data/sig/openai/models/fine_tuning/job_list_params.rbs +14 -4
- data/sig/openai/models/graders/score_model_grader.rbs +3 -3
- data/sig/openai/models/image_edit_params.rbs +8 -6
- data/sig/openai/models/responses/response_computer_tool_call_output_item.rbs +2 -2
- data/sig/openai/models/responses/response_error.rbs +10 -0
- data/sig/openai/models/responses/response_tool_search_output_item_param.rbs +993 -4
- data/sig/openai/models/responses/responses_server_event.rbs +10 -0
- data/sig/openai/models/responses/tool.rbs +8 -6
- data/sig/openai/models/responses/tool_search_output_namespace_tool.rbs +160 -0
- data/sig/openai/models/video_create_error.rbs +10 -0
- data/sig/openai/models.rbs +12 -0
- data/sig/openai/resources/beta/agents/sessions/turns/items.rbs +24 -0
- data/sig/openai/resources/beta/agents/sessions/turns.rbs +2 -0
- data/sig/openai/resources/beta/agents/sessions.rbs +1 -0
- data/sig/openai/resources/decisions.rbs +15 -0
- metadata +38 -1
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
module OpenAI
|
|
2
|
+
module Models
|
|
3
|
+
type decision =
|
|
4
|
+
{
|
|
5
|
+
answers: ::Array[OpenAI::Models::Decision::answer],
|
|
6
|
+
model: String,
|
|
7
|
+
usage: OpenAI::Decision::Usage
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
class Decision < OpenAI::Internal::Type::BaseModel
|
|
11
|
+
attr_accessor answers: ::Array[OpenAI::Models::Decision::answer]
|
|
12
|
+
|
|
13
|
+
attr_accessor model: String
|
|
14
|
+
|
|
15
|
+
attr_accessor usage: OpenAI::Decision::Usage
|
|
16
|
+
|
|
17
|
+
def initialize: (
|
|
18
|
+
answers: ::Array[OpenAI::Models::Decision::answer],
|
|
19
|
+
model: String,
|
|
20
|
+
usage: OpenAI::Decision::Usage
|
|
21
|
+
) -> void
|
|
22
|
+
|
|
23
|
+
def to_hash: -> {
|
|
24
|
+
answers: ::Array[OpenAI::Models::Decision::answer],
|
|
25
|
+
model: String,
|
|
26
|
+
usage: OpenAI::Decision::Usage
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type answer =
|
|
30
|
+
OpenAI::Decision::Answer::Predicate
|
|
31
|
+
| OpenAI::Decision::Answer::Choice
|
|
32
|
+
| OpenAI::Decision::Answer::Score
|
|
33
|
+
| OpenAI::Decision::Answer::Refusal
|
|
34
|
+
|
|
35
|
+
module Answer
|
|
36
|
+
extend OpenAI::Internal::Type::Union
|
|
37
|
+
|
|
38
|
+
type predicate =
|
|
39
|
+
{ name: String?, probability: Float, ?type: :predicate }
|
|
40
|
+
|
|
41
|
+
class Predicate < OpenAI::Internal::Type::BaseModel
|
|
42
|
+
attr_accessor name: String?
|
|
43
|
+
|
|
44
|
+
attr_accessor probability: Float
|
|
45
|
+
|
|
46
|
+
# The type of the object. Always `predicate`.
|
|
47
|
+
attr_accessor type: :predicate
|
|
48
|
+
|
|
49
|
+
# @param type
|
|
50
|
+
# The type of the object. Always `predicate`.
|
|
51
|
+
def initialize: (
|
|
52
|
+
name: String?,
|
|
53
|
+
probability: Float,
|
|
54
|
+
?type: :predicate
|
|
55
|
+
) -> void
|
|
56
|
+
|
|
57
|
+
def to_hash: -> {
|
|
58
|
+
name: String?,
|
|
59
|
+
probability: Float,
|
|
60
|
+
?type: :predicate
|
|
61
|
+
}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
type choice =
|
|
65
|
+
{
|
|
66
|
+
choice: OpenAI::Models::Decision::Answer::Choice::choice,
|
|
67
|
+
confidence: Float,
|
|
68
|
+
name: String?,
|
|
69
|
+
probabilities: ::Array[OpenAI::Decision::Answer::Choice::Probability],
|
|
70
|
+
?type: :choice
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
class Choice < OpenAI::Internal::Type::BaseModel
|
|
74
|
+
# Choice values are typed: a string and a boolean with the same text are distinct.
|
|
75
|
+
attr_accessor choice: OpenAI::Models::Decision::Answer::Choice::choice
|
|
76
|
+
|
|
77
|
+
attr_accessor confidence: Float
|
|
78
|
+
|
|
79
|
+
attr_accessor name: String?
|
|
80
|
+
|
|
81
|
+
attr_accessor probabilities: ::Array[OpenAI::Decision::Answer::Choice::Probability]
|
|
82
|
+
|
|
83
|
+
# The type of the object. Always `choice`.
|
|
84
|
+
attr_accessor type: :choice
|
|
85
|
+
|
|
86
|
+
# @param choice
|
|
87
|
+
# Choice values are typed: a string and a boolean with the same text are distinct.
|
|
88
|
+
# @param type
|
|
89
|
+
# The type of the object. Always `choice`.
|
|
90
|
+
def initialize: (
|
|
91
|
+
choice: OpenAI::Models::Decision::Answer::Choice::choice,
|
|
92
|
+
confidence: Float,
|
|
93
|
+
name: String?,
|
|
94
|
+
probabilities: ::Array[OpenAI::Decision::Answer::Choice::Probability],
|
|
95
|
+
?type: :choice
|
|
96
|
+
) -> void
|
|
97
|
+
|
|
98
|
+
def to_hash: -> {
|
|
99
|
+
choice: OpenAI::Models::Decision::Answer::Choice::choice,
|
|
100
|
+
confidence: Float,
|
|
101
|
+
name: String?,
|
|
102
|
+
probabilities: ::Array[OpenAI::Decision::Answer::Choice::Probability],
|
|
103
|
+
?type: :choice
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
type choice = String | bool
|
|
107
|
+
|
|
108
|
+
module Choice
|
|
109
|
+
extend OpenAI::Internal::Type::Union
|
|
110
|
+
|
|
111
|
+
def self?.variants: -> ::Array[OpenAI::Models::Decision::Answer::Choice::choice]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
type probability =
|
|
115
|
+
{
|
|
116
|
+
probability: Float,
|
|
117
|
+
value: OpenAI::Models::Decision::Answer::Choice::Probability::value
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
class Probability < OpenAI::Internal::Type::BaseModel
|
|
121
|
+
attr_accessor probability: Float
|
|
122
|
+
|
|
123
|
+
# Choice values are typed: a string and a boolean with the same text are distinct.
|
|
124
|
+
attr_accessor value: OpenAI::Models::Decision::Answer::Choice::Probability::value
|
|
125
|
+
|
|
126
|
+
# @param value
|
|
127
|
+
# Choice values are typed: a string and a boolean with the same text are distinct.
|
|
128
|
+
def initialize: (
|
|
129
|
+
probability: Float,
|
|
130
|
+
value: OpenAI::Models::Decision::Answer::Choice::Probability::value
|
|
131
|
+
) -> void
|
|
132
|
+
|
|
133
|
+
def to_hash: -> {
|
|
134
|
+
probability: Float,
|
|
135
|
+
value: OpenAI::Models::Decision::Answer::Choice::Probability::value
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
type value = String | bool
|
|
139
|
+
|
|
140
|
+
module Value
|
|
141
|
+
extend OpenAI::Internal::Type::Union
|
|
142
|
+
|
|
143
|
+
def self?.variants: -> ::Array[OpenAI::Models::Decision::Answer::Choice::Probability::value]
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
type score =
|
|
149
|
+
{
|
|
150
|
+
confidence: Float,
|
|
151
|
+
name: String?,
|
|
152
|
+
probabilities: ::Array[OpenAI::Decision::Answer::Score::Probability],
|
|
153
|
+
score: Float,
|
|
154
|
+
?type: :score
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
class Score < OpenAI::Internal::Type::BaseModel
|
|
158
|
+
attr_accessor confidence: Float
|
|
159
|
+
|
|
160
|
+
attr_accessor name: String?
|
|
161
|
+
|
|
162
|
+
attr_accessor probabilities: ::Array[OpenAI::Decision::Answer::Score::Probability]
|
|
163
|
+
|
|
164
|
+
attr_accessor score: Float
|
|
165
|
+
|
|
166
|
+
# The type of the object. Always `score`.
|
|
167
|
+
attr_accessor type: :score
|
|
168
|
+
|
|
169
|
+
# @param type
|
|
170
|
+
# The type of the object. Always `score`.
|
|
171
|
+
def initialize: (
|
|
172
|
+
confidence: Float,
|
|
173
|
+
name: String?,
|
|
174
|
+
probabilities: ::Array[OpenAI::Decision::Answer::Score::Probability],
|
|
175
|
+
score: Float,
|
|
176
|
+
?type: :score
|
|
177
|
+
) -> void
|
|
178
|
+
|
|
179
|
+
def to_hash: -> {
|
|
180
|
+
confidence: Float,
|
|
181
|
+
name: String?,
|
|
182
|
+
probabilities: ::Array[OpenAI::Decision::Answer::Score::Probability],
|
|
183
|
+
score: Float,
|
|
184
|
+
?type: :score
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
type probability =
|
|
188
|
+
{ label: String, probability: Float, value: Integer }
|
|
189
|
+
|
|
190
|
+
class Probability < OpenAI::Internal::Type::BaseModel
|
|
191
|
+
attr_accessor label: String
|
|
192
|
+
|
|
193
|
+
attr_accessor probability: Float
|
|
194
|
+
|
|
195
|
+
attr_accessor value: Integer
|
|
196
|
+
|
|
197
|
+
def initialize: (
|
|
198
|
+
label: String,
|
|
199
|
+
probability: Float,
|
|
200
|
+
value: Integer
|
|
201
|
+
) -> void
|
|
202
|
+
|
|
203
|
+
def to_hash: -> {
|
|
204
|
+
label: String,
|
|
205
|
+
probability: Float,
|
|
206
|
+
value: Integer
|
|
207
|
+
}
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
type refusal = { name: String?, ?type: :refusal }
|
|
212
|
+
|
|
213
|
+
class Refusal < OpenAI::Internal::Type::BaseModel
|
|
214
|
+
attr_accessor name: String?
|
|
215
|
+
|
|
216
|
+
# The type of the object. Always `refusal`.
|
|
217
|
+
attr_accessor type: :refusal
|
|
218
|
+
|
|
219
|
+
# @param type
|
|
220
|
+
# The type of the object. Always `refusal`.
|
|
221
|
+
def initialize: (name: String?, ?type: :refusal) -> void
|
|
222
|
+
|
|
223
|
+
def to_hash: -> { name: String?, ?type: :refusal }
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def self?.variants: -> ::Array[OpenAI::Models::Decision::answer]
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
type usage =
|
|
230
|
+
{
|
|
231
|
+
input_tokens: Integer,
|
|
232
|
+
input_tokens_details: OpenAI::Decision::Usage::InputTokensDetails,
|
|
233
|
+
output_tokens: Integer,
|
|
234
|
+
output_tokens_details: OpenAI::Decision::Usage::OutputTokensDetails,
|
|
235
|
+
total_tokens: Integer
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
class Usage < OpenAI::Internal::Type::BaseModel
|
|
239
|
+
attr_accessor input_tokens: Integer
|
|
240
|
+
|
|
241
|
+
attr_accessor input_tokens_details: OpenAI::Decision::Usage::InputTokensDetails
|
|
242
|
+
|
|
243
|
+
attr_accessor output_tokens: Integer
|
|
244
|
+
|
|
245
|
+
attr_accessor output_tokens_details: OpenAI::Decision::Usage::OutputTokensDetails
|
|
246
|
+
|
|
247
|
+
attr_accessor total_tokens: Integer
|
|
248
|
+
|
|
249
|
+
def initialize: (
|
|
250
|
+
input_tokens: Integer,
|
|
251
|
+
input_tokens_details: OpenAI::Decision::Usage::InputTokensDetails,
|
|
252
|
+
output_tokens: Integer,
|
|
253
|
+
output_tokens_details: OpenAI::Decision::Usage::OutputTokensDetails,
|
|
254
|
+
total_tokens: Integer
|
|
255
|
+
) -> void
|
|
256
|
+
|
|
257
|
+
def to_hash: -> {
|
|
258
|
+
input_tokens: Integer,
|
|
259
|
+
input_tokens_details: OpenAI::Decision::Usage::InputTokensDetails,
|
|
260
|
+
output_tokens: Integer,
|
|
261
|
+
output_tokens_details: OpenAI::Decision::Usage::OutputTokensDetails,
|
|
262
|
+
total_tokens: Integer
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
type input_tokens_details =
|
|
266
|
+
{ cache_write_tokens: Integer, cached_tokens: Integer }
|
|
267
|
+
|
|
268
|
+
class InputTokensDetails < OpenAI::Internal::Type::BaseModel
|
|
269
|
+
attr_accessor cache_write_tokens: Integer
|
|
270
|
+
|
|
271
|
+
attr_accessor cached_tokens: Integer
|
|
272
|
+
|
|
273
|
+
def initialize: (
|
|
274
|
+
cache_write_tokens: Integer,
|
|
275
|
+
cached_tokens: Integer
|
|
276
|
+
) -> void
|
|
277
|
+
|
|
278
|
+
def to_hash: -> {
|
|
279
|
+
cache_write_tokens: Integer,
|
|
280
|
+
cached_tokens: Integer
|
|
281
|
+
}
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
type output_tokens_details = { reasoning_tokens: Integer }
|
|
285
|
+
|
|
286
|
+
class OutputTokensDetails < OpenAI::Internal::Type::BaseModel
|
|
287
|
+
attr_accessor reasoning_tokens: Integer
|
|
288
|
+
|
|
289
|
+
def initialize: (reasoning_tokens: Integer) -> void
|
|
290
|
+
|
|
291
|
+
def to_hash: -> { reasoning_tokens: Integer }
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
module OpenAI
|
|
2
|
+
module Models
|
|
3
|
+
type decision_create_params =
|
|
4
|
+
{
|
|
5
|
+
input: OpenAI::Models::DecisionCreateParams::input,
|
|
6
|
+
model: String,
|
|
7
|
+
questions: ::Array[OpenAI::Models::DecisionCreateParams::question],
|
|
8
|
+
?safety_identifier: String?,
|
|
9
|
+
?request_options: OpenAI::request_opts
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
class DecisionCreateParams < OpenAI::Internal::Type::BaseModel
|
|
13
|
+
extend OpenAI::Internal::Type::RequestParameters::Converter
|
|
14
|
+
include OpenAI::Internal::Type::RequestParameters
|
|
15
|
+
|
|
16
|
+
# Shared evidence, as a string or an array of user messages containing text and
|
|
17
|
+
# inline images. Non-user roles, function calls, function-call outputs, files,
|
|
18
|
+
# audio, and item references are not supported. At most 128 image parts are
|
|
19
|
+
# allowed across all messages in one request.
|
|
20
|
+
attr_accessor input: OpenAI::Models::DecisionCreateParams::input
|
|
21
|
+
|
|
22
|
+
attr_accessor model: String
|
|
23
|
+
|
|
24
|
+
attr_accessor questions: ::Array[OpenAI::Models::DecisionCreateParams::question]
|
|
25
|
+
|
|
26
|
+
# Opaque caller-provided end-user identifier, scoped by the verified org. Match
|
|
27
|
+
# Responses' limit; this is never the authenticated user identity.
|
|
28
|
+
attr_accessor safety_identifier: String?
|
|
29
|
+
|
|
30
|
+
# @param input
|
|
31
|
+
# Shared evidence, as a string or an array of user messages containing text and
|
|
32
|
+
# inline images. Non-user roles, function calls, function-call outputs, files,
|
|
33
|
+
# audio, and item references are not supported. At most 128 image parts are
|
|
34
|
+
# allowed across all messages in one request.
|
|
35
|
+
# @param safety_identifier
|
|
36
|
+
# Opaque caller-provided end-user identifier, scoped by the verified org. Match
|
|
37
|
+
# Responses' limit; this is never the authenticated user identity.
|
|
38
|
+
def initialize: (
|
|
39
|
+
input: OpenAI::Models::DecisionCreateParams::input,
|
|
40
|
+
model: String,
|
|
41
|
+
questions: ::Array[OpenAI::Models::DecisionCreateParams::question],
|
|
42
|
+
?safety_identifier: String?,
|
|
43
|
+
?request_options: OpenAI::request_opts
|
|
44
|
+
) -> void
|
|
45
|
+
|
|
46
|
+
def to_hash: -> {
|
|
47
|
+
input: OpenAI::Models::DecisionCreateParams::input,
|
|
48
|
+
model: String,
|
|
49
|
+
questions: ::Array[OpenAI::Models::DecisionCreateParams::question],
|
|
50
|
+
?safety_identifier: String?,
|
|
51
|
+
?request_options: OpenAI::RequestOptions
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
type input = String | ::Array[OpenAI::DecisionInputMessage]
|
|
55
|
+
|
|
56
|
+
module Input
|
|
57
|
+
extend OpenAI::Internal::Type::Union
|
|
58
|
+
|
|
59
|
+
def self?.variants: -> ::Array[OpenAI::Models::DecisionCreateParams::input]
|
|
60
|
+
|
|
61
|
+
DecisionInputMessageArray: OpenAI::Internal::Type::Converter
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
type question =
|
|
65
|
+
OpenAI::DecisionCreateParams::Question::Predicate
|
|
66
|
+
| OpenAI::DecisionCreateParams::Question::Choice
|
|
67
|
+
| OpenAI::DecisionCreateParams::Question::Score
|
|
68
|
+
|
|
69
|
+
module Question
|
|
70
|
+
extend OpenAI::Internal::Type::Union
|
|
71
|
+
|
|
72
|
+
type predicate =
|
|
73
|
+
{ instructions: String, ?type: :predicate, ?name: String }
|
|
74
|
+
|
|
75
|
+
class Predicate < OpenAI::Internal::Type::BaseModel
|
|
76
|
+
attr_accessor instructions: String
|
|
77
|
+
|
|
78
|
+
# The type of the object. Always `predicate`.
|
|
79
|
+
attr_accessor type: :predicate
|
|
80
|
+
|
|
81
|
+
attr_reader name: String?
|
|
82
|
+
|
|
83
|
+
def name=: (String) -> String
|
|
84
|
+
|
|
85
|
+
# @param type
|
|
86
|
+
# The type of the object. Always `predicate`.
|
|
87
|
+
def initialize: (
|
|
88
|
+
instructions: String,
|
|
89
|
+
?name: String,
|
|
90
|
+
?type: :predicate
|
|
91
|
+
) -> void
|
|
92
|
+
|
|
93
|
+
def to_hash: -> {
|
|
94
|
+
instructions: String,
|
|
95
|
+
?type: :predicate,
|
|
96
|
+
?name: String
|
|
97
|
+
}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
type choice =
|
|
101
|
+
{
|
|
102
|
+
choices: ::Array[OpenAI::DecisionCreateParams::Question::Choice::Choice],
|
|
103
|
+
instructions: String,
|
|
104
|
+
?type: :choice,
|
|
105
|
+
?name: String
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
class Choice < OpenAI::Internal::Type::BaseModel
|
|
109
|
+
attr_accessor choices: ::Array[OpenAI::DecisionCreateParams::Question::Choice::Choice]
|
|
110
|
+
|
|
111
|
+
attr_accessor instructions: String
|
|
112
|
+
|
|
113
|
+
# The type of the object. Always `choice`.
|
|
114
|
+
attr_accessor type: :choice
|
|
115
|
+
|
|
116
|
+
attr_reader name: String?
|
|
117
|
+
|
|
118
|
+
def name=: (String) -> String
|
|
119
|
+
|
|
120
|
+
# @param type
|
|
121
|
+
# The type of the object. Always `choice`.
|
|
122
|
+
def initialize: (
|
|
123
|
+
choices: ::Array[OpenAI::DecisionCreateParams::Question::Choice::Choice],
|
|
124
|
+
instructions: String,
|
|
125
|
+
?name: String,
|
|
126
|
+
?type: :choice
|
|
127
|
+
) -> void
|
|
128
|
+
|
|
129
|
+
def to_hash: -> {
|
|
130
|
+
choices: ::Array[OpenAI::DecisionCreateParams::Question::Choice::Choice],
|
|
131
|
+
instructions: String,
|
|
132
|
+
?type: :choice,
|
|
133
|
+
?name: String
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
type choice =
|
|
137
|
+
{
|
|
138
|
+
value: OpenAI::Models::DecisionCreateParams::Question::Choice::Choice::value,
|
|
139
|
+
?description: String
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
class Choice < OpenAI::Internal::Type::BaseModel
|
|
143
|
+
# Choice values are typed: a string and a boolean with the same text are distinct.
|
|
144
|
+
attr_accessor value: OpenAI::Models::DecisionCreateParams::Question::Choice::Choice::value
|
|
145
|
+
|
|
146
|
+
attr_reader description: String?
|
|
147
|
+
|
|
148
|
+
def description=: (String) -> String
|
|
149
|
+
|
|
150
|
+
# @param value
|
|
151
|
+
# Choice values are typed: a string and a boolean with the same text are distinct.
|
|
152
|
+
def initialize: (
|
|
153
|
+
value: OpenAI::Models::DecisionCreateParams::Question::Choice::Choice::value,
|
|
154
|
+
?description: String
|
|
155
|
+
) -> void
|
|
156
|
+
|
|
157
|
+
def to_hash: -> {
|
|
158
|
+
value: OpenAI::Models::DecisionCreateParams::Question::Choice::Choice::value,
|
|
159
|
+
?description: String
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
type value = String | bool
|
|
163
|
+
|
|
164
|
+
module Value
|
|
165
|
+
extend OpenAI::Internal::Type::Union
|
|
166
|
+
|
|
167
|
+
def self?.variants: -> ::Array[OpenAI::Models::DecisionCreateParams::Question::Choice::Choice::value]
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
type score =
|
|
173
|
+
{
|
|
174
|
+
instructions: String,
|
|
175
|
+
levels: ::Array[OpenAI::DecisionCreateParams::Question::Score::Level],
|
|
176
|
+
?type: :score,
|
|
177
|
+
?name: String
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
class Score < OpenAI::Internal::Type::BaseModel
|
|
181
|
+
attr_accessor instructions: String
|
|
182
|
+
|
|
183
|
+
attr_accessor levels: ::Array[OpenAI::DecisionCreateParams::Question::Score::Level]
|
|
184
|
+
|
|
185
|
+
# The type of the object. Always `score`.
|
|
186
|
+
attr_accessor type: :score
|
|
187
|
+
|
|
188
|
+
attr_reader name: String?
|
|
189
|
+
|
|
190
|
+
def name=: (String) -> String
|
|
191
|
+
|
|
192
|
+
# @param type
|
|
193
|
+
# The type of the object. Always `score`.
|
|
194
|
+
def initialize: (
|
|
195
|
+
instructions: String,
|
|
196
|
+
levels: ::Array[OpenAI::DecisionCreateParams::Question::Score::Level],
|
|
197
|
+
?name: String,
|
|
198
|
+
?type: :score
|
|
199
|
+
) -> void
|
|
200
|
+
|
|
201
|
+
def to_hash: -> {
|
|
202
|
+
instructions: String,
|
|
203
|
+
levels: ::Array[OpenAI::DecisionCreateParams::Question::Score::Level],
|
|
204
|
+
?type: :score,
|
|
205
|
+
?name: String
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
type level = { label: String, ?description: String }
|
|
209
|
+
|
|
210
|
+
class Level < OpenAI::Internal::Type::BaseModel
|
|
211
|
+
attr_accessor label: String
|
|
212
|
+
|
|
213
|
+
attr_reader description: String?
|
|
214
|
+
|
|
215
|
+
def description=: (String) -> String
|
|
216
|
+
|
|
217
|
+
def initialize: (label: String, ?description: String) -> void
|
|
218
|
+
|
|
219
|
+
def to_hash: -> { label: String, ?description: String }
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def self?.variants: -> ::Array[OpenAI::Models::DecisionCreateParams::question]
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module OpenAI
|
|
2
|
+
module Models
|
|
3
|
+
type decision_input_image =
|
|
4
|
+
{
|
|
5
|
+
image_url: String,
|
|
6
|
+
?type: :input_image,
|
|
7
|
+
?detail: OpenAI::Models::DecisionInputImage::detail?
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
class DecisionInputImage < OpenAI::Internal::Type::BaseModel
|
|
11
|
+
# A base64-encoded image in a data URL.
|
|
12
|
+
attr_accessor image_url: String
|
|
13
|
+
|
|
14
|
+
attr_accessor type: :input_image
|
|
15
|
+
|
|
16
|
+
# The image detail level, using the selected model's image profile. Defaults to
|
|
17
|
+
# auto.
|
|
18
|
+
attr_accessor detail: OpenAI::Models::DecisionInputImage::detail?
|
|
19
|
+
|
|
20
|
+
# @param image_url
|
|
21
|
+
# A base64-encoded image in a data URL.
|
|
22
|
+
# @param detail
|
|
23
|
+
# The image detail level, using the selected model's image profile. Defaults to
|
|
24
|
+
# auto.
|
|
25
|
+
def initialize: (
|
|
26
|
+
image_url: String,
|
|
27
|
+
?detail: OpenAI::Models::DecisionInputImage::detail?,
|
|
28
|
+
?type: :input_image
|
|
29
|
+
) -> void
|
|
30
|
+
|
|
31
|
+
def to_hash: -> {
|
|
32
|
+
image_url: String,
|
|
33
|
+
?type: :input_image,
|
|
34
|
+
?detail: OpenAI::Models::DecisionInputImage::detail?
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type detail = :low | :high | :auto | :original
|
|
38
|
+
|
|
39
|
+
module Detail
|
|
40
|
+
extend OpenAI::Internal::Type::Enum
|
|
41
|
+
|
|
42
|
+
LOW: :low
|
|
43
|
+
HIGH: :high
|
|
44
|
+
AUTO: :auto
|
|
45
|
+
ORIGINAL: :original
|
|
46
|
+
|
|
47
|
+
def self?.values: -> ::Array[OpenAI::Models::DecisionInputImage::detail]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module OpenAI
|
|
2
|
+
module Models
|
|
3
|
+
type decision_input_message =
|
|
4
|
+
{
|
|
5
|
+
content: OpenAI::Models::DecisionInputMessage::content,
|
|
6
|
+
?role: :user,
|
|
7
|
+
?type: OpenAI::Models::DecisionInputMessage::type_
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
class DecisionInputMessage < OpenAI::Internal::Type::BaseModel
|
|
11
|
+
# Text evidence or an ordered list of text and inline image parts.
|
|
12
|
+
attr_accessor content: OpenAI::Models::DecisionInputMessage::content
|
|
13
|
+
|
|
14
|
+
attr_accessor role: :user
|
|
15
|
+
|
|
16
|
+
attr_reader type: OpenAI::Models::DecisionInputMessage::type_?
|
|
17
|
+
|
|
18
|
+
def type=: (
|
|
19
|
+
OpenAI::Models::DecisionInputMessage::type_
|
|
20
|
+
) -> OpenAI::Models::DecisionInputMessage::type_
|
|
21
|
+
|
|
22
|
+
# @param content
|
|
23
|
+
# Text evidence or an ordered list of text and inline image parts.
|
|
24
|
+
def initialize: (
|
|
25
|
+
content: OpenAI::Models::DecisionInputMessage::content,
|
|
26
|
+
?type: OpenAI::Models::DecisionInputMessage::type_,
|
|
27
|
+
?role: :user
|
|
28
|
+
) -> void
|
|
29
|
+
|
|
30
|
+
def to_hash: -> {
|
|
31
|
+
content: OpenAI::Models::DecisionInputMessage::content,
|
|
32
|
+
?role: :user,
|
|
33
|
+
?type: OpenAI::Models::DecisionInputMessage::type_
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type content = String | ::Array[OpenAI::Models::decision_input_part]
|
|
37
|
+
|
|
38
|
+
module Content
|
|
39
|
+
extend OpenAI::Internal::Type::Union
|
|
40
|
+
|
|
41
|
+
def self?.variants: -> ::Array[OpenAI::Models::DecisionInputMessage::content]
|
|
42
|
+
|
|
43
|
+
DecisionInputPartArray: OpenAI::Internal::Type::Converter
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
type type_ = :message
|
|
47
|
+
|
|
48
|
+
module Type
|
|
49
|
+
extend OpenAI::Internal::Type::Enum
|
|
50
|
+
|
|
51
|
+
MESSAGE: :message
|
|
52
|
+
|
|
53
|
+
def self?.values: -> ::Array[OpenAI::Models::DecisionInputMessage::type_]
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module OpenAI
|
|
2
|
+
module Models
|
|
3
|
+
type decision_input_part =
|
|
4
|
+
OpenAI::DecisionInputText | OpenAI::DecisionInputImage
|
|
5
|
+
|
|
6
|
+
module DecisionInputPart
|
|
7
|
+
extend OpenAI::Internal::Type::Union
|
|
8
|
+
|
|
9
|
+
def self?.variants: -> ::Array[OpenAI::Models::decision_input_part]
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module OpenAI
|
|
2
|
+
module Models
|
|
3
|
+
type decision_input_text = { text: String, ?type: :input_text }
|
|
4
|
+
|
|
5
|
+
class DecisionInputText < OpenAI::Internal::Type::BaseModel
|
|
6
|
+
attr_accessor text: String
|
|
7
|
+
|
|
8
|
+
attr_accessor type: :input_text
|
|
9
|
+
|
|
10
|
+
def initialize: (text: String, ?type: :input_text) -> void
|
|
11
|
+
|
|
12
|
+
def to_hash: -> { text: String, ?type: :input_text }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -44,6 +44,7 @@ module OpenAI
|
|
|
44
44
|
{
|
|
45
45
|
?detailed_explanation: String,
|
|
46
46
|
?error_type: OpenAI::Models::ErrorObject::Misalignment::error_type,
|
|
47
|
+
?review_target: String?,
|
|
47
48
|
?steer: OpenAI::ErrorObject::Misalignment::Steer
|
|
48
49
|
}
|
|
49
50
|
|
|
@@ -62,6 +63,10 @@ module OpenAI
|
|
|
62
63
|
OpenAI::Models::ErrorObject::Misalignment::error_type
|
|
63
64
|
) -> OpenAI::Models::ErrorObject::Misalignment::error_type
|
|
64
65
|
|
|
66
|
+
# An opaque target for explicitly continuing this review, or null when
|
|
67
|
+
# unavailable.
|
|
68
|
+
attr_accessor review_target: String?
|
|
69
|
+
|
|
65
70
|
# An optional public continuation instruction.
|
|
66
71
|
attr_reader steer: OpenAI::ErrorObject::Misalignment::Steer?
|
|
67
72
|
|
|
@@ -74,17 +79,22 @@ module OpenAI
|
|
|
74
79
|
# The public explanation for this block.
|
|
75
80
|
# @param error_type
|
|
76
81
|
# An optional classification; clients must accept additional values.
|
|
82
|
+
# @param review_target
|
|
83
|
+
# An opaque target for explicitly continuing this review, or null when
|
|
84
|
+
# unavailable.
|
|
77
85
|
# @param steer
|
|
78
86
|
# An optional public continuation instruction.
|
|
79
87
|
def initialize: (
|
|
80
88
|
?detailed_explanation: String,
|
|
81
89
|
?error_type: OpenAI::Models::ErrorObject::Misalignment::error_type,
|
|
90
|
+
?review_target: String?,
|
|
82
91
|
?steer: OpenAI::ErrorObject::Misalignment::Steer
|
|
83
92
|
) -> void
|
|
84
93
|
|
|
85
94
|
def to_hash: -> {
|
|
86
95
|
?detailed_explanation: String,
|
|
87
96
|
?error_type: OpenAI::Models::ErrorObject::Misalignment::error_type,
|
|
97
|
+
?review_target: String?,
|
|
88
98
|
?steer: OpenAI::ErrorObject::Misalignment::Steer
|
|
89
99
|
}
|
|
90
100
|
|