slurpojoe bolts on a cheaper AI engine and a way around OpenAI's meter

This fork adds a fourth AI model option and a trick to run OpenAI calls off an existing ChatGPT login instead of a paid API key.

infrastructureintegration

slurpojoe is chasing two things at once: lower inference costs and a way to stop paying OpenAI per call. The first move is clean and low-risk - it adds DeepSeek, a lower-cost AI model maker, as a fourth engine option alongside the existing providers, complete with streaming, tool use, and a tested wiring job. If you just want a cheaper model on the menu, this part is easy to lift.

The second move is the spicy one. Instead of a paid OpenAI API key, the fork quietly reuses a local ChatGPT/Codex desktop login to authorize calls, refreshing the token in the background. Clever, but worth a hard look before anyone copies it: it leans on a setup that may run against OpenAI's terms of service, could break if OpenAI changes anything, and only works for a single self-hosted instance, not a multi-user product.

So what Anyone weighing the running cost of a legal-AI deployment should look - one half is a safe cost cut, the other is a gamble dressed as one.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

4 commits from slurpojoe/make, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
a3370b11 Add design spec: DeepSeek provider + Codex OAuth integration slurpojoe 2026-05-28 ↗ GitHub
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
b0b317aa Revise design spec with verified Codex OAuth and additional fixes slurpojoe 2026-05-28 ↗ GitHub
commit body
- Verified Codex refresh endpoint and JSON body format against openai/codex
- DeepSeek env-only (avoids DB migration for user_api_keys CHECK constraint)
- Add type extensions (UserApiKeys, ApiKeyState, Provider unions)
- Tilde expansion, atomic file write, in-flight refresh locking
- Thinking parameter only for deepseek-v4-pro
- Switch-based router with exhaustive check
- Default model fallback when stored/default is unavailable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8b2e0517 feat: add DeepSeek provider and Codex OAuth token support slurpojoe 2026-06-05 ↗ GitHub
commit body
- New: deepseek.ts - Chat Completions streaming, tool calls, thinking for v4-pro
- New: codexAuth.ts - JWT decode, auto-refresh, concurrent-refresh dedup, atomic write
- Extended: types, models, exhaustive switch dispatch, userApiKeys, user routes
- Frontend: DeepSeek group in ModelToggle, modelAvailability, ApiKeyState, account settings
- UX: useSelectedModel falls back to first available model if default unconfigured
- Secrets: allowedDevOrigins moved from next.config.ts to NEXT_DEV_ALLOWED_ORIGINS env var
- Tests: vitest setup + 9 tests covering codexAuth and deepseek error paths
- Fix: ChatInput.tsx declaration order (apiKeys used before declaration)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6d67aa19 fix: flush pendingText on maxIter exhaustion; remove dead ModelToggle exports slurpojoe 2026-06-05 ↗ GitHub
commit body
- deepseek.ts: hoist pendingText before loop + flush after loop ends
  to prevent silent data loss when tool-call iteration limit is reached
- deepseek.ts: annotate "developer" role as unverified for v4-flash
- ModelToggle.tsx: remove DEEPSEEK_MID/LOW_MODELS (unused dead code;
  backend/src/lib/llm/models.ts is the authoritative source)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-642.md from inside the repo you want the changes in.

⬇ Download capture-thread-642.md