OCI authentication and authorization utilities for OpenAI python SDK
Project description
oci-openai
The OCI OpenAI Python library provides secure and convenient access to the OpenAI-compatible REST API hosted by OCI Generative AI Service and OCI Data Science Model Deployment Service.
Table of Contents
- oci-openai
Installation
pip install oci-openai
Examples
OCI Generative AI
Using the OCI OpenAI Synchronous Client
from oci_openai import OciOpenAI, OciSessionAuth
client = OciOpenAI(
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
auth=OciSessionAuth(profile_name="<profile name>"),
compartment_id="<compartment ocid>",
)
completion = client.chat.completions.create(
model="<model name>",
messages=[
{
"role": "user",
"content": "How do I output all files in a directory using Python?",
},
],
)
print(completion.model_dump_json())
Using the OCI OpenAI Asynchronous Client
from oci_openai import AsyncOciOpenAI, OciSessionAuth
client = AsyncOciOpenAI(
auth=OciSessionAuth(profile_name="<profile name>"),
region="us-chicago-1",
compartment_id="<compartment ocid>",
)
completion = await client.chat.completions.create(
model="<model name>",
messages=[
{
"role": "user",
"content": "How do I output all files in a directory using Python?",
},
],
)
print(completion.model_dump_json())
Using the Native OpenAI Client
import httpx
from openai import OpenAI
from oci_openai import OciUserPrincipalAuth
# Example for OCI Generative AI endpoint
client = OpenAI(
api_key="OCI",
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",
http_client=httpx.Client(
auth=OciUserPrincipalAuth(profile_name="DEFAULT"),
headers={"opc-compartment-id": COMPARTMENT_ID}
),
)
response = client.chat.completions.create(
model="<model-name>",
messages=[
{
"role": "user",
"content": "Explain how to list all files in a directory using Python.",
},
],
)
print(response.model_dump_json())
Using with langchain-openai
from langchain_openai import ChatOpenAI
import httpx
from oci_openai import OciUserPrincipalAuth
import os
COMPARTMENT_ID=os.getenv("OCI_COMPARTMENT_ID", "<compartment_id>")
llm = ChatOpenAI(
model="<model-name>", # for example "xai.grok-4-fast-reasoning"
api_key="OCI",
base_url="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1",
http_client=httpx.Client(
auth=OciUserPrincipalAuth(profile_name="DEFAULT"),
headers={"CompartmentId": COMPARTMENT_ID}
),
# use_responses_api=True
# stream_usage=True,
# temperature=None,
# max_tokens=None,
# timeout=None,
# reasoning_effort="low",
# max_retries=2,
# other params...
)
messages = [
(
"system",
"You are a helpful assistant that translates English to French. Translate the user sentence.",
),
("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
print(ai_msg)
OCI Data Science Model Deployment
Using the OCI OpenAI Synchronous Client
from oci_openai import OciOpenAI, OciSessionAuth
client = OciOpenAI(
base_url="https://modeldeployment.us-ashburn-1.oci.customer-oci.com/<OCID>/predict/v1",
auth=OciSessionAuth(profile_name="<profile name>")
)
response = client.chat.completions.create(
model="<model-name>",
messages=[
{
"role": "user",
"content": "Explain how to list all files in a directory using Python.",
},
],
)
print(response.model_dump_json())
Using the OCI OpenAI Asynchronous Client
from oci_openai import AsyncOciOpenAI, OciSessionAuth
# Example for OCI Data Science Model Deployment endpoint
client = AsyncOciOpenAI(
base_url="https://modeldeployment.us-ashburn-1.oci.customer-oci.com/<OCID>/predict/v1",
auth=OciSessionAuth(profile_name="<profile name>")
)
response = await client.chat.completions.create(
model="<model-name>",
messages=[
{
"role": "user",
"content": "Explain how to list all files in a directory using Python.",
},
],
)
print(response.model_dump_json())
Using the Native OpenAI Client
import httpx
from openai import OpenAI
from oci_openai import OciSessionAuth
# Example for OCI Data Science Model Deployment endpoint
client = OpenAI(
api_key="OCI",
base_url="https://modeldeployment.us-ashburn-1.oci.customer-oci.com/<OCID>/predict/v1",
http_client=httpx.Client(auth=OciSessionAuth()),
)
response = client.chat.completions.create(
model="<model-name>",
messages=[
{
"role": "user",
"content": "Explain how to list all files in a directory using Python.",
},
],
)
print(response.model_dump_json())
Signers
The library supports multiple OCI authentication methods (signers). Choose the one that matches your runtime environment and security posture.
Supported signers
OciSessionAuth— Uses an OCI session token from your local OCI CLI profile.OciResourcePrincipalAuth— Uses Resource Principal auth.OciInstancePrincipalAuth— Uses Instance Principal auth. Best for OCI Compute instances with dynamic group policies.OciUserPrincipalAuth— Uses an OCI user API key. Suitable for service accounts/automation where API keys are managed securely.
Minimal examples of constructing each auth type:
from oci_openai import (
OciOpenAI,
OciSessionAuth,
OciResourcePrincipalAuth,
OciInstancePrincipalAuth,
OciUserPrincipalAuth,
)
# 1) Session (local dev; uses ~/.oci/config + session token)
session_auth = OciSessionAuth(profile_name="DEFAULT")
# 2) Resource Principal (OCI services with RP)
rp_auth = OciResourcePrincipalAuth()
# 3) Instance Principal (OCI Compute)
ip_auth = OciInstancePrincipalAuth()
# 4) User Principal (API key in ~/.oci/config)
up_auth = OciUserPrincipalAuth(profile_name="DEFAULT")
Contributing
This project welcomes contributions from the community. Before submitting a pull request, please review our contribution guide.
Security
Please consult the security guide for our responsible security vulnerability disclosure process.
License
Copyright (c) 2025 Oracle and/or its affiliates.
Released under the Universal Permissive License v1.0 as shown at https://oss.oracle.com/licenses/upl/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oci_openai-1.0.0.tar.gz.
File metadata
- Download URL: oci_openai-1.0.0.tar.gz
- Upload date:
- Size: 320.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
328836457b0c14306083ea865be2397ee1e0e0a846fe296b0be9c552361546df
|
|
| MD5 |
a9fe7f1d9d2dc27f5f8d085a1b06f951
|
|
| BLAKE2b-256 |
6824ef3141542813298e680aed0e80ffd55614f56bf13b88f53a8c2d07193d3b
|
File details
Details for the file oci_openai-1.0.0-py3-none-any.whl.
File metadata
- Download URL: oci_openai-1.0.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fc3b464c7f995b789729755e117a3d0cf911118a0a4f7d313fa57c1bd5f9853
|
|
| MD5 |
c1ce1a149447aede9bade67e724b48d2
|
|
| BLAKE2b-256 |
f311ec00267495b6db64fded696a0d9838c25363fcd8f38947a4812fe94c112a
|