Add GitHub Copilot API proxy integration to LLM Gateway: * Implement copilot-bridge service: - HTTP wrapper managing copilot-api (GitHub Copilot API proxy) - OpenAI-compatible /v1/chat/completions endpoint (port 3252) - Graceful startup and SIGTERM shutdown handling - Health check endpoint with service diagnostics * Register copilot-bridge in provider fallback chain: - Position: After OpenAI, before free LLM APIs (tier 4) - Rate limit: 60 requests/min (GitHub Copilot API limit) - Models: gpt-4 (reasoning), gpt-3.5-turbo (medium) - Authentication: GitHub Copilot subscription (internal to copilot-api) * Update PM2 ecosystem configuration: - Add copilot-bridge service definition (port 3252) - Configure COPILOT_BRIDGE_URL in gateway environment - Add copilot to LLM_PROVIDERS list * Enhance deployment automation: - Update ensure-bridges.sh with copilot-bridge deployment - Copy service files from repo to /opt/copilot-bridge - Run npm install for copilot-api dependency * Comprehensive documentation: - Expand DEPLOYMENT-BRIDGES.md with copilot-bridge section - Prerequisites: Node.js 20+, GitHub Copilot subscription - Authentication workflow: npm run auth with GitHub OAuth - Troubleshooting: subscription verification, auth cache reset Provider chain now supports: 1. Ollama (local, free) 2. claude-bridge (Claude subscription) 3. openai-bridge (OpenAI subscription) 4. copilot-bridge (GitHub Copilot subscription) ← NEW 5. Free APIs: Cerebras, Groq, Mistral, NVIDIA, Cloudflare Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
8.0 KiB
Bridge Services Deployment Guide
Overview
This document covers deploying bridge services to Erik for third-party LLM provider integration:
- openai-bridge (Port 3251): OpenAI ChatGPT and Codex API wrapper
- copilot-bridge (Port 3252): GitHub Copilot API proxy
Architecture
- openai-bridge (Port 3251): HTTP wrapper around OpenAI CLI, provides OpenAI-compatible /v1/chat/completions endpoint
- copilot-bridge (Port 3252): HTTP proxy managing GitHub Copilot API (copilot-api), provides OpenAI-compatible /v1/chat/completions endpoint
- Integration: Both registered in
external-providers.tsas fallback providers - Authentication:
- openai-bridge: Uses OPENAI_API_KEY (OpenAI subscription required)
- copilot-bridge: Uses GitHub Copilot subscription (auth handled internally by copilot-api)
Prerequisites on Erik
- OpenAI CLI tool:
openaicommand available (homebrew:brew install openai-cli) - Node.js 20+ installed
- PM2 process manager available
- /opt directory writable (for service deployment)
- /var/log/llm-gateway directory exists for logs
Deployment Steps
1. Automatic Setup (Recommended)
The ensure-bridges.sh script handles automatic deployment:
# Run on Erik
cd /opt/llm-gateway
bash scripts/ensure-bridges.sh
This will:
- Create
/opt/openai-bridgedirectory if missing - Deploy
server.jsandpackage.json - Create logs directory
2. Manual Setup (Alternative)
If automatic script fails, deploy manually:
# On Erik
mkdir -p /opt/openai-bridge /var/log/llm-gateway
# Copy openai-bridge files from repo
cp /opt/llm-gateway/openai-bridge/server.js /opt/openai-bridge/
cp /opt/llm-gateway/openai-bridge/package.json /opt/openai-bridge/
3. Configuration
Update ecosystem.config.cjs
Edit /opt/llm-gateway/deploy/ecosystem.config.cjs:
env: {
OPENAI_API_KEY: 'sk-proj-xxxxx...', // Your OpenAI subscription key
OPENAI_BRIDGE_PORT: 3251,
OPENAI_MODEL: 'gpt-4-turbo',
}
Important: Do NOT commit API keys to git. Use environment variables or .env files.
4. Deploy with PM2
# On Erik
cd /opt/llm-gateway
pm2 start deploy/ecosystem.config.cjs --update-env
This will start:
llm-gateway(main service, port 3103)openai-bridge(ChatGPT bridge, port 3251)llm-learning(auto-learning engine)
5. Verification
# Check service status
pm2 status
# Health check
curl http://localhost:3251/health
# Sample request
curl -X POST http://localhost:3251/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4-turbo",
"messages": [{"role": "user", "content": "Hello"}]
}'
# View logs
pm2 logs openai-bridge
Environment Variables
| Variable | Required | Default | Notes |
|---|---|---|---|
| OPENAI_API_KEY | Yes | (empty) | OpenAI subscription API key |
| OPENAI_BRIDGE_PORT | No | 3251 | Service port |
| OPENAI_MODEL | No | gpt-4-turbo | Default model |
| OPENAI_BRIDGE_URL | Yes* | http://localhost:3251 | Set in ecosystem.config.cjs |
*Required in gateway's environment for proper routing
Copilot Bridge Deployment
Prerequisites on Erik
- Node.js 20+ installed
- PM2 process manager available
- GitHub account with active GitHub Copilot subscription
- /opt directory writable (for service deployment)
- /var/log/llm-gateway directory exists for logs
Deployment Steps
1. Automatic Setup (Recommended)
The ensure-bridges.sh script handles automatic deployment:
# Run on Erik
cd /opt/llm-gateway
bash scripts/ensure-bridges.sh
This will:
- Create
/opt/copilot-bridgedirectory if missing - Deploy
server.jsandpackage.json - Run
npm installto install dependencies - Create logs directory
2. Manual Setup (Alternative)
If automatic script fails, deploy manually:
# On Erik
mkdir -p /opt/copilot-bridge /var/log/llm-gateway
# Copy copilot-bridge files from repo
cp /opt/llm-gateway/copilot-bridge/server.js /opt/copilot-bridge/
cp /opt/llm-gateway/copilot-bridge/package.json /opt/copilot-bridge/
# Install dependencies
cd /opt/copilot-bridge
npm install
3. Authentication
GitHub Copilot authentication requires user interaction and is per-machine:
# On Erik (as the user who will run PM2)
cd /opt/copilot-bridge
npm run auth
This will:
- Open a browser window (or provide a GitHub auth URL)
- Prompt you to authorize GitHub Copilot API access
- Save tokens locally in
~/.copilot-api/directory
4. Configuration
Update deploy/ecosystem.config.cjs:
{
name: 'copilot-bridge',
env: {
COPILOT_BRIDGE_PORT: 3252,
COPILOT_API_INTERNAL_PORT: 4141,
}
}
The gateway configuration should include:
COPILOT_BRIDGE_URL: 'http://localhost:3252'
5. Verification
# Check service status
pm2 status | grep copilot-bridge
# Health check
curl http://localhost:3252/health
# Sample request
curl -X POST http://localhost:3252/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [{"role": "user", "content": "Write a hello world function"}]
}'
# View logs
pm2 logs copilot-bridge
Troubleshooting
Bridge Service Won't Start
# Check if openai CLI is installed
which openai
openai --version
# Install if missing (requires homebrew)
brew install openai-cli
Port 3251 Already in Use
# Find process using port
lsof -i :3251
# Kill process if needed
kill -9 <PID>
OPENAI_API_KEY Not Configured
# Check environment
pm2 show openai-bridge | grep OPENAI_API_KEY
# Update if missing
pm2 set openai-bridge OPENAI_API_KEY "sk-proj-xxxxx..."
pm2 restart openai-bridge
Health Check Fails
# Manual test of openai CLI
OPENAI_API_KEY="sk-proj-xxxxx..." openai api chat.completions.create \
-m gpt-4-turbo \
-g user "hello" \
-t 0.3 \
-M 100
Copilot Bridge Won't Start
Authentication Failed
# Clear cached tokens and re-authenticate
rm -rf ~/.copilot-api
cd /opt/copilot-bridge
npm run auth
Port 4141 Already in Use
# Find process using internal copilot-api port
lsof -i :4141
# Kill if needed
kill -9 <PID>
GitHub Copilot Subscription Issues
Verify you have an active GitHub Copilot subscription:
- Check https://github.com/settings/copilot
- Verify payment method is valid
- Re-authenticate:
npm run auth - Test directly:
npm run debug
Port 3252 Already in Use
# Find process using copilot-bridge port
lsof -i :3252
# Kill if needed
kill -9 <PID>
Integration with LLM Gateway
Once deployed, openai-bridge is automatically:
- Registered in provider fallback chain (after claude-bridge, cerebras, groq, etc.)
- Used when:
- Ollama is unavailable
- Request specifically targets "openai" or "chatgpt" provider
- Confidence threshold requires higher-tier reasoning
- Monitored for:
- Rate limits (90 requests/min)
- Response quality and latency
- Error rates
Rollback / Removal
# Stop openai-bridge service
pm2 stop openai-bridge
pm2 delete openai-bridge
# Remove service directory (keeps config for reinstall)
rm -rf /opt/openai-bridge
# Or keep for reinstall (without logs)
rm -rf /opt/openai-bridge/node_modules
Provider Fallback Chain
Providers are tried in order of tier and availability:
- Ollama (local, fastest, free)
- claude-bridge (Claude subscription)
- openai-bridge (OpenAI subscription)
- copilot-bridge (GitHub Copilot subscription) ← NEW
- Free LLM APIs (Cerebras, Groq, Mistral, NVIDIA, Cloudflare)
When a higher-tier provider is unavailable or rate-limited, the gateway automatically routes to the next available provider.
Next Steps
- Cost Tracking: Monitor API usage and costs across providers
- Monitoring: Add Prometheus metrics for bridge health and latency
- Performance Optimization: Cache responses and optimize provider selection
- Additional Bridges: Anthropic Claude API, Azure OpenAI, Cohere, others
Last Updated: 2026-04-25
Status: Ready for deployment (OpenAI + Copilot)