Skip to content

Commit 54d4fe7

Browse files
feat(api): adding support for /v1/conversations to the API
1 parent afab147 commit 54d4fe7

File tree

124 files changed

+7295
-125
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+7295
-125
lines changed

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 109
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-7ef7a457c3bf05364e66e48c9ca34f31bfef1f6c9b7c15b1812346105e0abb16.yml
3-
openapi_spec_hash: a2b1f5d8fbb62175c93b0ebea9f10063
4-
config_hash: 4870312b04f48fd717ea4151053e7fb9
1+
configured_endpoints: 117
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-4bcdfe525558e67a09b32dec7a573e87b94bab47db3951eb4a86a4dafb60296c.yml
3+
openapi_spec_hash: 49e7e46bfe9f61b7b7a60e36840c0cd7
4+
config_hash: e4514526ae01126a61f9b6c14a351737

lib/openai.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
require_relative "openai/internal/transport/pooled_net_requester"
4949
require_relative "openai/client"
5050
require_relative "openai/internal/stream"
51+
require_relative "openai/internal/conversation_cursor_page"
5152
require_relative "openai/internal/cursor_page"
5253
require_relative "openai/internal/page"
5354
require_relative "openai/helpers/structured_output/json_schema_converter"
@@ -246,6 +247,33 @@
246247
require_relative "openai/models/containers/file_retrieve_params"
247248
require_relative "openai/models/containers/file_retrieve_response"
248249
require_relative "openai/models/containers/files/content_retrieve_params"
250+
require_relative "openai/models/conversations/computer_screenshot_content"
251+
require_relative "openai/models/conversations/container_file_citation_body"
252+
require_relative "openai/models/conversations/conversation"
253+
require_relative "openai/models/conversations/conversation_create_params"
254+
require_relative "openai/models/conversations/conversation_deleted"
255+
require_relative "openai/models/conversations/conversation_deleted_resource"
256+
require_relative "openai/models/conversations/conversation_delete_params"
257+
require_relative "openai/models/conversations/conversation_item"
258+
require_relative "openai/models/conversations/conversation_item_list"
259+
require_relative "openai/models/conversations/conversation_retrieve_params"
260+
require_relative "openai/models/conversations/conversation_update_params"
261+
require_relative "openai/models/conversations/file_citation_body"
262+
require_relative "openai/models/conversations/input_file_content"
263+
require_relative "openai/models/conversations/input_image_content"
264+
require_relative "openai/models/conversations/input_text_content"
265+
require_relative "openai/models/conversations/item_create_params"
266+
require_relative "openai/models/conversations/item_delete_params"
267+
require_relative "openai/models/conversations/item_list_params"
268+
require_relative "openai/models/conversations/item_retrieve_params"
269+
require_relative "openai/models/conversations/lob_prob"
270+
require_relative "openai/models/conversations/message"
271+
require_relative "openai/models/conversations/output_text_content"
272+
require_relative "openai/models/conversations/refusal_content"
273+
require_relative "openai/models/conversations/summary_text_content"
274+
require_relative "openai/models/conversations/text_content"
275+
require_relative "openai/models/conversations/top_log_prob"
276+
require_relative "openai/models/conversations/url_citation_body"
249277
require_relative "openai/models/create_embedding_response"
250278
require_relative "openai/models/custom_tool_input_format"
251279
require_relative "openai/models/embedding"
@@ -383,6 +411,7 @@
383411
require_relative "openai/models/responses/response_content"
384412
require_relative "openai/models/responses/response_content_part_added_event"
385413
require_relative "openai/models/responses/response_content_part_done_event"
414+
require_relative "openai/models/responses/response_conversation_param"
386415
require_relative "openai/models/responses/response_created_event"
387416
require_relative "openai/models/responses/response_create_params"
388417
require_relative "openai/models/responses/response_custom_tool_call"
@@ -535,6 +564,8 @@
535564
require_relative "openai/resources/containers"
536565
require_relative "openai/resources/containers/files"
537566
require_relative "openai/resources/containers/files/content"
567+
require_relative "openai/resources/conversations"
568+
require_relative "openai/resources/conversations/items"
538569
require_relative "openai/resources/embeddings"
539570
require_relative "openai/resources/evals"
540571
require_relative "openai/resources/evals/runs"

lib/openai/client.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ class Client < OpenAI::Internal::Transport::BaseClient
7575
# @return [OpenAI::Resources::Responses]
7676
attr_reader :responses
7777

