Skip to content

Commit f10e236

Browse files
authored
Merge branch 'Portkey-AI:main' into patch-3
2 parents b6cc7cf + 0cc63ac commit f10e236

File tree

145 files changed

+12029
-1347
lines changed

Some content is hidden

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

145 files changed

+12029
-1347
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,4 @@ build
142142
plugins/**/.creds.json
143143
plugins/**/creds.json
144144
plugins/**/.parameters.json
145+
src/handlers/tests/.creds.json

CLAUDE.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
This is the **Portkey AI Gateway** - a fast, reliable AI gateway that routes requests to 250+ LLMs with sub-1ms latency. It's built with Hono framework for TypeScript/JavaScript and can be deployed to multiple environments including Cloudflare Workers, Node.js servers, and Docker containers.
8+
9+
## Development Commands
10+
11+
### Core Development
12+
- `npm run dev` - Start development server using Wrangler (Cloudflare Workers)
13+
- `npm run dev:node` - Start development server using Node.js
14+
- `npm run build` - Build the project for production
15+
- `npm run build-plugins` - Build the plugin system
16+
17+
### Testing
18+
- `npm run test:gateway` - Run tests for the main gateway code (src/)
19+
- `npm run test:plugins` - Run tests for plugins
20+
- `jest src/` - Run specific gateway tests
21+
- `jest plugins/` - Run specific plugin tests
22+
23+
### Code Quality
24+
- `npm run format` - Format code with Prettier
25+
- `npm run format:check` - Check code formatting
26+
- `npm run pretty` - Alternative format command
27+
28+
### Deployment
29+
- `npm run deploy` - Deploy to Cloudflare Workers
30+
- `npm run start:node` - Start production Node.js server
31+
32+
## Architecture
33+
34+
### Core Components
35+
36+
**Main Application (`src/index.ts`)**
37+
- Hono-based HTTP server with middleware pipeline
38+
- Handles multiple AI provider integrations
39+
- Routes: `/v1/chat/completions`, `/v1/completions`, `/v1/embeddings`, etc.
40+
41+
**Provider System (`src/providers/`)**
42+
- Modular provider implementations (OpenAI, Anthropic, Azure, etc.)
43+
- Each provider has standardized interface: `api.ts`, `chatComplete.ts`, `embed.ts`
44+
- Provider configs define supported features and transformations
45+
46+
**Middleware Pipeline**
47+
- `requestValidator` - Validates incoming requests
48+
- `hooks` - Pre/post request hooks
49+
- `memoryCache` - Response caching
50+
- `logger` - Request/response logging
51+
- `portkey` - Core Portkey-specific middleware for routing, guardrails, etc.
52+
53+
**Plugin System (`plugins/`)**
54+
- Guardrail plugins for content filtering, PII detection, etc.
55+
- Each plugin has `manifest.json` defining capabilities
56+
- Plugins are built separately with `npm run build-plugins`
57+
58+
### Key Concepts
59+
60+
**Configs** - JSON configurations that define:
61+
- Provider routing and fallbacks
62+
- Load balancing strategies
63+
- Guardrails and content filtering
64+
- Caching and retry policies
65+
66+
**Handlers** - Route-specific request processors in `src/handlers/`
67+
- Each AI API endpoint has dedicated handler
68+
- Stream handling for real-time responses
69+
- WebSocket support for realtime APIs
70+
71+
## File Structure
72+
73+
- `src/providers/` - AI provider integrations
74+
- `src/handlers/` - API endpoint handlers
75+
- `src/middlewares/` - Request/response middleware
76+
- `plugins/` - Guardrail and validation plugins
77+
- `cookbook/` - Example integrations and use cases
78+
- `conf.json` - Runtime configuration
79+
80+
## Testing Strategy
81+
82+
Tests are organized by component:
83+
- `src/tests/` - Core gateway functionality tests
84+
- `src/handlers/__tests__/` - Handler-specific tests
85+
- `plugins/*/**.test.ts` - Plugin tests
86+
- Test timeout: 30 seconds (configured in jest.config.js)
87+
88+
## Configuration
89+
90+
The gateway uses `conf.json` for runtime configuration. Sample config available in `conf_sample.json`.
91+
92+
Key environment variables and configuration handled through Hono's adapter system for multi-environment deployment.

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ COPY package*.json ./
99
COPY patches ./
1010

