PopNowDocs da API
Integrações
Conteúdo principal

Ferramentas para LangChain e LangGraph

Dê aos seus agentes de LangChain e LangGraph ferramentas para criar imagens, vídeos, músicas e voz com o PopNow. Cada cobrança é cotada em USD antes de rodar.

langchain-popnow dá aos agentes de LangChain e LangGraph ferramentas que criam imagens, vídeos, músicas e voz com modelos do PopNow, e ferramentas que listam modelos, consultam tarefas e verificam o saldo da API. Uma única chave de API cobre todos os modelos, do Nano Banana e Seedream ao MiniMax H3, Kling, Suno e Gemini TTS.

Cada chamada paga é cotada primeiro em USD. Uma ferramenta paga chamada sem max_usd só retorna o preço: nada é criado e nada é cobrado. O pacote é de código aberto sob licença MIT (GitHub) e é construído sobre o SDK oficial de Python.

Resumo

Pacotelangchain-popnow no PyPI
Instalaçãopip install -U langchain-popnow
RequisitosPython 3.10 ou mais recente, langchain-core 0.3.15 ou mais recente
ChavePOPNOW_API_KEY, uma chave sk-popnow- do console de API
CobrançaUSD do seu saldo da API, separado. As ferramentas pagas cotam primeiro e só executam com max_usd
FerramentasGeração de imagem, vídeo, música e voz, qualquer modelo pelo ID, lista de modelos, consulta de tarefas e saldo (lista completa)
Código-fontegithub.com/popnow-ai/langchain-popnow

Configuração

Instale o pacote

pip install -U langchain-popnow

Crie uma chave de API

Crie uma chave no console de API. Vale a pena dar ao seu agente uma chave própria com um limite de gasto diário baixo: assim você pode revogá-la sem mexer nas suas outras integrações. O saldo da API começa em $0; adicione fundos em Cobrança da API.

Coloque a chave no seu ambiente

As ferramentas leem a chave de POPNOW_API_KEY:

export POPNOW_API_KEY="sk-popnow-..."

Você também pode passar api_key="sk-popnow-..." para qualquer ferramenta ou para PopNowToolkit. POPNOW_BASE_URL substitui o host da API (padrão https://api.popnow.ai).

Cote e depois execute

Chame uma ferramenta paga uma vez sem max_usd para obter o preço, e depois de novo com max_usd igual a esse preço:

Python
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"}], ...}

Quando um agente chama a ferramenta com um ToolCall, a ferramenta retorna um ToolMessage cujo content é o resumo JSON acima e cujo artifact é o registro completo da tarefa ou da cotação no PopNow.

Ferramentas

Classe da ferramentaNome da ferramentaO que fazModelo padrãoCobrança
PopNowImageGenerationpopnow_image_generationTexto para imagem, ou edita as imagens passadas em image_urlsgoogle/nano-banana-2.1/text-to-image (edição: google/nano-banana-2.1/edit)Paga, cotada primeiro
PopNowVideoGenerationpopnow_video_generationTexto para vídeo, ou anima a imagem em image_urlminimax/h3/text-to-video (imagem: minimax/h3/image-to-video)Paga, cotada primeiro
PopNowMusicGenerationpopnow_music_generationCanções e instrumentais, com letra opcionalsuno/v6/text-to-audioPaga, cotada primeiro
PopNowSpeechpopnow_text_to_speechTexto para fala em muitas vozesgoogle/gemini-3.8-flash-tts/text-to-speechPaga, cotada primeiro
PopNowCreateTaskpopnow_create_taskQualquer modelo do PopNow pelo ID, com o input próprio deleEscolhido pelo agentePaga, cotada primeiro
PopNowListModelspopnow_list_modelsIDs dos modelos e tarifas em USD; com model, os campos de entrada desse modeloGrátis
PopNowGetTaskpopnow_get_taskRecolhe o resultado de uma tarefa que ainda está em andamentoGrátis
PopNowCheckBalancepopnow_check_balanceSaldo da API disponível e reservado, em USDGrátis

PopNowToolkit().get_tools() retorna as oito com uma única configuração compartilhada.

As ferramentas de geração aceitam os campos comuns (prompt, aspect_ratio, resolution, duration_seconds, voice_id e assim por diante), um model opcional para escolher outro modelo do PopNow, e extra_input para qualquer campo que popnow_list_models listar para aquele modelo. Os IDs de modelo seguem o padrão <maker>/<model>/<task> descrito em Modelos.

Como funciona a aprovação

As tarefas do PopNow são assíncronas: cota-se, cria-se pelo preço aprovado e depois se espera o resultado. As ferramentas seguem o mesmo fluxo do servidor MCP para desenvolvedores:

  1. Cotação. O agente chama uma ferramenta paga sem max_usd. A ferramenta pede uma cotação ao PopNow e retorna status: "needs_confirmation" com cost_usd. Nada é criado nem reservado.
  2. Aprovação. O agente mostra o preço ao usuário. Depois da aprovação, chama a ferramenta de novo com os mesmos argumentos, mais max_usd igual ao cost_usd cotado.
  3. Execução. Se a cotação atual estiver dentro de max_usd, a tarefa é criada com essa cotação travada e a ferramenta espera o resultado. Se o preço subiu, a ferramenta retorna um novo needs_confirmation e nada é cobrado.

Os resultados contêm links de download assinados, que expiram, e um URI popnow://g/<task>/<n> que não expira e pode ser passado a outra ferramenta do PopNow, por exemplo para animar uma imagem gerada. Um vídeo longo pode ainda estar em execução quando o wait_timeout (padrão de 600 segundos) termina: nesse caso a ferramenta retorna status: "running" com um task_id, e popnow_get_task recolhe o resultado depois. Tarefas com falha ou expiradas liberam a reserva e não custam nada.

Limites de gasto

Defina-os em qualquer ferramenta paga ou em PopNowToolkit:

ConfiguraçãoEfeito
max_usd_per_call="1.00"Teto rígido. Uma cotação acima dele retorna status: "over_limit", mesmo que o agente tenha passado um max_usd maior
auto_approve_usd="0.05"Para pipelines sem supervisão: cotações iguais ou abaixo deste valor são executadas sem max_usd. O padrão None significa que cada chamada paga precisa de aprovação
allow_model_override=FalseO agente não pode trocar o model configurado para a ferramenta

Os limites de gasto e a lista de modelos permitidos da chave de API, definidos no console de API, também se aplicam.

Uso com um agente do LangChain

Python
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)