78+
# @return [OpenAI::Resources::Conversations]
79+
attr_reader :conversations
80+
7881
# @return [OpenAI::Resources::Evals]
7982
attr_reader :evals
8083

@@ -160,6 +163,7 @@ def initialize(
160163
@batches = OpenAI::Resources::Batches.new(client: self)
161164
@uploads = OpenAI::Resources::Uploads.new(client: self)
162165
@responses = OpenAI::Resources::Responses.new(client: self)
166+
@conversations = OpenAI::Resources::Conversations.new(client: self)
163167
@evals = OpenAI::Resources::Evals.new(client: self)
164168
@containers = OpenAI::Resources::Containers.new(client: self)
165169
end
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Internal
5+
# @generic Elem
6+
#
7+
# @example
8+
# if conversation_cursor_page.has_next?
9+
# conversation_cursor_page = conversation_cursor_page.next_page
10+
# end
11+
#
12+
# @example
13+
# conversation_cursor_page.auto_paging_each do |item|
14+
# puts(item)
15+
# end
16+
class ConversationCursorPage
17+
include OpenAI::Internal::Type::BasePage
18+
19+
# @return [Array<generic<Elem>>, nil]
20+
attr_accessor :data
21+
22+
# @return [Boolean]
23+
attr_accessor :has_more
24+
25+
# @return [String]
26+
attr_accessor :last_id
27+
28+
# @return [Boolean]
29+
def next_page?
30+
has_more
31+
end
32+
33+
# @raise [OpenAI::HTTP::Error]
34+
# @return [self]
35+
def next_page
36+
unless next_page?
37+
message = "No more pages available. Please check #next_page? before calling ##{__method__}"
38+
raise RuntimeError.new(message)
39+
end
40+
41+
req = OpenAI::Internal::Util.deep_merge(@req, {query: {after: last_id}})
42+
@client.request(req)
43+
end
44+
45+
# @param blk [Proc]
46+
#
47+
# @yieldparam [generic<Elem>]
48+
def auto_paging_each(&blk)
49+
unless block_given?
50+
raise ArgumentError.new("A block must be given to ##{__method__}")
51+
end
52+
53+
page = self
54+
loop do
55+
page.data&.each(&blk)
56+
57+
break unless page.next_page?
58+
page = page.next_page
59+
end
60+
end
61+
62+
# @api private
63+
#
64+
# @param client [OpenAI::Internal::Transport::BaseClient]
65+
# @param req [Hash{Symbol=>Object}]
66+
# @param headers [Hash{String=>String}, Net::HTTPHeader]
67+
# @param page_data [Hash{Symbol=>Object}]
68+
def initialize(client:, req:, headers:, page_data:)
69+
super
70+
71+
case page_data
72+
in {data: Array => data}
73+
@data = data.map { OpenAI::Internal::Type::Converter.coerce(@model, _1) }
74+
else
75+
end
76+
@has_more = page_data[:has_more]
77+
@last_id = page_data[:last_id]
78+
end
79+
80+
# @api private
81+
#
82+
# @return [String]
83+
def inspect
84+
# rubocop:disable Layout/LineLength
85+
model = OpenAI::Internal::Type::Converter.inspect(@model, depth: 1)
86+
87+
"#<#{self.class}[#{model}]:0x#{object_id.to_s(16)} has_more=#{has_more.inspect} last_id=#{last_id.inspect}>"
88+
# rubocop:enable Layout/LineLength
89+
end
90+
end
91+
end
92+
end

lib/openai/models.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ module OpenAI
9191

9292
Containers = OpenAI::Models::Containers
9393

94+
Conversations = OpenAI::Models::Conversations
95+
9496
CreateEmbeddingResponse = OpenAI::Models::CreateEmbeddingResponse
9597

9698
CustomToolInputFormat = OpenAI::Models::CustomToolInputFormat
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Conversations
6+
class ComputerScreenshotContent < OpenAI::Internal::Type::BaseModel
7+
# @!attribute file_id
8+
# The identifier of an uploaded file that contains the screenshot.
9+
#
10+
# @return [String, nil]
11+
required :file_id, String, nil?: true
12+
13+
# @!attribute image_url
14+
# The URL of the screenshot image.
15+
#
16+
# @return [String, nil]
17+
required :image_url, String, nil?: true
18+
19+
# @!attribute type
20+
# Specifies the event type. For a computer screenshot, this property is always set
21+
# to `computer_screenshot`.
22+
#
23+
# @return [Symbol, :computer_screenshot]
24+
required :type, const: :computer_screenshot
25+
26+
# @!method initialize(file_id:, image_url:, type: :computer_screenshot)
27+
# Some parameter documentations has been truncated, see
28+
# {OpenAI::Models::Conversations::ComputerScreenshotContent} for more details.
29+
#
30+
# @param file_id [String, nil] The identifier of an uploaded file that contains the screenshot.
31+
#
32+
# @param image_url [String, nil] The URL of the screenshot image.
33+
#
34+
# @param type [Symbol, :computer_screenshot] Specifies the event type. For a computer screenshot, this property is always set
35+
end
36+
end
37+
end
38+
end
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Conversations
6+
class ContainerFileCitationBody < OpenAI::Internal::Type::BaseModel
7+
# @!attribute container_id
8+
# The ID of the container file.
9+
#
10+
# @return [String]
11+
required :container_id, String
12+
13+
# @!attribute end_index
14+
# The index of the last character of the container file citation in the message.
15+
#
16+
# @return [Integer]
17+
required :end_index, Integer
18+
19+
# @!attribute file_id
20+
# The ID of the file.
21+
#
22+
# @return [String]
23+
required :file_id, String
24+
25+
# @!attribute filename
26+
# The filename of the container file cited.
27+
#
28+
# @return [String]
29+
required :filename, String
30+
31+
# @!attribute start_index
32+
# The index of the first character of the container file citation in the message.
33+
#
34+
# @return [Integer]
35+
required :start_index, Integer
36+
37+
# @!attribute type
38+
# The type of the container file citation. Always `container_file_citation`.
39+
#
40+
# @return [Symbol, :container_file_citation]
41+
required :type, const: :container_file_citation
42+
43+
# @!method initialize(container_id:, end_index:, file_id:, filename:, start_index:, type: :container_file_citation)
44+
# @param container_id [String] The ID of the container file.
45+
#
46+
# @param end_index [Integer] The index of the last character of the container file citation in the message.
47+
#
48+
# @param file_id [String] The ID of the file.
49+
#
50+
# @param filename [String] The filename of the container file cited.
51+
#
52+
# @param start_index [Integer] The index of the first character of the container file citation in the message.
53+
#
54+
# @param type [Symbol, :container_file_citation] The type of the container file citation. Always `container_file_citation`.
55+
end
56+
end
57+
end
58+
end
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Conversations
6+
# @see OpenAI::Resources::Conversations#create
7+
class Conversation < OpenAI::Internal::Type::BaseModel
8+
# @!attribute id
9+
# The unique ID of the conversation.
10+
#
11+
# @return [String]
12+
required :id, String
13+
14+
# @!attribute created_at
15+
# The time at which the conversation was created, measured in seconds since the
16+
# Unix epoch.
17+
#
18+
# @return [Integer]
19+
required :created_at, Integer
20+
21+
# @!attribute metadata
22+
# Set of 16 key-value pairs that can be attached to an object. This can be useful
23+
# for storing additional information about the object in a structured format, and
24+
# querying for objects via API or the dashboard. Keys are strings with a maximum
25+
# length of 64 characters. Values are strings with a maximum length of 512
26+
# characters.
27+
#
28+
# @return [Object]
29+
required :metadata, OpenAI::Internal::Type::Unknown
30+
31+
# @!attribute object
32+
# The object type, which is always `conversation`.
33+
#
34+
# @return [Symbol, :conversation]
35+
required :object, const: :conversation
36+
37+
# @!method initialize(id:, created_at:, metadata:, object: :conversation)
38+
# Some parameter documentations has been truncated, see
39+
# {OpenAI::Models::Conversations::Conversation} for more details.
40+
#
41+
# @param id [String] The unique ID of the conversation.
42+
#
43+
# @param created_at [Integer] The time at which the conversation was created, measured in seconds since the Un
44+
#
45+
# @param metadata [Object] Set of 16 key-value pairs that can be attached to an object. This can be
46+
#
47+
# @param object [Symbol, :conversation] The object type, which is always `conversation`.
48+
end
49+
end
50+
end
51+
end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Conversations
6+
# @see OpenAI::Resources::Conversations#create
7+
class ConversationCreateParams < OpenAI::Internal::Type::BaseModel
8+
extend OpenAI::Internal::Type::RequestParameters::Converter
9+
include OpenAI::Internal::Type::RequestParameters
10+
11+
# @!attribute items
12+
# Initial items to include in the conversation context. You may add up to 20 items
13+
# at a time.
14+
#
15+
# @return [Array<OpenAI::Models::Responses::EasyInputMessage, OpenAI::Models::Responses::ResponseInputItem::Message, OpenAI::Models::Responses::ResponseOutputMessage, OpenAI::Models::Responses::ResponseFileSearchToolCall, OpenAI::Models::Responses::ResponseComputerToolCall, OpenAI::Models::Responses::ResponseInputItem::ComputerCallOutput, OpenAI::Models::Responses::ResponseFunctionWebSearch, OpenAI::Models::Responses::ResponseFunctionToolCall, OpenAI::Models::Responses::ResponseInputItem::FunctionCallOutput, OpenAI::Models::Responses::ResponseReasoningItem, OpenAI::Models::Responses::ResponseInputItem::ImageGenerationCall, OpenAI::Models::Responses::ResponseCodeInterpreterToolCall, OpenAI::Models::Responses::ResponseInputItem::LocalShellCall, OpenAI::Models::Responses::ResponseInputItem::LocalShellCallOutput, OpenAI::Models::Responses::ResponseInputItem::McpListTools, OpenAI::Models::Responses::ResponseInputItem::McpApprovalRequest, OpenAI::Models::Responses::ResponseInputItem::McpApprovalResponse, OpenAI::Models::Responses::ResponseInputItem::McpCall, OpenAI::Models::Responses::ResponseCustomToolCallOutput, OpenAI::Models::Responses::ResponseCustomToolCall, OpenAI::Models::Responses::ResponseInputItem::ItemReference>, nil]
16+
optional :items,
17+
-> { OpenAI::Internal::Type::ArrayOf[union: OpenAI::Responses::ResponseInputItem] },
18+
nil?: true
19+
20+
# @!attribute metadata
21+
# Set of 16 key-value pairs that can be attached to an object. Useful for storing
22+
# additional information about the object in a structured format.
23+
#
24+
# @return [Hash{Symbol=>String}, nil]
25+
optional :metadata, OpenAI::Internal::Type::HashOf[String], nil?: true
26+
27+
# @!method initialize(items: nil, metadata: nil, request_options: {})
28+
# Some parameter documentations has been truncated, see
29+
# {OpenAI::Models::Conversations::ConversationCreateParams} for more details.
30+
#
31+
# @param items [Array<OpenAI::Models::Responses::EasyInputMessage, OpenAI::Models::Responses::ResponseInputItem::Message, OpenAI::Models::Responses::ResponseOutputMessage, OpenAI::Models::Responses::ResponseFileSearchToolCall, OpenAI::Models::Responses::ResponseComputerToolCall, OpenAI::Models::Responses::ResponseInputItem::ComputerCallOutput, OpenAI::Models::Responses::ResponseFunctionWebSearch, OpenAI::Models::Responses::ResponseFunctionToolCall, OpenAI::Models::Responses::ResponseInputItem::FunctionCallOutput, OpenAI::Models::Responses::ResponseReasoningItem, OpenAI::Models::Responses::ResponseInputItem::ImageGenerationCall, OpenAI::Models::Responses::ResponseCodeInterpreterToolCall, OpenAI::Models::Responses::ResponseInputItem::LocalShellCall, OpenAI::Models::Responses::ResponseInputItem::LocalShellCallOutput, OpenAI::Models::Responses::ResponseInputItem::McpListTools, OpenAI::Models::Responses::ResponseInputItem::McpApprovalRequest, OpenAI::Models::Responses::ResponseInputItem::McpApprovalResponse, OpenAI::Models::Responses::ResponseInputItem::McpCall, OpenAI::Models::Responses::ResponseCustomToolCallOutput, OpenAI::Models::Responses::ResponseCustomToolCall, OpenAI::Models::Responses::ResponseInputItem::ItemReference>, nil] Initial items to include in the conversation context.
32+
#
33+
# @param metadata [Hash{Symbol=>String}, nil] Set of 16 key-value pairs that can be attached to an object. Useful for
34+
#
35+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
36+
end
37+
end
38+
end
39+
end
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module OpenAI
4+
module Models
5+
module Conversations
6+
# @see OpenAI::Resources::Conversations#delete
7+
class ConversationDeleteParams < OpenAI::Internal::Type::BaseModel
8+
extend OpenAI::Internal::Type::RequestParameters::Converter
9+
include OpenAI::Internal::Type::RequestParameters
10+
11+
# @!method initialize(request_options: {})
12+
# @param request_options [OpenAI::RequestOptions, Hash{Symbol=>Object}]
13+
end
14+
end
15+
end
16+
end

0 commit comments

Comments
 (0)