# Claude Code через LaoZhang API

Интеграция Claude Code с LaoZhang API — прокси к Anthropic Claude с более стабильным доступом.

## Обзор

Пайплайн генерации видео использует Claude Code для создания промптов (Stage 2-4). По умолчанию запросы идут через LaoZhang API вместо прямого Anthropic API.

**Преимущества:**
- Более стабильный доступ к API
- Доступны все модели Claude (Opus, Sonnet, Haiku)
- Поддержка thinking mode
- Работает Vision API

## Быстрый старт

```bash
# Интерактивный режим (Opus Thinking по умолчанию)
./scripts/claude_laozhang.sh

# С промптом
./scripts/claude_laozhang.sh -p "Explain this code"

# Другая модель
./scripts/claude_laozhang.sh --haiku -p "Quick question"
```

## Wrapper скрипт: claude_laozhang.sh

### Использование

```bash
./scripts/claude_laozhang.sh [OPTIONS] [claude args...]
```

### Опции выбора модели

| Флаг | Модель | Описание |
|------|--------|----------|
| `--thinking` | claude-opus-4-5-20251101-thinking | Opus 4.5 с chain-of-thought **(DEFAULT)** |
| `--opus` | claude-opus-4-5-20251101 | Opus 4.5 без thinking |
| `--sonnet45` | claude-sonnet-4-5-20250929 | Sonnet 4.5 |
| `--sonnet` | claude-sonnet-4-20250514 | Sonnet 4 (хорош для кода) |
| `--haiku` | claude-haiku-4-5-20251001 | Haiku 4.5 (быстрый, дешевый) |
| `--model <id>` | любой | Кастомная модель |

### Другие опции

```bash
--list      # Показать список доступных моделей
--help, -h  # Справка
```

### Примеры

```bash
# Интерактивный режим с Opus Thinking
./scripts/claude_laozhang.sh

# Non-interactive с промптом
./scripts/claude_laozhang.sh -p "What is the capital of France?"

# Быстрый вопрос через Haiku
./scripts/claude_laozhang.sh --haiku -p "What is 2+2?"

# Sonnet для кодирования
./scripts/claude_laozhang.sh --sonnet -p "Write a Python function to..."

# Кастомная модель
./scripts/claude_laozhang.sh --model claude-3-7-sonnet-20250219 -p "..."

# Все аргументы после модели передаются claude code
./scripts/claude_laozhang.sh --opus --verbose -p "Debug this"
```

## Доступные модели через LaoZhang

| Model ID | Описание | Примечание |
|----------|----------|------------|
| `claude-opus-4-5-20251101-thinking` | Opus 4.5 с thinking | Самый мощный, используется в пайплайне |
| `claude-opus-4-5-20251101` | Opus 4.5 | Без thinking mode |
| `claude-sonnet-4-5-20250929` | Sonnet 4.5 | Баланс качества и скорости |
| `claude-sonnet-4-20250514` | Sonnet 4 | Хорош для кодирования |
| `claude-3-7-sonnet-20250219` | Claude 3.7 Sonnet | Предыдущее поколение |
| `claude-haiku-4-5-20251001` | Haiku 4.5 | Быстрый и дешевый |

## Интеграция в пайплайн

### Переменная окружения USE_CLAUDE_LAOZHANG

Контролирует какой Claude использовать в `full_pipeline_v2.py`:

```bash
# Использовать LaoZhang API (по умолчанию)
USE_CLAUDE_LAOZHANG=1 python full_pipeline_v2.py "https://..."

# Использовать прямой claude CLI (ваша подписка Anthropic)
USE_CLAUDE_LAOZHANG=0 python full_pipeline_v2.py "https://..."
```

По умолчанию: `USE_CLAUDE_LAOZHANG=1` (LaoZhang включен).

### Переменная окружения ALLOW_CLAUDE_FALLBACK

Контролирует поведение при ошибках Claude API (квота, недоступность):

```bash
# По умолчанию: abort при ошибке Claude (не тратить деньги на NanoBanana/Veo3)
python full_pipeline_v2.py "https://..."

# Разрешить fallback на generic промпты (старое поведение)
ALLOW_CLAUDE_FALLBACK=1 python full_pipeline_v2.py "https://..."
```

**По умолчанию: `ALLOW_CLAUDE_FALLBACK=0`** — пайплайн прерывается если Claude не может сгенерировать промпты.

Логика:
- Claude API дешевый (~$0.01-0.10 за вызов)
- NanoBanana + Veo3 дорогие ($0.30-1.00 за видео)
- Если Claude недоступен → лучше прервать, чем тратить деньги на generic промпты

### Логика переключения в коде

```python
# full_pipeline_v2.py, строки 273-289
USE_CLAUDE_LAOZHANG = os.environ.get("USE_CLAUDE_LAOZHANG", "1") == "1"

if USE_CLAUDE_LAOZHANG:
    # Use LaoZhang API wrapper (Opus Thinking, cheaper than direct Anthropic)
    CLAUDE_CLI = str(SCRIPT_DIR / "claude_laozhang.sh")
else:
    # Use direct claude CLI
    CLAUDE_CLI = "/home/videobot/.local/bin/claude"  # или другой путь
```

## Конфигурация

### Требования

1. API ключ в `.env`:
   ```
   LAOZHANG_KEY=sk-...
   ```

2. Wrapper скрипт: `scripts/claude_laozhang.sh`

### Переменные окружения (устанавливаются wrapper'ом)

Wrapper автоматически устанавливает эти переменные при запуске:

```bash
ANTHROPIC_BASE_URL="https://api.laozhang.ai"
ANTHROPIC_AUTH_TOKEN="$LAOZHANG_KEY"
ANTHROPIC_MODEL="<selected_model>"
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1"
```

`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` отключает телеметрию и статистику.

## Диагностика

### Проверить работу

```bash
# Простой тест
./scripts/claude_laozhang.sh --haiku -p "Say hello"

# Тест Vision (чтение изображения)
./scripts/claude_laozhang.sh --haiku -p "Read /path/to/image.jpg and describe it"

# Проверить модель
./scripts/claude_laozhang.sh --list
```

### Вывод при запуске

```
==========================================
Claude Code via LaoZhang API
==========================================
Model: claude-opus-4-5-20251101-thinking
API Base: https://api.laozhang.ai
==========================================
```

### Проблемы

| Проблема | Решение |
|----------|---------|
| "LAOZHANG_KEY not found" | Добавить ключ в `.env` |
| Ошибка API / quota not enough | Проверить баланс LaoZhang, пополнить |
| Пайплайн прерывается "Claude failed" | Это нормально — fail-fast при ошибке API. Пополните баланс |
| Хочу продолжить с generic промптами | `ALLOW_CLAUDE_FALLBACK=1` (не рекомендуется) |
| Vision не работает | Vision поддерживается, проверить путь к файлу |

## Сравнение: LaoZhang vs Direct Anthropic

| Аспект | LaoZhang | Direct Anthropic |
|--------|----------|------------------|
| Стабильность | Более стабильный | Зависит от региона |
| Модели | Все Claude | Все Claude |
| Thinking mode | Да | Да |
| Vision | Да | Да |
| Настройка | Через wrapper | Через settings.json |
| Телеметрия | Отключена | Зависит от настроек |

## Файлы

```
scripts/
├── claude_laozhang.sh      # Wrapper для LaoZhang API
├── full_pipeline_v2.py     # USE_CLAUDE_LAOZHANG опция
└── ...

.env
└── LAOZHANG_KEY=...        # API ключ
```
