Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions INSTALLATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Codex Remote Proxy - Installation Summary

## Cài đặt thành công!

Proxy đã được cài đặt từ source và chạy ngầm như một LaunchAgent service trên macOS.

### Thông tin cấu hình

- **Service name**: `dev.tuanle.codex-remote-proxy`
- **Proxy URL**: `http://127.0.0.1:56210`
- **Upstream URL**: `https://llm.tuanle.dev/v1`
- **Config file**: `~/.codex-remote-proxy/config.json`
- **Service plist**: `~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist`

### Quản lý service

Sử dụng script tiện ích:

```bash
cd /Users/justin/Dev/VibeLab/codex-remote-proxy
./manage-service.sh {start|stop|restart|status|health|logs}
```

Hoặc dùng launchctl trực tiếp:

```bash
# Start service
launchctl load ~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist

# Stop service
launchctl unload ~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist

# Check status
launchctl list | grep codex-remote-proxy
```

### Kiểm tra trạng thái

```bash
# Proxy status
cd /Users/justin/Dev/VibeLab/codex-remote-proxy/node
node bin/crp.mjs status --json

# Health check
curl http://127.0.0.1:56210/_proxy/health
```

### Log files

- Service output: `~/.codex-remote-proxy/service.log`
- Service errors: `~/.codex-remote-proxy/service.error.log`
- Proxy logs: `~/.codex-remote-proxy/proxy.log`

### Tính năng

- ✅ Tự động khởi động khi login (RunAtLoad)
- ✅ Tự động restart nếu crash (KeepAlive)
- ✅ Chạy ngầm không cần terminal
- ✅ Log đầy đủ cho debugging

### Sử dụng với Codex

1. Restart Codex Desktop
2. Sign in với ChatGPT account
3. Codex sẽ tự động forward requests qua proxy này đến upstream API của bạn

### Gỡ cài đặt

```bash
# Stop và remove service
launchctl unload ~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist
rm ~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist

# Xóa config (optional)
rm -rf ~/.codex-remote-proxy
```
73 changes: 73 additions & 0 deletions MODEL-OVERRIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Model Override Feature

## Tính năng mới: Override Model

Proxy giờ đây hỗ trợ override model name trong tất cả requests gửi đến upstream API.

### Cách sử dụng

#### Option 1: Lưu trong config file

Thêm `modelOverride` vào `~/.codex-remote-proxy/config.json`:

```json
{
"upstreamBaseUrl": "https://llm.tuanle.dev/v1",
"apiKey": "sk-your-key",
"listenHost": "127.0.0.1",
"listenPort": 56210,
"captureEnabled": false,
"modelOverride": "claude-opus-4"
}
```

#### Option 2: CLI flag

```bash
crp start --model-override "claude-opus-4"
```

#### Option 3: Environment variable

```bash
export CRP_MODEL_OVERRIDE="claude-opus-4"
crp start
```

### Ví dụ model names

- `claude-opus-4` - Claude Opus 4
- `claude-sonnet-4` - Claude Sonnet 4
- `gpt-4o` - GPT-4 Optimized
- `gpt-4-turbo` - GPT-4 Turbo
- Hoặc bất kỳ model name nào mà upstream API của bạn hỗ trợ

### Cách hoạt động

Khi `modelOverride` được set:
- Tất cả requests từ Codex sẽ có `model` field được thay thế bằng giá trị `modelOverride`
- Nếu không set, proxy sẽ giữ nguyên model từ Codex (hoặc convert `gpt-5.4` → `gpt-5.5` theo mặc định)

### Kiểm tra config

```bash
curl http://127.0.0.1:56210/_proxy/health | jq .modelOverride
```

### Thay đổi model

1. Sửa file config:
```bash
nano ~/.codex-remote-proxy/config.json
```

2. Restart service:
```bash
cd /Users/justin/Dev/VibeLab/codex-remote-proxy
./manage-service.sh restart
```

3. Verify:
```bash
./manage-service.sh health | jq .modelOverride
```
162 changes: 162 additions & 0 deletions USAGE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
# Codex Remote Proxy - Hướng dẫn sử dụng

## Đã cài đặt thành công!

### Thông tin cấu hình

- **Service**: `dev.tuanle.codex-remote-proxy`
- **Proxy URL**: `http://127.0.0.1:56210`
- **Upstream**: `https://llm.tuanle.dev/v1`
- **Model**: `claude-opus-4` (có thể thay đổi)

### Quản lý service

```bash
cd /Users/justin/Dev/VibeLab/codex-remote-proxy

# Xem status
./manage-service.sh status

# Restart
./manage-service.sh restart

# Stop
./manage-service.sh stop

# Start
./manage-service.sh start

# Health check
./manage-service.sh health

# Xem logs
./manage-service.sh logs
```

### Thay đổi model

**Cách nhanh nhất: Dùng script helper**

```bash
cd /Users/justin/Dev/VibeLab/codex-remote-proxy

# Thay đổi model
./change-model.sh claude-opus-4-7
./change-model.sh claude-sonnet-4
./change-model.sh gpt-4o
```

Script này sẽ tự động:
- Cập nhật cả 2 file config (user + runtime)
- Restart service
- Verify model đã đổi thành công

