раздел 03
Интеграция по API
Теперь вызовем модель из кода. Логика везде одинаковая: передаёте ключ, указываете эндпоинт модели, шлёте параметры (input), получаете результат - обычно URL сгенерированного медиа.
Ключ в .env
Ключ передаётся через переменную окружения FAL_KEY. Не вписывайте его в код и не коммитьте - держите в .env:
FAL_KEY=ваш-ключ
Клиенты сами читают FAL_KEY из окружения, так что отдельно прописывать ключ в коде не нужно.
Python: fal-client
Установка:
pip install fal-client
Вызов модели с ожиданием результата (subscribe - дождаться готового ответа):
import fal_client
result = fal_client.subscribe(
"fal-ai/flux/dev",
arguments={
"prompt": "a cozy cabin in the woods, morning light",
},
)
# result содержит данные генерации, обычно с URL медиа
print(result["images"][0]["url"])
JS: @fal-ai/client
Установка:
npm install @fal-ai/client
Вызов с ожиданием результата:
import { fal } from "@fal-ai/client";
const result = await fal.subscribe("fal-ai/flux/dev", {
input: {
prompt: "a cozy cabin in the woods, morning light",
},
});
// result.data содержит результат генерации, обычно с URL медиа
console.log(result.data.images[0].url);
Очередь для долгих задач
Для тяжёлых задач (видео, большие генерации) держать одно длинное соединение неудобно. Тогда задачу отправляют в очередь через submit: вы получаете идентификатор запроса, а результат забираете позже, когда он готов.
import fal_client
handler = fal_client.submit(
"fal-ai/flux/dev",
arguments={"prompt": "a cozy cabin in the woods"},
)
request_id = handler.request_id
# позже забираем результат по request_id
result = fal_client.result("fal-ai/flux/dev", request_id)
import { fal } from "@fal-ai/client";
const { request_id } = await fal.queue.submit("fal-ai/flux/dev", {
input: { prompt: "a cozy cabin in the woods" },
});
// позже забираем результат по request_id
const result = await fal.queue.result("fal-ai/flux/dev", { requestId: request_id });
Что в итоге приходит
Результат почти всегда содержит ссылку (URL) на сгенерированный файл - картинку, видео или аудио. Эту ссылку вы сохраняете у себя или отдаёте пользователю. Структура ответа зависит от модели, поэтому ориентируйтесь на её страницу в каталоге.