Provides a community maintained Julia wrapper to the OpenAI API. For API functionality see reference documentation. Autogenerated documentation can be found here: https://juliaml.github.io/OpenAI.jl/dev/
using Pkg; Pkg.add("OpenAI")
-
Create an OpenAI account, if you don't already have one
-
Create a secret API key
-
Choose a model to interact with
secret_key = ENV["OPENAI_API_KEY"]
model = "gpt-5-mini"
prompt = "Say \"this is a test\""
r = create_chat(
secret_key,
model,
[Dict("role" => "user", "content"=> prompt)]
)
println(r.response[:choices][begin][:message][:content])
returns
"This is a test."
If you have a non-standard setup, such as a local LLM or third-party service that
conforms to the OpenAI interface, you can override parameters using the OpenAIProvider
struct in your application like this:
using OpenAI
provider = OpenAI.OpenAIProvider(
api_key=ENV["OPENAI_API_KEY"],
base_url=ENV["OPENAI_BASE_URL_OVERRIDE"]
)
response = create_chat(
provider,
"gpt-5-mini",
[Dict("role" => "user", "content" => "Write some ancient Greek poetry")]
)
For more use cases see tests.
OpenAI.jl integrates StreamCallbacks.jl for streaming responses.
create_chat(secret_key, model, messages; streamcallback=stdout)
using OpenAI
cb = StreamCallback()
create_chat(secret_key, model, messages; streamcallback=cb)
cb.chunks
using OpenAI
import StreamCallbacks: print_content
function print_content(io::IO, content; kwargs...)
printstyled(io, "🌊 $content"; color=:cyan)
end
cb = StreamCallback()
create_chat(secret_key, model, messages; streamcallback=cb)
To fully customize processing, you can overload StreamCallbacks.callback
:
using OpenAI
import StreamCallbacks: callback, AbstractStreamCallback, AbstractStreamChunk, extract_content, print_content
@inline function callback(cb::AbstractStreamCallback, chunk::AbstractStreamChunk; kwargs...)
processed_text = extract_content(cb.flavor, chunk; kwargs...)
isnothing(processed_text) && return nothing
print_content(cb.out, processed_text; kwargs...)
return nothing
end
See examples/streamcallbacks.jl
for a full walkthrough.
Feel free to open a PR, or file an issue if that's out of reach!
- The Assistants API was changed upstream, so these functions are currently disabled.