Files
autoreg-skills-max/skills/chat2api-proxy/references/token-placement-pitfall-2026-07-04.md

2.3 KiB
Raw Blame History

Token Placement Pitfall — 2026-07-04

Ситуация

Сервер chatgpt2api-pro на :5005 отвечал на /v1/models (13 моделей), но /v1/chat/completions возвращал:

{"detail": "Could not parse your authentication token. Please try signing in again."}

Диагностика

  1. Сервер читает ChatGPT-токены из data/token.txt (через utils/globals.py):
    TOKENS_FILE = os.path.join(DATA_FOLDER, "token.txt")
    
  2. Файл data/token.txt был 0 байт (пустой)
  3. Токен лежал в tokens.txt (корень проекта) — это пользовательский бэкап, сервер его не читает

Проверка

# Содержимое data/token.txt
cat data/token.txt | wc -c
# Если 0 — токенов нет

# Проверка через эндпоинт
curl -s http://localhost:5005/tokens
# Internal Server Error = data/token.txt пуст или нет data/ папки

Фикс

# Скопировать токен в правильное место
cp tokens.txt data/token.txt

# Или через API (без рестарта)
curl -X POST "http://localhost:5005/tokens/add/$(cat tokens.txt)"

# Перезапустить сервер
taskkill //F //PID <pid>
cd "C:/Users/User/AppData/Local/hermes/chatgpt2api-pro"
.venv/Scripts/python -u app.py

Проверка после фикса

# data/token.txt должен быть ~1980 байт
ls -la data/token.txt

# Chat completion
curl -s -X POST http://127.0.0.1:5005/v1/chat/completions \
  -H "Authorization: Bearer $(cat .env | grep ^AUTHORIZATION= | cut -d= -f2)" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.5","messages":[{"role":"user","content":"hi"}],"max_tokens":10}'
# Должен вернуть choices[0].message.content

Два типа токенов

Файл Назначение Длина
.env → AUTHORIZATION Аутентификация клиентов (Bearer-токен в запросах) 1979 (JWT)
data/token.txt ChatGPT токен для бэкенд-запросов к chatgpt.com 1979 (JWT) или 45 (refresh)

Оба могут быть одним и тем же JWT-токеном — это работает.