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
| Paquet | langchain-popnow sur PyPI |
| Installation | pip install -U langchain-popnow |
| Prérequis | Python 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 |
| Facturation | USD prélevés sur votre solde API distinct. Les outils payants demandent un devis et ne s’exécutent qu’avec max_usd |
| Outils | Gé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) |
| Source | github.com/popnow-ai/langchain-popnow |
Mise en place
Installer le paquet
pip install -U langchain-popnowCré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 :
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’outil | Nom de l’outil | Ce qu’il fait | Modèle par défaut | Facturation |
|---|---|---|---|---|
PopNowImageGeneration | popnow_image_generation | Texte vers image, ou retouche des images passées dans image_urls | google/nano-banana-2.1/text-to-image (retouche : google/nano-banana-2.1/edit) | Payant, devis préalable |
PopNowVideoGeneration | popnow_video_generation | Texte vers vidéo, ou anime l’image de image_url | minimax/h3/text-to-video (image : minimax/h3/image-to-video) | Payant, devis préalable |
PopNowMusicGeneration | popnow_music_generation | Chansons et instrumentaux, avec paroles facultatives | suno/v6/text-to-audio | Payant, devis préalable |
PopNowSpeech | popnow_text_to_speech | Synthèse vocale avec de nombreuses voix | google/gemini-3.8-flash-tts/text-to-speech | Payant, devis préalable |
PopNowCreateTask | popnow_create_task | Tout modèle PopNow par ID, avec son propre input | Choisi par l’agent | Payant, devis préalable |
PopNowListModels | popnow_list_models | IDs des modèles et tarifs en USD ; avec model, les champs de saisie de ce modèle | Gratuit | |
PopNowGetTask | popnow_get_task | Récupère le résultat d’une tâche encore en cours | Gratuit | |
PopNowCheckBalance | popnow_check_balance | Solde API disponible et bloqué, en USD | Gratuit |
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 :
- Devis. L’agent appelle un outil payant sans
max_usd. L’outil demande un devis à PopNow et renvoiestatus: "needs_confirmation"aveccost_usd. Rien n’est créé ni bloqué. - Confirmation. L’agent montre le prix à l’utilisateur. Après accord, il rappelle l’outil avec les mêmes arguments, plus
max_usdégal aucost_usddevisé. - 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 nouveauneeds_confirmationet 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églage | Effet |
|---|---|
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=False | L’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
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
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 :
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
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 :
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 :
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 voyez | Cause | Solution |
|---|---|---|
needs_confirmation à chaque appel | L’agent n’envoie jamais max_usd | Indiquez-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_limit | Le devis dépasse max_usd_per_call | Relevez le plafond, ou choisissez un modèle ou un réglage moins cher |
401 | La clé est absente ou révoquée | Vérifiez POPNOW_API_KEY, ou passez api_key |
40201 | Solde API insuffisant pour la réservation de la tâche | Rechargez dans la Facturation API |
40202 | Le plafond de dépense de la clé serait dépassé | Relevez le plafond de cette clé dans la console API |
40301 | La clé n’est pas autorisée à appeler ce modèle | Ajoutez le modèle à la liste d’autorisation de la clé |
status: "running" | La tâche a dépassé wait_timeout | Appelez 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.
Voir aussi
Fournisseur Vercel AI SDK
generateImage, generateSpeech, transcribe et modèles de chat en TypeScript.
Serveur MCP pour développeurs
Le même parcours de devis et de confirmation pour Claude Code, Cursor et Codex.
Facturation et devis
Comment une tâche bloque, règle et rembourse des USD.
langchain-popnow sur GitHub
Code source, tickets et journal des modifications.
Recettes et compétences
Exécutez vos recettes et workflows enregistrés via l’API ou MCP. Demandez un devis, approuvez un budget en USD, suivez chaque étape et reprenez les exécutions en pause avec la clé API d’origine.
AI SDK
Utilisez les modèles PopNow avec le Vercel AI SDK 7 : generateImage pour images et retouche, generateSpeech, transcribe et modèles de chat, facturés en USD.

