Инструменты LangChain и LangGraph
Инструменты LangChain и LangGraph для изображений, видео, музыки и речи через PopNow. Платный вызов сначала считается в USD и запускается только после подтверждения.
langchain-popnow даёт агентам LangChain и LangGraph инструменты для создания изображений, видео, музыки и речи с моделями PopNow, а также инструменты для списка моделей, получения задач и проверки баланса API. Один ключ API работает со всеми моделями: от Nano Banana и Seedream до MiniMax H3, Kling, Suno и Gemini TTS.
Каждый платный вызов сначала получает расчёт стоимости в USD. Платный инструмент, вызванный без max_usd, только возвращает цену: ничего не создаётся и ничего не списывается. Пакет распространяется под лицензией MIT с открытым кодом (GitHub) и построен на официальном SDK для Python.
Обзор
| Пакет | langchain-popnow в PyPI |
| Установка | pip install -U langchain-popnow |
| Требования | Python 3.10 или новее, langchain-core 0.3.15 или новее |
| Ключ | POPNOW_API_KEY, ключ sk-popnow- из консоли API |
| Оплата | USD с вашего отдельного баланса API. Платные инструменты сначала считают стоимость и выполняются только с max_usd |
| Инструменты | Генерация изображений, видео, музыки и речи, любая модель по ID, список моделей, поиск задачи и баланс (полный список) |
| Исходный код | github.com/popnow-ai/langchain-popnow |
Настройка
Установите пакет
pip install -U langchain-popnowСоздайте ключ API
Создайте ключ в консоли API. Удобно выдать агенту отдельный ключ с небольшим дневным лимитом расходов: его можно отозвать, не затрагивая другие интеграции. Баланс API стартует с $0; пополнить его можно в разделе оплаты API.
Задайте ключ в окружении
Инструменты читают ключ из POPNOW_API_KEY:
export POPNOW_API_KEY="sk-popnow-..."Ключ можно также передать параметром api_key="sk-popnow-..." в любой инструмент или в PopNowToolkit. POPNOW_BASE_URL переопределяет адрес API (по умолчанию https://api.popnow.ai).
Сначала расчёт, потом запуск
Вызовите платный инструмент один раз без max_usd, чтобы получить цену, а затем ещё раз, указав max_usd равным этой цене:
from langchain_popnow import PopNowImageGeneration
tool = PopNowImageGeneration()
# 1. Quote: returns the price, starts nothing.
print(tool.invoke({"prompt": "A small red fox curled up in a teacup, soft morning light"}))
# {"status": "needs_confirmation", "model": "google/nano-banana-2.1/text-to-image", "cost_usd": "0.048", ...}
# 2. Approved: creates the task and waits for it.
print(tool.invoke({"prompt": "A small red fox curled up in a teacup, soft morning light", "max_usd": "0.048"}))
# {"status": "succeeded", "task_id": "...", "cost_usd": "0.048", "outputs": [{"url": "https://...", "uri": "popnow://g/.../0"}], ...}Когда агент вызывает инструмент с ToolCall, инструмент возвращает ToolMessage: в content лежит JSON-сводка выше, а в artifact — полная запись задачи или расчёта PopNow.
Инструменты
| Класс инструмента | Имя инструмента | Что делает | Модель по умолчанию | Оплата |
|---|---|---|---|---|
PopNowImageGeneration | popnow_image_generation | Текст в изображение или правка изображений из image_urls | google/nano-banana-2.1/text-to-image (правка: google/nano-banana-2.1/edit) | Платный, сначала расчёт |
PopNowVideoGeneration | popnow_video_generation | Текст в видео или анимация изображения из image_url | minimax/h3/text-to-video (изображение: minimax/h3/image-to-video) | Платный, сначала расчёт |
PopNowMusicGeneration | popnow_music_generation | Песни и инструменталы, с необязательным текстом | suno/v6/text-to-audio | Платный, сначала расчёт |
PopNowSpeech | popnow_text_to_speech | Текст в речь, много голосов | google/gemini-3.8-flash-tts/text-to-speech | Платный, сначала расчёт |
PopNowCreateTask | popnow_create_task | Любая модель PopNow по ID, с её собственным input | Выбирает агент | Платный, сначала расчёт |
PopNowListModels | popnow_list_models | ID моделей и курсы в USD; с model — входные поля этой модели | Бесплатно | |
PopNowGetTask | popnow_get_task | Забирает результат задачи, которая ещё выполняется | Бесплатно | |
PopNowCheckBalance | popnow_check_balance | Доступный и удерживаемый баланс API в USD | Бесплатно |
PopNowToolkit().get_tools() возвращает все восемь инструментов с одной общей конфигурацией.
Инструменты генерации принимают общие поля (prompt, aspect_ratio, resolution, duration_seconds, voice_id и так далее), необязательный model для выбора другой модели PopNow и extra_input для любого поля, которое popnow_list_models показывает для этой модели. ID моделей строятся по шаблону <maker>/<model>/<task>, описанному в Моделях.
Как работает подтверждение
Задачи PopNow асинхронны: сначала расчёт, затем создание по подтверждённой цене, затем ожидание результата. Инструменты следуют той же схеме, что и MCP-сервер для разработчиков:
- Расчёт. Агент вызывает платный инструмент без
max_usd. Инструмент запрашивает расчёт у PopNow и возвращаетstatus: "needs_confirmation"сcost_usd. Ничего не создаётся и не резервируется. - Подтверждение. Агент показывает цену пользователю. После подтверждения он вызывает инструмент снова с теми же аргументами и
max_usd, равным расчётномуcost_usd. - Запуск. Если актуальный расчёт укладывается в
max_usd, задача создаётся с зафиксированным расчётом, и инструмент ждёт результата. Если цена выросла, инструмент возвращает новыйneeds_confirmationи ничего не списывает.
В результатах лежат подписанные ссылки на скачивание: они истекают. Также есть URI вида popnow://g/<task>/<n>, который не истекает и может быть передан другому инструменту PopNow, например для анимации созданного изображения. Длинное видео может ещё выполняться, когда заканчивается wait_timeout (по умолчанию 600 секунд): тогда инструмент возвращает status: "running" с task_id, и popnow_get_task позже заберёт результат. Задачи с ошибкой или истёкшие снимают удержание и ничего не стоят.
Ограничители расходов
Задайте их в любом платном инструменте или в PopNowToolkit:
| Настройка | Действие |
|---|---|
max_usd_per_call="1.00" | Жёсткий потолок. Расчёт выше него возвращает status: "over_limit", даже если агент передал больший max_usd |
auto_approve_usd="0.05" | Для автоматических конвейеров: расчёты на эту сумму или меньше выполняются без max_usd. По умолчанию None: каждый платный вызов требует подтверждения |
allow_model_override=False | Агент не может переключиться с настроенной в инструменте model |
Ограничения расходов и список разрешённых моделей ключа API, заданные в консоли API, действуют тоже.
Использование с агентом LangChain
from langchain.agents import create_agent
from langchain_popnow import PopNowToolkit
tools = PopNowToolkit(max_usd_per_call="1.00").get_tools()
agent = create_agent(
model="anthropic:claude-sonnet-4-6",
tools=tools,
system_prompt=(
"You create media with PopNow tools. Paid tools return a price first: "
"show it to the user and only call again with max_usd after they approve."
),
)
result = agent.invoke({"messages": [{"role": "user", "content": "Make a 9:16 clip of a vintage car on a coastal road"}]})
print(result["messages"][-1].content)Агент может работать на любой чат-модели, которую поддерживает LangChain, в том числе на чат-моделях PopNow через совместимый с OpenAI эндпоинт https://api.popnow.ai/v1.
Использование с LangGraph
from langchain.chat_models import init_chat_model
from langgraph.prebuilt import create_react_agent
from langchain_popnow import PopNowToolkit
model = init_chat_model("anthropic:claude-sonnet-4-6")
agent = create_react_agent(model, PopNowToolkit(max_usd_per_call="1.00").get_tools())
for step in agent.stream(
{"messages": [{"role": "user", "content": "Write a short lo-fi track for a cooking video and tell me the price first"}]},
stream_mode="values",
):
step["messages"][-1].pretty_print()create_react_agent по-прежнему работает в LangGraph 1.x; в новых проектах можно использовать langchain.agents.create_agent, как показано выше. Для жёсткого шага подтверждения человеком объедините инструменты с HumanInTheLoopMiddleware из LangChain или с interrupt из LangGraph.
Ещё примеры
Найдите модель и её входные поля
Список моделей бесплатен. С model инструмент возвращает входные поля этой модели и цены:
from langchain_popnow import PopNowListModels
PopNowListModels().invoke({"modality": "video", "search": "kling"})
PopNowListModels().invoke({"model": "kling/3.0/image-to-video"})Оживите изображение выбранной моделью
from langchain_popnow import PopNowVideoGeneration
PopNowVideoGeneration().invoke({
"prompt": "Gentle waves, slow push-in",
"image_url": "https://example.com/beach.jpg",
"model": "kling/3.0/image-to-video",
"duration_seconds": 5,
"max_usd": "0.50",
})Озвучка без подтверждения каждой строки
Озвучка стоит доли цента, поэтому конвейер может сам подтверждать небольшие расчёты:
from langchain_popnow import PopNowSpeech
speech = PopNowSpeech(auto_approve_usd="0.02")
speech.invoke({"text": "Welcome back to the channel!", "voice_id": "Kore"})Любая модель по ID
PopNowCreateTask отправляет собственный input модели ровно так, как описано в Задачах:
from langchain_popnow import PopNowCreateTask
PopNowCreateTask().invoke({
"model": "alibaba/z-image-turbo/text-to-image",
"input": {"prompt": "A paper boat on a puddle, overcast street, photo", "aspect_ratio": "1:1"},
"max_usd": "0.02",
})Каждый инструмент также работает асинхронно: await tool.ainvoke(...).
Цены
Список моделей, чтение задач и проверка баланса бесплатны. Инструменты генерации списывают цену модели в USD с вашего баланса API: задача удерживает зафиксированный расчёт при принятии и окончательно списывает фактическую сумму по завершении. Задачи с ошибкой или истёкшие ничего не стоят.
popnow_list_models возвращает курсы в USD для каждой модели. Цена каждой модели указана на странице Модели и на её собственной странице; индекс цен AI тоже их содержит. Как работают расчёты, удержания и возвраты: Оплата API и расчёт стоимости.
Частые ошибки
| Что видите | Почему | Что делать |
|---|---|---|
needs_confirmation при каждом вызове | Агент никогда не передаёт max_usd | Укажите в системном промпте показывать цену и повторять вызов с max_usd после подтверждения или задайте auto_approve_usd для небольших сумм |
over_limit | Расчёт выше max_usd_per_call | Поднимите потолок или выберите более дешёвую модель или настройку |
401 | Ключ не задан или отозван | Проверьте POPNOW_API_KEY или передайте api_key |
40201 | Недостаточно баланса API для удержания задачи | Пополните баланс в разделе оплаты API |
40202 | Превышен ограничитель расходов ключа | Поднимите лимит для этого ключа в консоли API |
40301 | Ключу нельзя вызывать эту модель | Добавьте модель в список разрешённых для ключа |
status: "running" | Задача дольше wait_timeout | Вызовите popnow_get_task с task_id |
Полный список есть на странице Коды ошибок.
Работает ли это с LangGraph?
Да. Инструменты — стандартные инструменты LangChain, поэтому create_react_agent, ToolNode и собственные графы LangGraph могут их вызывать. Если человек должен подтверждать каждую цену, добавьте interrupt из LangGraph.
Может ли агент тратить мой баланс без спроса?
По умолчанию нет. Платный инструмент, вызванный без max_usd, только возвращает расчёт. Расходы без подтверждения возможны только если вы задали auto_approve_usd; при этом по-прежнему действуют max_usd_per_call и ограничители расходов ключа.
Какие модели могут использовать инструменты?
Любую модель генерации изображений, видео или аудио из каталога. У инструментов генерации разумные значения по умолчанию; передайте model, чтобы выбрать другую модель, или используйте PopNowCreateTask с любым ID модели. popnow_list_models показывает ID прямо внутри агента.
Есть ли версия для JavaScript?
Для TypeScript и JavaScript используйте провайдер Vercel AI SDK или SDK для JavaScript.
Связанное
Провайдер Vercel AI SDK
generateImage, generateSpeech, transcribe и чат-модели в TypeScript.
MCP-сервер для разработчиков
Тот же поток расчёта и подтверждения для Claude Code, Cursor и Codex.
Оплата API и расчёт стоимости
Как задача удерживает, списывает и возвращает USD.
langchain-popnow на GitHub
Исходный код, задачи и журнал изменений.
Рецепты и навыки
Запускайте сохранённые рецепты и воркфлоу через API или MCP. Получайте расчёт стоимости, подтверждайте бюджет в USD, следите за каждым шагом и возобновляйте приостановленные запуски с исходным API-ключом.
AI SDK
Модели PopNow в Vercel AI SDK 7: generateImage для текста в изображение и правки, generateSpeech, transcribe и чат-модели. Оплата в USD одним ключом API.

