+
Skip to content

paranoik1/duck-local-chat-api

Repository files navigation

🦆 duck-local-chat-api

Локальный API-сервер для общения с AI-моделями через duck.ai, без необходимости использования браузера.

Этот проект позволяет запускать локальный FastAPI-сервер, через который вы можете отправлять запросы к AI-моделям (например, GPT-4o), используя интерфейс duck.ai — но уже программно, через API.


🚀 Зачем это нужно?

Duck.ai не предоставляет публичного API, но позволяет общаться с мощными моделями бесплатно.
duck-local-chat-api обходит это ограничение, автоматически извлекая валидные заголовки запросов через браузерный скрипт, и предоставляет простой HTTP-интерфейс для интеграции в свои приложения.


⚙️ Как это работает?

  • Использует Playwright + Chromium в фоне (на виртуальном дисплее) для имитации реального пользователя.
  • Автоматически проходит проверки (если есть) и отправляет тестовый запрос, чтобы получить действующие заголовки (включая vqd).
  • Заголовки сохраняются и используются для последующих запросов к API duck.ai.
  • Всё работает локально, без передачи ваших данных куда-либо.

🖥️ Технологии

  • FastAPI — для создания API
  • Playwright (patchright) — для автоматизации (undetected)
  • xvfbwrapper — создаёт виртуальный экран (для headless-работы)
  • notify-send — Linux-уведомления о статусе
  • Основан на mrgick/duck_chat

⚠️ Поддерживается только Linux (из-за xvfb и notify-send).


📦 Установка

git clone https://github.com/paranoik1/duck-local-chat-api
cd duck-local-chat-api

# Установка через poetry
poetry install --no-root
# Создание виртуального окружения
poetry env use python3.13
# Вход в виртуальное окружение
$(poetry env activate)

# Можно установить с помощью pip
# Создание python окружение
python -m venv .venv
# Активирование его
source .venv/bin/activate
# Установка пакетов из requirements.txt
pip install -r requirements.txt

Убедитесь, что у вас установлены xvfb и libnotify-bin:

sudo apt install xvfb libnotify-bin

▶️ Запуск

$ python main.py
usage: main.py [-h] [--host HOST] [--port PORT] [--log-level LOG_LEVEL] [-f]

Запуск сервиса

options:
  -h, --help            show this help message and exit
  --host HOST           Хост для сервера (по умолчанию 127.0.0.1)
  --port PORT           Порт для сервера (по умолчанию 8000)
  --log-level LOG_LEVEL
                        Уровень логирования (например, debug, info, warning, error, critical)
  -f                    Пропустить проверку needs_editing и запустить generate_models без условий

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

Отправить сообщение

curl -X POST http://127.0.0.1:8000/chat \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Привет! Кто ты?",
    "model": "gpt-4o-mini"
  }'

Доступные модели duck_chat/models/model_type.py:

  • Gpt4OMinigpt-4o-mini
  • Gpt4OMini = gpt-4o-mini
  • Gpt5Mini = gpt-5-mini
  • GptOss120B = openai/gpt-oss-120b
  • Llama4Scout17B16EInstruct = meta-llama/Llama-4-Scout-17B-16E-Instruct
  • Claude35HaikuLatest = claude-3-5-haiku-latest
  • MistralSmall24BInstruct2501 = mistralai/Mistral-Small-24B-Instruct-2501

Ответ:

"Привет! Я — искусственный интеллект, готовый помочь тебе с любыми вопросами…"

⚠️ Список моделей автоматически парсится с Duck.ai API сервисом при запуске сервиса - поэтому выше приведенный перечень моделей может быть устаревшим, смотрите duck_chat/models/model_type.py


🔁 Как обновляются заголовки?

  • При старте сервер проверяет наличие валидных заголовков.
  • Если они устарели или отсутствуют — запускается фоновая задача, которая:
    1. Запускает Chromium в виртуальном дисплее
    2. Переходит на duck.ai
    3. Отправляет тестовый запрос
    4. Перехватывает заголовки из API-запроса
    5. Сохраняет их для дальнейшего использования
  • Вы получите уведомление: Заголовки получены и сохранены

Если возникнет ошибка проверки (ChallengeException), система автоматически попытается обновить заголовки.


📁 Структура проекта

duck-local-chat-api/
├── service.py            # Основной FastAPI-сервер
├── utils.py              # Скрипт получения заголовков через Playwright
├── headers_manager.py    # Управление сохранением/загрузкой заголовков
├── main.py               # Скрипт запуска
└── duck_chat/            # Модифицированная библиотека для работы с duck.ai

⚠️ Ограничения

  • Только Linux (из-за xvfb и notify-send)
  • Не учитывается история чата при отправке нового промпта (нужна лишь для корректной валидации основго промпта)
  • Работает только пока заголовки валидны (время жизни — 5-10 запросов)
  • Не предназначен для массового использования (следуйте правилам duck.ai)
  • Требует доступа к Chromium и GUI-совместимых инструментов

🤝 Автор

Сделано с ❤️ для тех, кто хочет использовать AI без регистрации и лишних движений.
Автор не несёт ответственности за нарушение правил duck.ai при массовом использовании.


🙏 Благодарности

  • mrgick/duck_chat — за основу
  • patchright — за отличное решение по обходу проверок на ботов
  • Playwright & FastAPI — за отличные инструменты

🦆 Утки не возвращаются, но API — да.
Пользуйтесь с умом.

About

🦆 Локальный API сервер для взаимодействия с Duck.ai

Topics

Resources

Stars

Watchers

Forks

Languages

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载