Skip to main content

Control Panel for AI Apps

pip install portkey-ai

Features

The Portkey SDK is built on top of the OpenAI SDK, allowing you to seamlessly integrate Portkey's advanced features while retaining full compatibility with OpenAI methods. With Portkey, you can enhance your interactions with OpenAI or any other OpenAI-like provider by leveraging robust monitoring, reliability, prompt management, and more features - without modifying much of your existing code.

AI Gateway

Unified API Signature
If you've used OpenAI, you already know how to use Portkey with any other provider.
Interoperability
Write once, run with any provider. Switch between any model from_any provider seamlessly.
Automated Fallbacks & Retries
Ensure your application remains functional even if a primary service fails.
Load Balancing
Efficiently distribute incoming requests among multiple models.
Semantic Caching
Reduce costs and latency by intelligently caching results.
Virtual Keys
Secure your LLM API keys by storing them in Portkey vault and using disposable virtual keys.
Request Timeouts
Manage unpredictable LLM latencies effectively by setting custom request timeouts on requests.

Observability

Logging
Keep track of all requests for monitoring and debugging.
Requests Tracing
Understand the journey of each request for optimization.
Custom Metadata
Segment and categorize requests for better insights.
Feedbacks
Collect and analyse weighted feedback on requests from users.
Analytics
Track your app & LLM's performance with 40+ production-critical metrics in a single place.

Usage

Prerequisites

  1. Sign up on Portkey and grab your Portkey API Key
  2. Add your OpenAI key to Portkey's Virtual Keys page and keep it handy
# Installing the SDK

$ pip install portkey-ai
$ export PORTKEY_API_KEY=PORTKEY_API_KEY

Making a Request to OpenAI

  • Portkey fully adheres to the OpenAI SDK signature. You can instantly switch to Portkey and start using our production features right out of the box.
  • Just replace from openai import OpenAI with from portkey_ai import Portkey:
from portkey_ai import Portkey

portkey = Portkey(
    api_key="PORTKEY_API_KEY",
    virtual_key="VIRTUAL_KEY"
)

chat_completion = portkey.chat.completions.create(
    messages = [{ "role": 'user', "content": 'Say this is a test' }],
    model = 'gpt-4'
)

print(chat_completion)

Async Usage

  • Use AsyncPortkey instead of Portkey with await:
import asyncio
from portkey_ai import AsyncPortkey

portkey = AsyncPortkey(
    api_key="PORTKEY_API_KEY",
    virtual_key="VIRTUAL_KEY"
)

async def main():
    chat_completion = await portkey.chat.completions.create(
        messages=[{'role': 'user', 'content': 'Say this is a test'}],
        model='gpt-4'
    )

    print(chat_completion)

asyncio.run(main())

Strands Agents Integration (optional)

Installation:

pip install 'portkey-ai[strands]'

Usage with Strands:

from strands.agent import Agent
from portkey_ai.integrations.strands import PortkeyStrands

model = PortkeyStrands(
    api_key="PORTKEY_API_KEY",
    model_id="@openai/gpt-4o-mini",
#   base_url="https://api.portkey.ai/v1",  ## Optional    
)

agent = Agent(model=model)

import asyncio

async def main():
    result = await agent.invoke_async("Tell me a short programming joke.")
    print(getattr(result, "text", result))

asyncio.run(main())

Google ADK Integration (optional)

Installation:

pip install 'portkey-ai[adk]'

Usage with ADK:

import asyncio
from google.adk.models.llm_request import LlmRequest
from google.genai import types
from portkey_ai.integrations.adk import PortkeyAdk

llm = PortkeyAdk(
    api_key="PORTKEY_API_KEY",
    model="@openai/gpt-4o-mini",
#   base_url="https://api.portkey.ai/v1",  ## Optional    
)

req = LlmRequest(
    model="@openai/gpt-4o-mini",
    contents=[
        types.Content(
            role="user",
            parts=[types.Part.from_text(text="Tell me a short programming joke.")],
        )
    ],
)

async def main():
    # Print only partial chunks to avoid duplicate final output
    async for resp in llm.generate_content_async(req, stream=True):
        if getattr(resp, "partial", False) and resp.content and resp.content.parts:
            for p in resp.content.parts:
                if getattr(p, "text", None):
                    print(p.text, end="")
    print()

asyncio.run(main())

Non-streaming example (single final response):

import asyncio
from google.adk.models.llm_request import LlmRequest
from google.genai import types
from portkey_ai.integrations.adk import PortkeyAdk

llm = PortkeyAdk(
    api_key="PORTKEY_API_KEY",
    model="@openai/gpt-4o-mini",
)

