https://github.com/xcodebuild/pi-gpt-cache
https://github.com/xcodebuild/pi-gpt-cache
Last synced: 21 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/xcodebuild/pi-gpt-cache
- Owner: xcodebuild
- License: mit
- Created: 2026-05-12T02:05:13.000Z (about 1 month ago)
- Default Branch: master
- Last Pushed: 2026-05-12T02:08:02.000Z (about 1 month ago)
- Last Synced: 2026-05-12T04:14:50.798Z (about 1 month ago)
- Language: TypeScript
- Size: 6.84 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pi-gpt-cache
A [Pi](https://pi.dev/) package that improves OpenAI Responses API prompt caching by adding `prompt_cache_key` to OpenAI provider requests.
## What it does
This package registers a Pi extension that overrides the existing `openai` provider's `openai-responses` streaming implementation. It keeps Pi's built-in OpenAI models, delegates request handling to Pi's built-in `streamSimpleOpenAIResponses`, and injects `prompt_cache_key` into the final Responses API payload.
The cache key is Pi's `options.sessionId`, matching the Codex client's default behavior of deriving `promptCacheKey` from the session ID. Requests from the same Pi session can share OpenAI prompt-cache affinity. If another hook already sets `prompt_cache_key`, this extension leaves that value unchanged.
## Installation
Install as a Pi package:
```sh
pi install npm:pi-gpt-cache
```
For a project-local install:
```sh
pi install -l npm:pi-gpt-cache
```
To test directly from a checkout before publishing:
```sh
pi -e ./extensions/openai-responses-prompt-cache.ts
# or
pi install ./path/to/pi-gpt-cache
```
## Configuration
No configuration is required. The prompt cache key always comes from the Pi session id.
## Repository layout
- `extensions/openai-responses-prompt-cache.ts` - Pi extension entrypoint included in the published npm package.
## How it works
The extension calls:
```ts
pi.registerProvider("openai", {
api: "openai-responses",
streamSimple(...) {
// delegates to streamSimpleOpenAIResponses(...)
// and adds prompt_cache_key to the payload
},
});
```
Because the provider override does not define `models`, Pi preserves its existing OpenAI model list and only replaces the streaming implementation.
## Development
Preview the npm package contents:
```sh
npm run pack:dry-run
```
Publish when ready:
```sh
npm publish
```
Make sure the package name in `package.json` is available on npm, or rename it before publishing.
## License
MIT