1111
# Upgrade system packages
12-
RUN apk update && apk upgrade --no-cache
12+
RUN apk upgrade --no-cache
1313

1414
# Upgrade npm to version 10.9.2
1515
RUN npm install -g [email protected]
@@ -29,7 +29,7 @@ RUN npm run build \
2929
FROM node:20-alpine
3030

3131
# Upgrade system packages
32-
RUN apk update && apk upgrade --no-cache
32+
RUN apk upgrade --no-cache
3333

3434
# Upgrade npm to version 10.9.2
3535
RUN npm install -g [email protected]

conf.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"patronus",
99
"pangea",
1010
"promptsecurity",
11-
"panw-prisma-airs"
11+
"panw-prisma-airs",
12+
"walledai"
1213
],
1314
"credentials": {
1415
"portkey": {

cookbook/monitoring-agents/Autogen_with_Telemetry.ipynb

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,20 @@
7474
"output_type": "stream",
7575
"name": "stdout",
7676
"text": [
77-
"Requirement already satisfied: pyautogen in /usr/local/lib/python3.10/dist-packages (0.2.28)\n",
77+
"Requirement already satisfied: ag2 in /usr/local/lib/python3.10/dist-packages (0.2.28)\n",
7878
"Collecting portkey-ai\n",
7979
" Downloading portkey_ai-1.3.2-py3-none-any.whl (86 kB)\n",
8080
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.3/86.3 kB\u001b[0m \u001b[31m2.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
81-
"\u001b[?25hRequirement already satisfied: diskcache in /usr/local/lib/python3.10/dist-packages (from pyautogen) (5.6.3)\n",
82-
"Requirement already satisfied: docker in /usr/local/lib/python3.10/dist-packages (from pyautogen) (7.1.0)\n",
83-
"Requirement already satisfied: flaml in /usr/local/lib/python3.10/dist-packages (from pyautogen) (2.1.2)\n",
84-
"Requirement already satisfied: numpy<2,>=1.17.0 in /usr/local/lib/python3.10/dist-packages (from pyautogen) (1.25.2)\n",
85-
"Requirement already satisfied: openai>=1.3 in /usr/local/lib/python3.10/dist-packages (from pyautogen) (1.30.5)\n",
86-
"Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from pyautogen) (24.0)\n",
87-
"Requirement already satisfied: pydantic!=2.6.0,<3,>=1.10 in /usr/local/lib/python3.10/dist-packages (from pyautogen) (2.7.1)\n",
88-
"Requirement already satisfied: python-dotenv in /usr/local/lib/python3.10/dist-packages (from pyautogen) (1.0.1)\n",
89-
"Requirement already satisfied: termcolor in /usr/local/lib/python3.10/dist-packages (from pyautogen) (2.4.0)\n",
90-
"Requirement already satisfied: tiktoken in /usr/local/lib/python3.10/dist-packages (from pyautogen) (0.7.0)\n",
81+
"\u001b[?25hRequirement already satisfied: diskcache in /usr/local/lib/python3.10/dist-packages (from ag2) (5.6.3)\n",
82+
"Requirement already satisfied: docker in /usr/local/lib/python3.10/dist-packages (from ag2) (7.1.0)\n",
83+
"Requirement already satisfied: flaml in /usr/local/lib/python3.10/dist-packages (from ag2) (2.1.2)\n",
84+
"Requirement already satisfied: numpy<2,>=1.17.0 in /usr/local/lib/python3.10/dist-packages (from ag2) (1.25.2)\n",
85+
"Requirement already satisfied: openai>=1.3 in /usr/local/lib/python3.10/dist-packages (from ag2) (1.30.5)\n",
86+
"Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from ag2) (24.0)\n",
87+
"Requirement already satisfied: pydantic!=2.6.0,<3,>=1.10 in /usr/local/lib/python3.10/dist-packages (from ag2) (2.7.1)\n",
88+
"Requirement already satisfied: python-dotenv in /usr/local/lib/python3.10/dist-packages (from ag2) (1.0.1)\n",
89+
"Requirement already satisfied: termcolor in /usr/local/lib/python3.10/dist-packages (from ag2) (2.4.0)\n",
90+
"Requirement already satisfied: tiktoken in /usr/local/lib/python3.10/dist-packages (from ag2) (0.7.0)\n",
9191
"Requirement already satisfied: httpx in /usr/local/lib/python3.10/dist-packages (from portkey-ai) (0.27.0)\n",
9292
"Collecting mypy<2.0,>=0.991 (from portkey-ai)\n",
9393
" Downloading mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\n",
@@ -96,28 +96,28 @@
9696
"Collecting mypy-extensions>=1.0.0 (from mypy<2.0,>=0.991->portkey-ai)\n",
9797
" Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\n",
9898
"Requirement already satisfied: tomli>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from mypy<2.0,>=0.991->portkey-ai) (2.0.1)\n",
99-
"Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.3->pyautogen) (3.7.1)\n",
100-
"Requirement already satisfied: distro<2,>=1.7.0 in /usr/lib/python3/dist-packages (from openai>=1.3->pyautogen) (1.7.0)\n",
101-
"Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from openai>=1.3->pyautogen) (1.3.1)\n",
102-
"Requirement already satisfied: tqdm>4 in /usr/local/lib/python3.10/dist-packages (from openai>=1.3->pyautogen) (4.66.4)\n",
99+
"Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.3->ag2) (3.7.1)\n",
100+
"Requirement already satisfied: distro<2,>=1.7.0 in /usr/lib/python3/dist-packages (from openai>=1.3->ag2) (1.7.0)\n",
101+
"Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from openai>=1.3->ag2) (1.3.1)\n",
102+
"Requirement already satisfied: tqdm>4 in /usr/local/lib/python3.10/dist-packages (from openai>=1.3->ag2) (4.66.4)\n",
103103
"Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from httpx->portkey-ai) (2024.2.2)\n",
104104
"Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.10/dist-packages (from httpx->portkey-ai) (1.0.5)\n",
105105
"Requirement already satisfied: idna in /usr/local/lib/python3.10/dist-packages (from httpx->portkey-ai) (3.7)\n",
106106
"Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.10/dist-packages (from httpcore==1.*->httpx->portkey-ai) (0.14.0)\n",
107-
"Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic!=2.6.0,<3,>=1.10->pyautogen) (0.7.0)\n",
108-
"Requirement already satisfied: pydantic-core==2.18.2 in /usr/local/lib/python3.10/dist-packages (from pydantic!=2.6.0,<3,>=1.10->pyautogen) (2.18.2)\n",
109-
"Requirement already satisfied: requests>=2.26.0 in /usr/local/lib/python3.10/dist-packages (from docker->pyautogen) (2.31.0)\n",
110-
"Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.10/dist-packages (from docker->pyautogen) (2.0.7)\n",
111-
"Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken->pyautogen) (2024.5.15)\n",
112-
"Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai>=1.3->pyautogen) (1.2.1)\n",
113-
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.26.0->docker->pyautogen) (3.3.2)\n",
107+
"Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic!=2.6.0,<3,>=1.10->ag2) (0.7.0)\n",
108+
"Requirement already satisfied: pydantic-core==2.18.2 in /usr/local/lib/python3.10/dist-packages (from pydantic!=2.6.0,<3,>=1.10->ag2) (2.18.2)\n",
109+
"Requirement already satisfied: requests>=2.26.0 in /usr/local/lib/python3.10/dist-packages (from docker->ag2) (2.31.0)\n",
110+
"Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.10/dist-packages (from docker->ag2) (2.0.7)\n",
111+
"Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken->ag2) (2024.5.15)\n",
112+
"Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai>=1.3->ag2) (1.2.1)\n",
113+
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.26.0->docker->ag2) (3.3.2)\n",
114114
"Installing collected packages: mypy-extensions, mypy, portkey-ai\n",
115115
"Successfully installed mypy-1.10.0 mypy-extensions-1.0.0 portkey-ai-1.3.2\n"
116116
]
117117
}
118118
],
119119
"source": [
120-
"!pip install -qU pyautogen portkey-ai"
120+
"!pip install -qU ag2 portkey-ai"
121121
]
122122
},
123123
{

0 commit comments

Comments
 (0)