O agente pode rodar em qualquer modelo de chat que o LangChain suporte, inclusive os modelos de chat do PopNow pelo endpoint compatível com OpenAI https://api.popnow.ai/v1.

Uso com LangGraph

Python
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 continua funcionando no LangGraph 1.x; projetos novos podem usar langchain.agents.create_agent, como no exemplo acima. Para uma etapa de aprovação humana rigorosa, combine as ferramentas com o HumanInTheLoopMiddleware do LangChain ou com um interrupt do LangGraph.

Mais exemplos

Encontre um modelo e os seus campos

Listar modelos é grátis. Com model, a ferramenta retorna os campos de entrada e os preços desse modelo:

Python
from langchain_popnow import PopNowListModels

PopNowListModels().invoke({"modality": "video", "search": "kling"})
PopNowListModels().invoke({"model": "kling/3.0/image-to-video"})

Anime uma imagem com um modelo escolhido

Python
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",
})

Narrações sem aprovar cada linha

Uma narração custa uma fração de centavo, então um pipeline pode aprovar sozinho cotações pequenas:

Python
from langchain_popnow import PopNowSpeech

speech = PopNowSpeech(auto_approve_usd="0.02")
speech.invoke({"text": "Welcome back to the channel!", "voice_id": "Kore"})

Qualquer modelo pelo ID

PopNowCreateTask envia o input próprio de um modelo, exatamente como em Tarefas:

Python
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",
})

Todas as ferramentas também rodam de forma assíncrona: await tool.ainvoke(...).

Preços

Listar modelos, ler tarefas e consultar o saldo são grátis. As ferramentas de geração cobram a tarifa em USD do modelo do seu saldo da API: uma tarefa reserva o preço cotado quando é aceita e liquida a cobrança real ao terminar. Tarefas com falha ou expiradas não custam nada.

popnow_list_models retorna as tarifas em USD de cada modelo. O preço de cada modelo está em Modelos e na página de cada um; o índice de preços de IA também os lista. Como funcionam as cotações, as reservas e os reembolsos: Cobrança e cotações.

Erros comuns

O que você vêPor quêComo resolver
needs_confirmation em toda chamadaO agente nunca envia max_usdPeça no prompt do sistema que ele mostre o preço e chame de novo com max_usd depois da aprovação, ou defina auto_approve_usd para valores pequenos
over_limitA cotação passa de max_usd_per_callSuba o teto, ou escolha um modelo ou uma configuração mais barata
401A chave está ausente ou foi revogadaVerifique POPNOW_API_KEY ou passe api_key
40201Saldo da API insuficiente para a reserva da tarefaAdicione fundos em Cobrança da API
40202A chave ultrapassaria o limite de gasto delaAumente o limite dessa chave no console de API
40301A chave não pode chamar este modeloAdicione o modelo à lista de modelos permitidos da chave
status: "running"A tarefa passou do wait_timeoutChame popnow_get_task com o task_id

A lista completa está em Erros.

Funciona com LangGraph?

Sim. As ferramentas são ferramentas padrão do LangChain, então create_react_agent, ToolNode e grafos personalizados do LangGraph podem chamá-las. Combine-as com um interrupt do LangGraph se uma pessoa precisar aprovar cada preço.

Um agente pode gastar meu saldo sem perguntar?

Não por padrão. Uma ferramenta paga chamada sem max_usd só retorna uma cotação. O gasto sem aprovação só acontece se você definir auto_approve_usd, e max_usd_per_call junto com os limites de gasto da chave continuam valendo.

Quais modelos as ferramentas podem usar?

Qualquer modelo de imagem, vídeo ou áudio do catálogo. As ferramentas de geração têm padrões sensatos; passe model para escolher outro, ou use PopNowCreateTask com qualquer ID de modelo. popnow_list_models lista os IDs de dentro do agente.

Existe uma versão em JavaScript?

Para TypeScript e JavaScript, use o provedor do Vercel AI SDK ou o SDK de JavaScript.

Nesta página