PopNowDocs API
Intégrations
Contenu principal

Outils LangChain et LangGraph

Outils pour agents LangChain et LangGraph créant images, vidéos, musiques et voix IA avec PopNow. Chaque appel payant fait d’abord l’objet d’un devis en USD.

langchain-popnow donne aux agents LangChain et LangGraph des outils qui créent des images, des vidéos, des musiques et des voix avec les modèles PopNow, ainsi que des outils qui listent les modèles, récupèrent les tâches et consultent le solde API. Une seule clé API couvre tous les modèles, de Nano Banana et Seedream à MiniMax H3, Kling, Suno et Gemini TTS.

Chaque appel payant fait d’abord l’objet d’un devis en USD. Un outil payant appelé sans max_usd renvoie seulement le prix : rien n’est créé et rien n’est débité. Le paquet est open source sous licence MIT (GitHub) et repose sur le SDK Python officiel.

En un coup d’œil

Paquetlangchain-popnow sur PyPI
Installationpip install -U langchain-popnow
PrérequisPython 3.10 ou plus récent, langchain-core 0.3.15 ou plus récent
CléPOPNOW_API_KEY, une clé sk-popnow- issue de la console API
FacturationUSD prélevés sur votre solde API distinct. Les outils payants demandent un devis et ne s’exécutent qu’avec max_usd
OutilsGénération d’images, de vidéos, de musiques et de voix, tout modèle par ID, liste des modèles, consultation des tâches et du solde (liste complète)
Sourcegithub.com/popnow-ai/langchain-popnow

Mise en place

Installer le paquet

pip install -U langchain-popnow

Créer une clé API

Créez une clé dans la console API. Il est judicieux de donner à votre agent une clé propre, avec un plafond de dépense quotidien bas : vous pouvez la révoquer sans toucher à vos autres intégrations. Le solde API démarre à $0 ; rechargez-le dans la Facturation API.

Mettre la clé dans votre environnement

Les outils lisent la clé dans POPNOW_API_KEY :

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

Vous pouvez aussi passer api_key="sk-popnow-..." à n’importe quel outil ou à PopNowToolkit. POPNOW_BASE_URL remplace l’hôte de l’API (par défaut https://api.popnow.ai).

Demander un devis, puis lancer

Appelez un outil payant une fois sans max_usd pour obtenir le prix, puis à nouveau avec max_usd égal à ce prix :

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

Lorsqu’un agent appelle l’outil avec un ToolCall, l’outil renvoie un ToolMessage dont content est le résumé JSON ci-dessus et dont artifact est l’enregistrement complet de la tâche ou du devis PopNow.

Outils

Classe d’outilNom de l’outilCe qu’il faitModèle par défautFacturation
PopNowImageGenerationpopnow_image_generationTexte vers image, ou retouche des images passées dans image_urlsgoogle/nano-banana-2.1/text-to-image (retouche : google/nano-banana-2.1/edit)Payant, devis préalable
PopNowVideoGenerationpopnow_video_generationTexte vers vidéo, ou anime l’image de image_urlminimax/h3/text-to-video (image : minimax/h3/image-to-video)Payant, devis préalable
PopNowMusicGenerationpopnow_music_generationChansons et instrumentaux, avec paroles facultativessuno/v6/text-to-audioPayant, devis préalable
PopNowSpeechpopnow_text_to_speechSynthèse vocale avec de nombreuses voixgoogle/gemini-3.8-flash-tts/text-to-speechPayant, devis préalable
PopNowCreateTaskpopnow_create_taskTout modèle PopNow par ID, avec son propre inputChoisi par l’agentPayant, devis préalable
PopNowListModelspopnow_list_modelsIDs des modèles et tarifs en USD ; avec model, les champs de saisie de ce modèleGratuit
PopNowGetTaskpopnow_get_taskRécupère le résultat d’une tâche encore en coursGratuit
PopNowCheckBalancepopnow_check_balanceSolde API disponible et bloqué, en USDGratuit

PopNowToolkit().get_tools() renvoie les huit avec une configuration commune.

Les outils de génération acceptent les champs communs (prompt, aspect_ratio, resolution, duration_seconds, voice_id et ainsi de suite), un model facultatif pour choisir un autre modèle PopNow, et extra_input pour tout champ que popnow_list_models indique pour ce modèle. Les IDs de modèle suivent le schéma <maker>/<model>/<task> décrit dans Modèles.

Comment fonctionne la confirmation

Les tâches PopNow sont asynchrones : devis, création au prix confirmé, puis attente du résultat. Les outils suivent le même déroulement que le serveur MCP pour développeurs :

  1. Devis. L’agent appelle un outil payant sans max_usd. L’outil demande un devis à PopNow et renvoie status: "needs_confirmation" avec cost_usd. Rien n’est créé ni bloqué.
  2. Confirmation. L’agent montre le prix à l’utilisateur. Après accord, il rappelle l’outil avec les mêmes arguments, plus max_usd égal au cost_usd devisé.
  3. Exécution. Si le devis en cours ne dépasse pas max_usd, la tâche est créée avec ce devis bloqué et l’outil attend le résultat. Si le prix a augmenté, l’outil renvoie un nouveau needs_confirmation et ne débite rien.

Les résultats contiennent des URLs de téléchargement signées, qui expirent, et une URI popnow://g/<task>/<n> qui n’expire pas et peut être passée à un autre outil PopNow, par exemple pour animer une image générée. Une longue vidéo peut encore tourner lorsque wait_timeout (600 secondes par défaut) est écoulé : l’outil renvoie alors status: "running" avec un task_id, et popnow_get_task récupère le résultat plus tard. Les tâches échouées ou expirées libèrent leur blocage et ne coûtent rien.

Garde-fous de dépense

Définissez ces options sur n’importe quel outil payant ou sur PopNowToolkit :

RéglageEffet
max_usd_per_call="1.00"Plafond strict. Un devis au-dessus renvoie status: "over_limit", même si l’agent a passé un max_usd plus élevé
auto_approve_usd="0.05"Pour les pipelines sans surveillance : les devis égaux ou inférieurs à ce montant s’exécutent sans max_usd. La valeur par défaut None signifie que chaque appel payant doit être confirmé
allow_model_override=FalseL’agent ne peut pas quitter le model configuré pour l’outil

Les plafonds de dépense et la liste d’autorisation de modèles de la clé API, réglés dans la console API, s’appliquent aussi.

Utiliser avec un agent 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)

