Narzędzia LangChain i LangGraph
Narzędzia dla agentów LangChain i LangGraph do obrazów, wideo, muzyki i mowy przez PopNow. Każde płatne wywołanie jest wyceniane w USD i uruchamia się dopiero po zatwierdzeniu.
langchain-popnow daje agentom LangChain i LangGraph narzędzia do tworzenia obrazów, wideo, muzyki i mowy z modelami PopNow, a także narzędzia do listowania modeli, pobierania zadań i sprawdzania salda API. Jeden klucz API obsługuje każdy model, od Nano Banana i Seedream po MiniMax H3, Kling, Suno i Gemini TTS.
Każde płatne wywołanie najpierw dostaje wycenę w USD. Płatne narzędzie wywołane bez max_usd tylko zwraca cenę: nic nie jest tworzone i nic nie jest naliczane. Pakiet ma otwarty kod na licencji MIT (GitHub) i jest zbudowany na oficjalnym SDK dla Pythona.
Przegląd
| Pakiet | langchain-popnow w PyPI |
| Instalacja | pip install -U langchain-popnow |
| Wymagania | Python 3.10 lub nowszy, langchain-core 0.3.15 lub nowszy |
| Klucz | POPNOW_API_KEY, klucz sk-popnow- z konsoli API |
| Rozliczenia | USD z twojego osobnego salda API. Płatne narzędzia najpierw wyceniają i działają tylko z max_usd |
| Narzędzia | Generowanie obrazów, wideo, muzyki i mowy, dowolny model po ID, lista modeli, sprawdzanie zadania i saldo (pełna lista) |
| Źródło | github.com/popnow-ai/langchain-popnow |
Konfiguracja
Zainstaluj pakiet
pip install -U langchain-popnowUtwórz klucz API
Utwórz klucz w konsoli API. Dobrym nawykiem jest dać agentowi własny klucz z niskim dziennym limitem wydatków: możesz go unieważnić, nie ruszając innych integracji. Saldo API zaczyna się od 0 USD; doładujesz je w rozliczeniach API.
Ustaw klucz w środowisku
Narzędzia odczytują klucz z POPNOW_API_KEY:
export POPNOW_API_KEY="sk-popnow-..."Możesz też przekazać api_key="sk-popnow-..." do dowolnego narzędzia albo do PopNowToolkit. POPNOW_BASE_URL nadpisuje adres API (domyślnie https://api.popnow.ai).
Wyceń, potem uruchom
Wywołaj płatne narzędzie raz bez max_usd, aby poznać cenę, a potem ponownie, z max_usd ustawionym na tę cenę:
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"}], ...}Gdy agent wywoła narzędzie z ToolCall, narzędzie zwraca ToolMessage, którego content to powyższe podsumowanie JSON, a artifact to pełny zapis zadania lub wyceny PopNow.
Narzędzia
| Klasa narzędzia | Nazwa narzędzia | Co robi | Domyślny model | Rozliczenie |
|---|---|---|---|---|
PopNowImageGeneration | popnow_image_generation | Tekst na obraz albo edycja obrazów z image_urls | google/nano-banana-2.1/text-to-image (edycja: google/nano-banana-2.1/edit) | Płatne, najpierw wycena |
PopNowVideoGeneration | popnow_video_generation | Tekst na wideo albo animacja obrazu z image_url | minimax/h3/text-to-video (obraz: minimax/h3/image-to-video) | Płatne, najpierw wycena |
PopNowMusicGeneration | popnow_music_generation | Piosenki i instrumentale, z opcjonalnym tekstem | suno/v6/text-to-audio | Płatne, najpierw wycena |
PopNowSpeech | popnow_text_to_speech | Tekst na mowę w wielu głosach | google/gemini-3.8-flash-tts/text-to-speech | Płatne, najpierw wycena |
PopNowCreateTask | popnow_create_task | Dowolny model PopNow po ID, z jego własnym input | Wybiera agent | Płatne, najpierw wycena |
PopNowListModels | popnow_list_models | ID modeli i stawki w USD; z model pola wejściowe tego modelu | Bezpłatne | |
PopNowGetTask | popnow_get_task | Odbiera wynik zadania, które wciąż trwa | Bezpłatne | |
PopNowCheckBalance | popnow_check_balance | Dostępne i wstrzymane saldo API w USD | Bezpłatne |
PopNowToolkit().get_tools() zwraca wszystkie osiem z jedną wspólną konfiguracją.
Narzędzia generowania przyjmują wspólne pola (prompt, aspect_ratio, resolution, duration_seconds, voice_id i tak dalej), opcjonalne model, by wybrać inny model PopNow, oraz extra_input dla każdego pola, które popnow_list_models podaje dla tego modelu. ID modeli mają wzór <maker>/<model>/<task> opisany w Modelach.
Jak działa zatwierdzanie
Zadania PopNow są asynchroniczne: wycena, utworzenie po zatwierdzonej cenie, potem czekanie na wynik. Narzędzia idą tym samym przebiegiem co serwer MCP dla deweloperów:
- Wycena. Agent wywołuje płatne narzędzie bez
max_usd. Narzędzie prosi PopNow o wycenę i zwracastatus: "needs_confirmation"zcost_usd. Nic nie jest tworzone ani wstrzymywane. - Zatwierdzenie. Agent pokazuje cenę użytkownikowi. Po zatwierdzeniu wywołuje narzędzie ponownie z tymi samymi argumentami i
max_usdustawionym na wycenionecost_usd. - Uruchomienie. Jeśli aktualna wycena mieści się w
max_usd, zadanie zostaje utworzone z zablokowaną wyceną, a narzędzie czeka na wynik. Jeśli cena wzrosła, narzędzie zwraca noweneeds_confirmationi niczego nie nalicza.
Wyniki zawierają podpisane linki do pobrania, które wygasają, oraz URI popnow://g/<task>/<n>, który nie wygasa i może być przekazany innemu narzędziu PopNow, na przykład do animacji wygenerowanego obrazu. Długie wideo może wciąż trwać, gdy skończy się wait_timeout (domyślnie 600 sekund): narzędzie zwraca wtedy status: "running" z task_id, a popnow_get_task odbierze wynik później. Zadania nieudane lub wygasłe zwalniają blokadę i nic nie kosztują.
Limity wydatków
Ustaw je w dowolnym płatnym narzędziu albo w PopNowToolkit:
| Ustawienie | Działanie |
|---|---|
max_usd_per_call="1.00" | Twardy sufit. Wycena powyżej niego zwraca status: "over_limit", nawet jeśli agent podał wyższe max_usd |
auto_approve_usd="0.05" | Dla procesów bez nadzoru: wyceny równe tej kwocie lub niższe działają bez max_usd. Domyślnie None, czyli każde płatne wywołanie wymaga zatwierdzenia |
allow_model_override=False | Agent nie może przełączyć się z ustawionego w narzędziu model |
Obowiązują też limity wydatków i lista dozwolonych modeli klucza API, ustawione w konsoli API.
Użycie z agentem 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)Agent może działać na dowolnym modelu czatu obsługiwanym przez LangChain, w tym na modelach czatu PopNow przez endpoint zgodny z OpenAI https://api.popnow.ai/v1.
Użycie z 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 nadal działa w LangGraph 1.x; nowe projekty mogą użyć langchain.agents.create_agent, jak pokazano wyżej. Do twardego kroku zatwierdzenia przez człowieka połącz narzędzia z HumanInTheLoopMiddleware z LangChain albo z interrupt z LangGraph.
Więcej przykładów
Znajdź model i jego pola wejściowe
Listowanie modeli jest bezpłatne. Z model narzędzie zwraca pola wejściowe tego modelu i ceny:
from langchain_popnow import PopNowListModels
PopNowListModels().invoke({"modality": "video", "search": "kling"})
PopNowListModels().invoke({"model": "kling/3.0/image-to-video"})Animuj obraz wybranym modelem
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",
})Lektorowanie bez potwierdzania każdej linijki
Lektor kosztuje ułamek centa, więc proces może sam zatwierdzać małe wyceny:
from langchain_popnow import PopNowSpeech
speech = PopNowSpeech(auto_approve_usd="0.02")
speech.invoke({"text": "Welcome back to the channel!", "voice_id": "Kore"})Dowolny model po ID
PopNowCreateTask wysyła własne input modelu, dokładnie tak jak w Zadaniach:
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",
})Każde narzędzie działa też asynchronicznie: await tool.ainvoke(...).
Ceny
Listowanie modeli, odczyt zadań i sprawdzanie salda są bezpłatne. Narzędzia generowania naliczają cenę modelu w USD z twojego salda API: zadanie blokuje wycenioną cenę przy przyjęciu i rozlicza rzeczywistą kwotę po zakończeniu. Zadania nieudane lub wygasłe nic nie kosztują.
popnow_list_models zwraca stawki w USD dla każdego modelu. Cena każdego modelu jest na stronie Modele i na jego własnej stronie; indeks cen AI też je zawiera. Jak działają wyceny, blokady i zwroty: Rozliczenia API i wyceny.
Częste błędy
| Co widzisz | Dlaczego | Co zrobić |
|---|---|---|
needs_confirmation przy każdym wywołaniu | Agent nigdy nie wysyła max_usd | Napisz w system prompcie, by pokazywał cenę i po zatwierdzeniu wywoływał ponownie z max_usd, albo ustaw auto_approve_usd dla małych kwot |
over_limit | Wycena przekracza max_usd_per_call | Podnieś sufit albo wybierz tańszy model lub ustawienie |
401 | Klucz jest pusty lub unieważniony | Sprawdź POPNOW_API_KEY albo przekaż api_key |
40201 | Za mało salda API na blokadę zadania | Doładuj saldo w rozliczeniach API |
40202 | Limit wydatków klucza zostałby przekroczony | Podnieś limit dla tego klucza w konsoli API |
40301 | Klucz nie może wywołać tego modelu | Dodaj model do listy dozwolonych modeli klucza |
status: "running" | Zadanie trwa dłużej niż wait_timeout | Wywołaj popnow_get_task z task_id |
Pełna lista jest na stronie Kody błędów.
Czy to działa z LangGraph?
Tak. Narzędzia są standardowymi narzędziami LangChain, więc create_react_agent, ToolNode i własne grafy LangGraph mogą je wywoływać. Jeśli każdą cenę ma zatwierdzać człowiek, połącz je z interrupt z LangGraph.
Czy agent może wydać moje saldo bez pytania?
Domyślnie nie. Płatne narzędzie wywołane bez max_usd tylko zwraca wycenę. Wydawanie bez zatwierdzenia jest możliwe tylko wtedy, gdy ustawisz auto_approve_usd, a max_usd_per_call oraz limity wydatków klucza nadal obowiązują.
Których modeli mogą używać narzędzia?
Dowolnego modelu obrazów, wideo lub audio z katalogu. Narzędzia generowania mają rozsądne wartości domyślne; podaj model, by wybrać inny, albo użyj PopNowCreateTask z dowolnym ID modelu. popnow_list_models pokazuje ID bezpośrednio z poziomu agenta.
Czy jest wersja dla JavaScriptu?
Dla TypeScriptu i JavaScriptu użyj providera Vercel AI SDK albo SDK dla JavaScriptu.
Powiązane
Provider Vercel AI SDK
generateImage, generateSpeech, transcribe i modele czatu w TypeScripcie.
Serwer MCP dla deweloperów
Ten sam przebieg wyceny i zatwierdzania dla Claude Code, Cursor i Codex.
Rozliczenia API i wyceny
Jak zadanie blokuje, rozlicza i zwraca USD.
langchain-popnow na GitHubie
Źródło, zgłoszenia i changelog.
Przepisy i skille
Uruchamiaj zapisane przepisy i workflowy przez API lub MCP. Pobierz wycenę, zatwierdź budżet w USD, śledź postępy i wznawiaj wstrzymane uruchomienia przy użyciu pierwotnego klucza API.
AI SDK
Modele PopNow w Vercel AI SDK 7: generateImage do tekstu na obraz i edycji, generateSpeech, transcribe i modele czatu. Rozliczane w USD jednym kluczem API.

