# Token Placement Pitfall — 2026-07-04 ## Ситуация Сервер chatgpt2api-pro на `:5005` отвечал на `/v1/models` (13 моделей), но `/v1/chat/completions` возвращал: ```json {"detail": "Could not parse your authentication token. Please try signing in again."} ``` ## Диагностика 1. Сервер читает ChatGPT-токены из `data/token.txt` (через `utils/globals.py`): ```python TOKENS_FILE = os.path.join(DATA_FOLDER, "token.txt") ``` 2. Файл `data/token.txt` был **0 байт** (пустой) 3. Токен лежал в `tokens.txt` (корень проекта) — это пользовательский бэкап, сервер его **не читает** ## Проверка ```bash # Содержимое data/token.txt cat data/token.txt | wc -c # Если 0 — токенов нет # Проверка через эндпоинт curl -s http://localhost:5005/tokens # Internal Server Error = data/token.txt пуст или нет data/ папки ``` ## Фикс ```bash # Скопировать токен в правильное место cp tokens.txt data/token.txt # Или через API (без рестарта) curl -X POST "http://localhost:5005/tokens/add/$(cat tokens.txt)" # Перезапустить сервер taskkill //F //PID cd "C:/Users/User/AppData/Local/hermes/chatgpt2api-pro" .venv/Scripts/python -u app.py ``` ## Проверка после фикса ```bash # 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-токеном — это работает.