L’agent peut tourner sur n’importe quel modèle de chat pris en charge par LangChain, y compris les modèles de chat PopNow via le point de terminaison compatible OpenAI https://api.popnow.ai/v1.

Utiliser avec 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 fonctionne toujours dans LangGraph 1.x ; les nouveaux projets peuvent utiliser langchain.agents.create_agent, comme ci-dessus. Pour une étape d’approbation humaine stricte, combinez les outils avec HumanInTheLoopMiddleware de LangChain ou un interrupt de LangGraph.

Autres exemples

Trouver un modèle et ses entrées

Lister les modèles est gratuit. Avec model, l’outil renvoie les champs de saisie et les prix de ce modèle :

Python
from langchain_popnow import PopNowListModels

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

Animer une image avec un modèle choisi

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

Voix off sans confirmation pour chaque ligne

Une voix off coûte une fraction de centime : un pipeline peut donc approuver seul les petits devis :

Python
from langchain_popnow import PopNowSpeech

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

Tout modèle par ID

PopNowCreateTask envoie le input propre à un modèle, exactement comme dans Tâches :

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

Chaque outil fonctionne aussi de façon asynchrone : await tool.ainvoke(...).

Tarifs

Lister les modèles, lire les tâches et consulter le solde sont gratuits. Les outils de génération débitent le tarif USD du modèle sur votre solde API : une tâche bloque son prix devisé à son acceptation et règle le montant réel à la fin. Les tâches échouées ou expirées ne coûtent rien.

popnow_list_models renvoie les tarifs USD de chaque modèle. Le prix de chaque modèle figure sur Modèles et sur sa page dédiée ; l’indice des prix IA les liste aussi. Le fonctionnement des devis, des blocages et des remboursements est décrit dans Facturation et devis.

Erreurs courantes

Vous voyezCauseSolution
needs_confirmation à chaque appelL’agent n’envoie jamais max_usdIndiquez-lui dans le prompt système d’afficher le prix et de rappeler l’outil avec max_usd après approbation, ou réglez auto_approve_usd pour les petits montants
over_limitLe devis dépasse max_usd_per_callRelevez le plafond, ou choisissez un modèle ou un réglage moins cher
401La clé est absente ou révoquéeVérifiez POPNOW_API_KEY, ou passez api_key
40201Solde API insuffisant pour la réservation de la tâcheRechargez dans la Facturation API
40202Le plafond de dépense de la clé serait dépasséRelevez le plafond de cette clé dans la console API
40301La clé n’est pas autorisée à appeler ce modèleAjoutez le modèle à la liste d’autorisation de la clé
status: "running"La tâche a dépassé wait_timeoutAppelez popnow_get_task avec le task_id

La liste complète se trouve dans Erreurs.

Ça fonctionne avec LangGraph ?

Oui. Les outils sont des outils LangChain standard : create_react_agent, ToolNode et vos graphes LangGraph personnalisés peuvent donc les appeler. Associez-les à un interrupt LangGraph si une personne doit approuver chaque prix.

Un agent peut-il dépenser mon solde sans demander ?

Pas par défaut. Un outil payant appelé sans max_usd renvoie seulement un devis. Une dépense sans confirmation n’a lieu que si vous définissez auto_approve_usd ; max_usd_per_call et les plafonds de dépense de la clé restent appliqués.

Quels modèles les outils peuvent-ils utiliser ?

Tout modèle d’image, de vidéo ou d’audio du catalogue. Les outils de génération ont des valeurs par défaut raisonnables ; passez model pour en choisir un autre, ou utilisez PopNowCreateTask avec n’importe quel ID de modèle. popnow_list_models liste les IDs depuis l’agent lui-même.

Existe-t-il une version JavaScript ?

Pour TypeScript et JavaScript, utilisez le fournisseur Vercel AI SDK ou le SDK JavaScript.

Sur cette page