**Cách 1: Sửa trực tiếp config file**

```bash
# Edit config
nano ~/.codex-remote-proxy/config.json

# Thay đổi dòng:
"modelOverride": "claude-opus-4"

# Thành model bạn muốn, ví dụ:
"modelOverride": "gpt-4o"

# Restart service
./manage-service.sh restart
```

**Cách 2: Sửa runtime config**

```bash
# Edit runtime config
nano ~/.codex-remote-proxy/node/proxy-config.json

# Tìm và sửa:
"modelOverride": "claude-opus-4"

# Restart service
./manage-service.sh restart
```

**Lưu ý:** Config sẽ được giữ nguyên sau khi restart, không bị ghi đè nữa!

### Các model có thể dùng

- `claude-opus-4` - Claude Opus 4 (đang dùng)
- `claude-sonnet-4` - Claude Sonnet 4
- `claude-haiku-4` - Claude Haiku 4
- `gpt-4o` - GPT-4 Optimized
- `gpt-4-turbo` - GPT-4 Turbo
- `gpt-3.5-turbo` - GPT-3.5 Turbo
- Hoặc bất kỳ model nào upstream API hỗ trợ

### Kiểm tra config hiện tại

```bash
# Xem model đang dùng
curl -s http://127.0.0.1:56210/_proxy/health | jq .modelOverride

# Xem toàn bộ config
./manage-service.sh health
```

### Sử dụng với Codex

1. Restart Codex Desktop
2. Sign in với ChatGPT account
3. Codex sẽ tự động forward requests qua proxy
4. Tất cả requests sẽ dùng model bạn đã config

### Troubleshooting

**Model không thay đổi sau khi restart:**
```bash
# Kiểm tra config file
cat ~/.codex-remote-proxy/node/proxy-config.json | jq .upstream.modelOverride

# Nếu vẫn sai, sửa trực tiếp và restart
nano ~/.codex-remote-proxy/node/proxy-config.json
./manage-service.sh restart
```

**Service không start:**
```bash
# Xem logs
./manage-service.sh logs

# Hoặc
tail -50 ~/.codex-remote-proxy/service.error.log
```

**Proxy không response:**
```bash
# Check service status
launchctl list | grep codex-remote-proxy

# Restart service
./manage-service.sh restart
```

### Files quan trọng

- Config: `~/.codex-remote-proxy/config.json`
- Runtime config: `~/.codex-remote-proxy/node/proxy-config.json`
- Service plist: `~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist`
- Logs: `~/.codex-remote-proxy/service.log`
- Error logs: `~/.codex-remote-proxy/service.error.log`

### Gỡ cài đặt

```bash
# Stop service
./manage-service.sh stop

# Remove service
launchctl unload ~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist
rm ~/Library/LaunchAgents/dev.tuanle.codex-remote-proxy.plist

# Xóa config (optional)
rm -rf ~/.codex-remote-proxy
```
57 changes: 57 additions & 0 deletions change-model.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/bash

# Change Model Script
# Usage: ./change-model.sh <model-name>

if [ -z "$1" ]; then
echo "Usage: $0 <model-name>"
echo ""
echo "Examples:"
echo " $0 claude-opus-4-7"
echo " $0 claude-sonnet-4"
echo " $0 gpt-4o"
exit 1
fi

MODEL="$1"
USER_CONFIG="$HOME/.codex-remote-proxy/config.json"
RUNTIME_CONFIG="$HOME/.codex-remote-proxy/node/proxy-config.json"

echo "Changing model to: $MODEL"
echo ""

# Update user config
if [ -f "$USER_CONFIG" ]; then
echo "Updating user config..."
jq --arg model "$MODEL" '.modelOverride = $model' "$USER_CONFIG" > "$USER_CONFIG.tmp" && mv "$USER_CONFIG.tmp" "$USER_CONFIG"
echo "✓ Updated: $USER_CONFIG"
else
echo "⚠ User config not found: $USER_CONFIG"
fi

# Update runtime config
if [ -f "$RUNTIME_CONFIG" ]; then
echo "Updating runtime config..."
jq --arg model "$MODEL" '.upstream.modelOverride = $model' "$RUNTIME_CONFIG" > "$RUNTIME_CONFIG.tmp" && mv "$RUNTIME_CONFIG.tmp" "$RUNTIME_CONFIG"
echo "✓ Updated: $RUNTIME_CONFIG"
else
echo "⚠ Runtime config not found: $RUNTIME_CONFIG"
fi

echo ""
echo "Restarting service..."
cd /Users/justin/Dev/VibeLab/codex-remote-proxy
./manage-service.sh restart > /dev/null 2>&1

sleep 2

echo ""
echo "Verifying..."
CURRENT_MODEL=$(curl -s http://127.0.0.1:56210/_proxy/health | jq -r '.modelOverride // "null"')

if [ "$CURRENT_MODEL" = "$MODEL" ]; then
echo "✓ Model changed successfully to: $CURRENT_MODEL"
else
echo "✗ Failed to change model. Current: $CURRENT_MODEL, Expected: $MODEL"
exit 1
fi
Loading