客户端 Client

客户端库提供了与 fal 端点交互的便捷方式。目前我们支持以下平台:

我们的 API 旨在成为简单的 HTTP 端点,因此即使您选择的平台不受支持,您仍然可以使用标准 HTTP 请求与它们交互。但是,如果您希望看到对特定平台的支持,请告诉我们,我们很乐意听取您的用例。

安装

fal 客户端可通过每种受支持语言的标准包管理器获取:

bash
Javascript(npm)
bash
npm install --save @fal-ai/serverless-client

身份验证

导航到我们的仪表板的密钥页面并从 UI 生成密钥

我们所有的客户端都希望默认设置 FAL_KEY 环境变量。

bash
export FAL_KEY=89733b28-••••••••

初始化客户端

在某些环境中,例如客户端 JavaScript 和原生移动应用,您需要手动设置它。

js
Javascript
js
fal.config({
  credentials: 'PASTE_YOUR_FAL_KEY_HERE', // 或者返回字符串的函数
})
保护您的 API 密钥

虽然客户端在浏览器环境中工作,但不建议将凭据保留在浏览器中。相反,您应该使用服务器端代理来处理凭据。查看我们的服务器端指南以获取指导。

订阅队列更新

客户端为您提供了一种订阅队列更新的方法。如果您希望在函数运行完成时收到通知,或者希望在生成日志时获取日志,这将非常有用。

每次队列状态发生变化时,都会调用 onQueueUpdate 回调。update 对象包含队列状态数据,如 状态类型 部分所述。

js
Javascript
js
import * as fal from '@fal-ai/serverless-client'

const result = await fal.subscribe('fal-ai/fast-lightning-sdxl', {
  input: {
    prompt: 'a cute puppy',
  },
  pollInterval: 500,
  logs: true,
  onQueueUpdate: (update) => {
    console.log(update.status)
    if (update.status === 'IN_PROGRESS') {
      update.logs.map(log => log.message).forEach(console.log)
    }
  },
})
console.log(result.url)

运行函数

客户端为您提供了一种运行函数的方法。如果您希望运行快速执行的函数并等待结果,这将非常有用。

js
Javascript
js
import * as fal from '@fal-ai/serverless-client'

const result = await fal.run(FUNCTION_ID, {
  input: {
    prompt: 'a cute puppy',
  },
})
console.log(result)
对于长时间请求,优先使用队列而不是运行!

run方法对于短时间运行的函数来说很方便,它只会运行该函数并等待结果。对于长时间运行的函数(例如 ML 流程),建议改用queue

文件上传

某些 API 要求您传递文件 URL 作为输入。好消息是,客户端提供了一种轻松将文件上传到我们的服务器并返回 URL 的方法。

自动上传

某些客户端提供自动上传功能,可自动为您上传文件。这对于小文件(例如图像)特别有用。例如,在 JavaScript 中,如果输入属性的值为 File(或任何 Blob 子类型),则 JS 客户端将自动上传文件并用生成的 URL 替换值。使用 Data 对象时,Swift 也是如此。

Python 客户端尚不支持自动上传,但您可以改用手动上传方法。

手动上传

自动上传功能只是一种基于我们的存储 API 构建的便捷方法,这意味着您也可以自己处理文件上传。如果您希望在提交之前上传文件以便为用户提供自定义 UI/UX,那么这很有用。

js
Javascript
js
const file = '' // 引用 File 对象
const url = await fal.storage.upload(file)

流式传输

某些端点支持流式传输,这允许您在生成结果时获取部分结果。这对于产生中间结果的长时间运行的函数特别有用,例如 Visual LLM 和具有多个步骤的工作流。

该 API 应该与其他 API 相似,但它将返回一个流对象,您可以使用它来获取请求期间生成的所有事件。以下是 fal-ai/llavav15-13b 的示例:

js
Javascript
js
import * as fal from '@fal-ai/serverless-client'

const stream = await fal.stream('fal-ai/llavav15-13b', {
  input: {
    image_url: 'https://llava-vl.github.io/static/images/monalisa.jpg',
    prompt: 'Do you know who drew this painting?',
  },
})

for await (const event of stream) {
  console.log('partial', event)
}

const result = await stream.done()
console.log('final result', result)

上次更新于 2024 年 6 月 21 日