req = LlmRequest(
    model="@openai/gpt-4o-mini",
    contents=[
        types.Content(
            role="user",
            parts=[types.Part.from_text(text="Give me a one-line programming joke (final only).")],
        )
    ],
)

async def main():
    final_text = []
    async for resp in llm.generate_content_async(req, stream=False):
        if resp.content and resp.content.parts:
            for p in resp.content.parts:
                if getattr(p, "text", None):
                    final_text.append(p.text)
    print("".join(final_text))

asyncio.run(main())

Configuration notes:

  • system_role: By default, the adapter sends the system instruction as a developer role message to align with ADK. If your provider expects a strict system role, pass system_role="system" when constructing PortkeyAdk.

    llm = PortkeyAdk(
        model="@openai/gpt-4o-mini",
        api_key="PORTKEY_API_KEY",
        system_role="system",  # switch from default "developer"
    )
    
  • Tools: When tools are present in the ADK request, the adapter sets tool_choice="auto" to enable function calling by default (mirrors the Strands adapter behavior).

Compatibility with OpenAI SDK

Portkey currently supports all the OpenAI methods, including the legacy ones.

Methods OpenAI
V1.26.0
Portkey
V1.3.1
Audio ✅ ✅
Chat ✅ ✅
Embeddings ✅ ✅
Images ✅ ✅
Fine-tuning ✅ ✅
Batch ✅ ✅
Files ✅ ✅
Models ✅ ✅
Moderations ✅ ✅
Assistants ✅ ✅
Threads ✅ ✅
Thread - Messages ✅ ✅
Thread - Runs ✅ ✅
Thread - Run - Steps ✅ ✅
Vector Store ✅ ✅
Vector Store - Files ✅ ✅
Vector Store - Files Batches ✅ ✅
Generations ❌ (Deprecated) ✅
Completions ❌ (Deprecated) ✅

Portkey-Specific Methods

Methods Portkey
V1.3.1
Feedback ✅
Prompts ✅

Check out Portkey docs for the full list of supported providers

follow on Twitter Discord

Contributing

Get started by checking out Github issues. Email us at support@portkey.ai or just ping on Discord to chat.

Metadata

Release files for portkey-ai 2.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for portkey-ai 2.3.4
File Size Uploaded
portkey_ai-2.3.4.tar.gz 650.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for portkey-ai 2.3.4
File Interpreter ABI Platform
portkey_ai-2.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 2.0 MB

Release files / portkey_ai-2.3.4.tar.gz

Download URL portkey_ai-2.3.4.tar.gz
Size 650.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c74b7e1798044a43dec064ed830ca9a3e57eb5114e0c78efff95e0b5937becd1
BLAKE2b-256 checksum
How to use checksums
cfcf058cce65cc54a347a897a888c75b4c7c52f44a3e04899f58d61b1c03fc90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / portkey_ai-2.3.4-py3-none-any.whl

Download URL portkey_ai-2.3.4-py3-none-any.whl
Size 1.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
143262721fbf63dd03262286ad707a1644aca9bc3474b2a8d8247be8d507a703
BLAKE2b-256 checksum
How to use checksums
ae45b9a3586ad9506476342f177082c727d1573baf39c9b1aee6befbaba4cdef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

This release

2.3.4 This release

2 release files

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.15.1

2 release files

1.15.0

2 release files

1.14.4

2 release files

1.14.3

2 release files

1.14.2

2 release files

1.14.1

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.2

2 release files

1.12.1

2 release files

1.11.2

2 release files

1.11.0

2 release files

1.10.5

2 release files

1.10.4

2 release files

1.10.3

2 release files

1.10.2

2 release files

1.9.10

2 release files

1.9.9

2 release files

1.9.8

2 release files

1.9.7

2 release files

1.9.6

2 release files

1.9.5

2 release files

1.9.4

2 release files

1.9.3

2 release files

1.9.2

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.7

2 release files

1.8.6

2 release files

1.8.5

2 release files

1.8.4

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.4

2 release files

1.2.3

1 release file

1.2.2

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.1.7

1 release file

1.1.6

1 release file

1.1.5

1 release file

1.1.4

1 release file

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.1.53

1 release file

0.1.52

1 release file

0.1.51

1 release file

0.1.50

1 release file

0.1.49

1 release file

0.1.48

1 release file

0.1.47

1 release file

0.1.46

1 release file

0.1.45

1 release file

0.1.44

1 release file

0.1.43

1 release file

0.1.42

1 release file

0.1.41

1 release file

0.1.40

1 release file

0.1.39

1 release file

0.1.38

1 release file

0.1.37

1 release file

0.1.36

1 release file

0.1.35

1 release file

0.1.34

1 release file

0.1.32

1 release file

0.1.31

1 release file

0.1.30

1 release file

0.1.29

1 release file

0.1.28

1 release file

0.1.27

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page