Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4f51be8
Do not use space inside array brackets
sferik May 12, 2025
278a68e
Fix all linter warnings and set stricter fail level
sferik May 12, 2025
b35ea63
chore(internal): version bump
stainless-app[bot] May 19, 2025
690b6a7
feat(api): Updating Assistants and Evals API schemas
stainless-app[bot] May 16, 2025
ae7a8b8
feat(api): further updates for evals API
stainless-app[bot] May 16, 2025
68c2797
codegen metadata
stainless-app[bot] May 19, 2025
54b6422
Merge pull request #139 from sferik/linter_fail_level
ms-jpq May 19, 2025
15a2b2b
fix: correctly instantiate sorbet type aliases for enums and unions
stainless-app[bot] May 20, 2025
600f499
chore: use sorbet union aliases where available
stainless-app[bot] May 20, 2025
cde9db1
Update README.md
secuwity May 20, 2025
a16dd00
chore: refine Yard and Sorbet types and ensure linting is turned on f…
stainless-app[bot] May 20, 2025
a340356
chore: disable sorbet typecheck for WIP sorbet annotations in example…
ms-jpq May 20, 2025
d33d462
Merge pull request #142 from secuwity/patch-1
ms-jpq May 20, 2025
d43db56
docs: grammar improvements in README.md
secuwity May 21, 2025
15511fc
docs: grammar improvements
secuwity May 21, 2025
c4ef024
chore(docs): grammar improvements
stainless-app[bot] May 21, 2025
746abf4
chore: force utf-8 locale via `RUBYOPT` when formatting
stainless-app[bot] May 21, 2025
9105b8b
feat(api): new API tools
stainless-app[bot] May 21, 2025
8be52a2
feat(api): add container endpoint
stainless-app[bot] May 21, 2025
00b25bd
feat: RBI type defs for structured output (#684)
ms-jpq May 21, 2025
05b69d1
fix: structured output union decorations
ms-jpq May 21, 2025
26db76d
chore: use fully qualified names for yard annotations and rbs aliases
stainless-app[bot] May 22, 2025
91a278e
feat(api): new streaming helpers for background responses
stainless-app[bot] May 22, 2025
e4df001
release: 0.1.0-beta.2
stainless-app[bot] May 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.1.0-beta.1"
".": "0.1.0-beta.2"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 99
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-161ca7f1cfd7b33c1fc07d0ce25dfe4be5a7271c394f4cb526b7fb21b0729900.yml
openapi_spec_hash: 602e14add4bee018c6774e320ce309b8
config_hash: bdacc55eb995c15255ec82130eb8c3bb
configured_endpoints: 109
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-fc64d7c2c8f51f750813375356c3f3fdfc7fc1b1b34f19c20a5410279d445d37.yml
openapi_spec_hash: 618285fc70199ee32b9ebe4bf72f7e4c
config_hash: c497f6b750cc89c0bf2eefc0bc839c70
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
# Changelog

## 0.1.0-beta.2 (2025-05-22)

Full Changelog: [v0.1.0-beta.1...v0.1.0-beta.2](https://github.com/openai/openai-ruby/compare/v0.1.0-beta.1...v0.1.0-beta.2)

### Features

* **api:** add container endpoint ([8be52a2](https://github.com/openai/openai-ruby/commit/8be52a2bd618da97c79cb35ada46717965664a08))
* **api:** further updates for evals API ([ae7a8b8](https://github.com/openai/openai-ruby/commit/ae7a8b8fc1611aa6f645c75f865d9ae6906d9a20))
* **api:** new API tools ([9105b8b](https://github.com/openai/openai-ruby/commit/9105b8b80d2d381ed58b2b92ecfe644e7596c9a3))
* **api:** new streaming helpers for background responses ([91a278e](https://github.com/openai/openai-ruby/commit/91a278e6ac4db19c66a89d5f610c22ad3c82a1f7))
* **api:** Updating Assistants and Evals API schemas ([690b6a7](https://github.com/openai/openai-ruby/commit/690b6a78de30845f974695d0cc36a59a04adf65b))
* RBI type defs for structured output ([#684](https://github.com/openai/openai-ruby/issues/684)) ([00b25bd](https://github.com/openai/openai-ruby/commit/00b25bdb3aa8a2999114389d699cc3dc59c4089e))


### Bug Fixes

* correctly instantiate sorbet type aliases for enums and unions ([15a2b2b](https://github.com/openai/openai-ruby/commit/15a2b2bab52948f9dac83560dea419006589bd81))
* structured output union decorations ([05b69d1](https://github.com/openai/openai-ruby/commit/05b69d1be85f813e1bddf04e4042665383c1be04))


### Chores

* disable sorbet typecheck for WIP sorbet annotations in examples ([#678](https://github.com/openai/openai-ruby/issues/678)) ([a340356](https://github.com/openai/openai-ruby/commit/a3403566253a74a9f1c69a874568000eca1da656))
* **docs:** grammar improvements ([c4ef024](https://github.com/openai/openai-ruby/commit/c4ef024f3513e1d64e55960b45660e50d9bf9039))
* force utf-8 locale via `RUBYOPT` when formatting ([746abf4](https://github.com/openai/openai-ruby/commit/746abf447c01290ad3061ef77c54d3b5d781a6b7))
* **internal:** version bump ([b35ea63](https://github.com/openai/openai-ruby/commit/b35ea63d9758c4e96dd665013be2edb78ebaa8e6))
* refine Yard and Sorbet types and ensure linting is turned on for examples ([a16dd00](https://github.com/openai/openai-ruby/commit/a16dd00f99176184da0710a0fbce652718a3d067))
* use fully qualified names for yard annotations and rbs aliases ([26db76d](https://github.com/openai/openai-ruby/commit/26db76de24d82ebb593997fab8fd8df43c5f2372))
* use sorbet union aliases where available ([600f499](https://github.com/openai/openai-ruby/commit/600f499dcf61b4d3c3a8cf092ff18cb712711dc0))


### Documentation

* grammar improvements ([15511fc](https://github.com/openai/openai-ruby/commit/15511fc1e80f61abe64375b0a7eb22c5447d5288))
* grammar improvements in README.md ([d43db56](https://github.com/openai/openai-ruby/commit/d43db56ba239f91c6fb1344156e88feaee802f0c))

## 0.1.0-beta.1 (2025-05-16)

Full Changelog: [v0.1.0-alpha.5...v0.1.0-beta.1](https://github.com/openai/openai-ruby/compare/v0.1.0-alpha.5...v0.1.0-beta.1)
Expand Down
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ GIT
PATH
remote: .
specs:
openai (0.1.0.pre.beta.1)
openai (0.1.0.pre.beta.2)
connection_pool

GEM
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ puts(chat_completion)

We provide support for streaming responses using Server-Sent Events (SSE).

**coming soon:** `openai.chat.completions.stream` will soon come with Python SDK style higher level streaming responses support.
**coming soon:** `openai.chat.completions.stream` will soon come with Python SDK-style higher-level streaming responses support.

```ruby
stream = openai.chat.completions.stream_raw(
Expand Down Expand Up @@ -224,7 +224,7 @@ puts(chat_completion[:my_undocumented_property])

#### Undocumented request params

If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` under the `request_options:` parameter when making a request as seen in examples above.
If you want to explicitly send an extra param, you can do so with the `extra_query`, `extra_body`, and `extra_headers` under the `request_options:` parameter when making a request, as seen in the examples above.

#### Undocumented endpoints

Expand All @@ -242,7 +242,7 @@ response = client.request(

### Concurrency & connection pooling

The `OpenAI::Client` instances are threadsafe, but only are fork-safe when there are no in-flight HTTP requests.
The `OpenAI::Client` instances are threadsafe, but are only fork-safe when there are no in-flight HTTP requests.

Each instance of `OpenAI::Client` has its own HTTP connection pool with a default size of 99. As such, we recommend instantiating the client once per application in most settings.

Expand All @@ -252,7 +252,7 @@ Unless otherwise specified, other classes in the SDK do not have locks protectin

## Sorbet

This library provides comprehensive [RBI](https://sorbet.org/docs/rbi) definitions, and has no dependency on sorbet-runtime.
This library provides comprehensive [RBI](https://sorbet.org/docs/rbi) definitions and has no dependency on sorbet-runtime.

You can provide typesafe request parameters like so:

Expand Down Expand Up @@ -301,7 +301,7 @@ openai.chat.completions.create(
# …
)

# Literal values is also permissible:
# Literal values are also permissible:
openai.chat.completions.create(
reasoning_effort: :low,
# …
Expand Down
19 changes: 11 additions & 8 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ require "rake/clean"
require "rubocop/rake_task"

tapioca = "sorbet/tapioca"
examples = "examples"
ignore_file = ".ignore"

CLEAN.push(*%w[.idea/ .ruby-lsp/ .yardoc/ doc/], *FileList["*.gem"], ignore_file)
Expand All @@ -35,11 +36,11 @@ multitask(:test) do
end

xargs = %w[xargs --no-run-if-empty --null --max-procs=0 --max-args=300 --]
locale = {"LC_ALL" => "C.UTF-8"}
ruby_opt = {"RUBYOPT" => [ENV["RUBYOPT"], "--encoding=UTF-8"].compact.join(" ")}

desc("Lint `*.rb(i)`")
multitask(:"lint:rubocop") do
find = %w[find ./lib ./test ./rbi -type f -and ( -name *.rb -or -name *.rbi ) -print0]
find = %w[find ./lib ./test ./rbi ./examples -type f -and ( -name *.rb -or -name *.rbi ) -print0]

rubocop = %w[rubocop]
rubocop += %w[--format github] if ENV.key?("CI")
Expand All @@ -54,7 +55,7 @@ end
desc("Format `*.rb`")
multitask(:"format:rb") do
# while `syntax_tree` is much faster than `rubocop`, `rubocop` is the only formatter with full syntax support
find = %w[find ./lib ./test -type f -and -name *.rb -print0]
find = %w[find ./lib ./test ./examples -type f -and -name *.rb -print0]
fmt = xargs + %w[rubocop --fail-level F --autocorrect --format simple --]
sh("#{find.shelljoin} | #{fmt.shelljoin}")
end
Expand All @@ -63,7 +64,7 @@ desc("Format `*.rbi`")
multitask(:"format:rbi") do
find = %w[find ./rbi -type f -and -name *.rbi -print0]
fmt = xargs + %w[stree write --]
sh(locale, "#{find.shelljoin} | #{fmt.shelljoin}")
sh(ruby_opt, "#{find.shelljoin} | #{fmt.shelljoin}")
end

desc("Format `*.rbs`")
Expand Down Expand Up @@ -99,7 +100,7 @@ multitask(:"format:rbs") do
# transform class aliases to type aliases, which syntax tree has no trouble with
sh("#{find.shelljoin} | #{pre.shelljoin}")
# run syntax tree to format `*.rbs` files
sh(locale, "#{find.shelljoin} | #{fmt.shelljoin}") do
sh(ruby_opt, "#{find.shelljoin} | #{fmt.shelljoin}") do
success = _1
end
# transform type aliases back to class aliases
Expand All @@ -117,12 +118,14 @@ multitask(:"typecheck:steep") do
sh(*%w[steep check])
end

directory(examples)

desc("Typecheck `*.rbi`")
multitask(:"typecheck:sorbet") do
sh(*%w[srb typecheck])
multitask("typecheck:sorbet": examples) do
sh(*%w[srb typecheck --dir], examples)
end

file(tapioca) do
directory(tapioca) do
sh(*%w[tapioca init])
end

Expand Down
6 changes: 3 additions & 3 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Reporting Security Issues

This SDK is generated by [Stainless Software Inc](http://stainless.com). Stainless takes security seriously, and encourages you to report any security vulnerability promptly so that appropriate action can be taken.
This SDK is generated by [Stainless Software Inc](http://stainless.com). Stainless takes security seriously and encourages you to report any security vulnerability promptly so that appropriate action can be taken.

To report a security issue, please contact the Stainless team at [email protected].

Expand All @@ -16,13 +16,13 @@ before making any information public.
## Reporting Non-SDK Related Security Issues

If you encounter security issues that are not directly related to SDKs but pertain to the services
or products provided by OpenAI please follow the respective company's security reporting guidelines.
or products provided by OpenAI, please follow the respective company's security reporting guidelines.

### OpenAI Terms and Policies

Our Security Policy can be found at [Security Policy URL](https://openai.com/policies/coordinated-vulnerability-disclosure-policy).

Please contact [email protected] for any questions or concerns regarding security of our services.
Please contact [email protected] for any questions or concerns regarding the security of our services.

---

Expand Down
2 changes: 1 addition & 1 deletion Steepfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ target(:lib) do

signature("sig")

YAML.safe_load_file("./manifest.yaml", symbolize_names: true) => { dependencies: }
YAML.safe_load_file("./manifest.yaml", symbolize_names: true) => {dependencies:}
# currently these libraries lack the `*.rbs` annotations required by `steep`
stdlibs = dependencies - %w[English etc net/http rbconfig set stringio]

Expand Down
2 changes: 1 addition & 1 deletion examples/structured_outputs_chat_completions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class CalendarEvent < OpenAI::BaseModel
doc: "Event location"
end

# # gets API Key from environment variable `OPENAI_API_KEY`
# gets API Key from environment variable `OPENAI_API_KEY`
client = OpenAI::Client.new

chat_completion = client.chat.completions.create(
Expand Down
48 changes: 37 additions & 11 deletions lib/openai.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# frozen_string_literal: true

# Standard libraries.
# rubocop:disable Lint/RedundantRequireStatement
require "English"
require "cgi"
require "date"
Expand All @@ -15,8 +14,6 @@
require "stringio"
require "time"
require "uri"
# rubocop:enable Lint/RedundantRequireStatement

# We already ship the preferred sorbet manifests in the package itself.
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
if Object.const_defined?(:Tapioca) && caller.chain([$PROGRAM_NAME]).chain(ARGV).grep(/tapioca/)
Expand Down Expand Up @@ -182,7 +179,6 @@
require_relative "openai/models/beta/threads/text_delta_block"
require_relative "openai/models/beta/thread_stream_event"
require_relative "openai/models/beta/thread_update_params"
require_relative "openai/models/beta/truncation_object"
require_relative "openai/models/chat/chat_completion"
require_relative "openai/models/chat/chat_completion_assistant_message_param"
require_relative "openai/models/chat/chat_completion_audio"
Expand Down Expand Up @@ -225,6 +221,21 @@
require_relative "openai/models/completion_create_params"
require_relative "openai/models/completion_usage"
require_relative "openai/models/compound_filter"
require_relative "openai/models/container_create_params"
require_relative "openai/models/container_create_response"
require_relative "openai/models/container_delete_params"
require_relative "openai/models/container_list_params"
require_relative "openai/models/container_list_response"
require_relative "openai/models/container_retrieve_params"
require_relative "openai/models/container_retrieve_response"
require_relative "openai/models/containers/file_create_params"
require_relative "openai/models/containers/file_create_response"
require_relative "openai/models/containers/file_delete_params"
require_relative "openai/models/containers/file_list_params"
require_relative "openai/models/containers/file_list_response"
require_relative "openai/models/containers/file_retrieve_params"
require_relative "openai/models/containers/file_retrieve_response"
require_relative "openai/models/containers/files/content_retrieve_params"
require_relative "openai/models/create_embedding_response"
require_relative "openai/models/embedding"
require_relative "openai/models/embedding_create_params"
Expand All @@ -235,18 +246,13 @@
require_relative "openai/models/eval_custom_data_source_config"
require_relative "openai/models/eval_delete_params"
require_relative "openai/models/eval_delete_response"
require_relative "openai/models/eval_item"
require_relative "openai/models/eval_list_params"
require_relative "openai/models/eval_list_response"
require_relative "openai/models/eval_logs_data_source_config"
require_relative "openai/models/eval_retrieve_params"
require_relative "openai/models/eval_retrieve_response"
require_relative "openai/models/evals/create_eval_completions_run_data_source"
require_relative "openai/models/evals/create_eval_jsonl_run_data_source"
require_relative "openai/models/evals/create_eval_responses_run_data_source"
require_relative "openai/models/evals/eval_api_error"
require_relative "openai/models/evals/eval_jsonl_file_content_source"
require_relative "openai/models/evals/eval_jsonl_file_id_source"
require_relative "openai/models/evals/run_cancel_params"
require_relative "openai/models/evals/run_cancel_response"
require_relative "openai/models/evals/run_create_params"
Expand Down Expand Up @@ -343,6 +349,7 @@
require_relative "openai/models/responses/response_audio_done_event"
require_relative "openai/models/responses/response_audio_transcript_delta_event"
require_relative "openai/models/responses/response_audio_transcript_done_event"
require_relative "openai/models/responses/response_cancel_params"
require_relative "openai/models/responses/response_code_interpreter_call_code_delta_event"
require_relative "openai/models/responses/response_code_interpreter_call_code_done_event"
require_relative "openai/models/responses/response_code_interpreter_call_completed_event"
Expand Down Expand Up @@ -373,6 +380,10 @@
require_relative "openai/models/responses/response_function_tool_call_item"
require_relative "openai/models/responses/response_function_tool_call_output_item"
require_relative "openai/models/responses/response_function_web_search"
require_relative "openai/models/responses/response_image_gen_call_completed_event"
require_relative "openai/models/responses/response_image_gen_call_generating_event"
require_relative "openai/models/responses/response_image_gen_call_in_progress_event"
require_relative "openai/models/responses/response_image_gen_call_partial_image_event"
require_relative "openai/models/responses/response_includable"
require_relative "openai/models/responses/response_incomplete_event"
require_relative "openai/models/responses/response_in_progress_event"
Expand All @@ -387,14 +398,28 @@
require_relative "openai/models/responses/response_input_text"
require_relative "openai/models/responses/response_item"
require_relative "openai/models/responses/response_item_list"
require_relative "openai/models/responses/response_mcp_call_arguments_delta_event"
require_relative "openai/models/responses/response_mcp_call_arguments_done_event"
require_relative "openai/models/responses/response_mcp_call_completed_event"
require_relative "openai/models/responses/response_mcp_call_failed_event"
require_relative "openai/models/responses/response_mcp_call_in_progress_event"
require_relative "openai/models/responses/response_mcp_list_tools_completed_event"
require_relative "openai/models/responses/response_mcp_list_tools_failed_event"
require_relative "openai/models/responses/response_mcp_list_tools_in_progress_event"
require_relative "openai/models/responses/response_output_audio"
require_relative "openai/models/responses/response_output_item"
require_relative "openai/models/responses/response_output_item_added_event"
require_relative "openai/models/responses/response_output_item_done_event"
require_relative "openai/models/responses/response_output_message"
require_relative "openai/models/responses/response_output_refusal"
require_relative "openai/models/responses/response_output_text"
require_relative "openai/models/responses/response_output_text_annotation_added_event"
require_relative "openai/models/responses/response_queued_event"
require_relative "openai/models/responses/response_reasoning_delta_event"
require_relative "openai/models/responses/response_reasoning_done_event"
require_relative "openai/models/responses/response_reasoning_item"
require_relative "openai/models/responses/response_reasoning_summary_delta_event"
require_relative "openai/models/responses/response_reasoning_summary_done_event"
require_relative "openai/models/responses/response_reasoning_summary_part_added_event"
require_relative "openai/models/responses/response_reasoning_summary_part_done_event"
require_relative "openai/models/responses/response_reasoning_summary_text_delta_event"
Expand All @@ -404,7 +429,6 @@
require_relative "openai/models/responses/response_retrieve_params"
require_relative "openai/models/responses/response_status"
require_relative "openai/models/responses/response_stream_event"
require_relative "openai/models/responses/response_text_annotation_delta_event"
require_relative "openai/models/responses/response_text_config"
require_relative "openai/models/responses/response_text_delta_event"
require_relative "openai/models/responses/response_text_done_event"
Expand All @@ -431,7 +455,6 @@
require_relative "openai/models/vector_store_create_params"
require_relative "openai/models/vector_store_deleted"
require_relative "openai/models/vector_store_delete_params"
require_relative "openai/models/vector_store_expiration_after"
require_relative "openai/models/vector_store_list_params"
require_relative "openai/models/vector_store_retrieve_params"
require_relative "openai/models/vector_stores/file_batch_cancel_params"
Expand Down Expand Up @@ -467,6 +490,9 @@
require_relative "openai/resources/chat/completions"
require_relative "openai/resources/chat/completions/messages"
require_relative "openai/resources/completions"
require_relative "openai/resources/containers"
require_relative "openai/resources/containers/files"
require_relative "openai/resources/containers/files/content"
require_relative "openai/resources/embeddings"
require_relative "openai/resources/evals"
require_relative "openai/resources/evals/runs"
Expand Down
4 changes: 4 additions & 0 deletions lib/openai/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ class Client < OpenAI::Internal::Transport::BaseClient
# @return [OpenAI::Resources::Evals]
attr_reader :evals

# @return [OpenAI::Resources::Containers]
attr_reader :containers

# @api private
#
# @return [Hash{String=>String}]
Expand Down Expand Up @@ -147,6 +150,7 @@ def initialize(
@uploads = OpenAI::Resources::Uploads.new(client: self)
@responses = OpenAI::Resources::Responses.new(client: self)
@evals = OpenAI::Resources::Evals.new(client: self)
@containers = OpenAI::Resources::Containers.new(client: self)
end
end
end
Loading