#openai #openai-api #openapi #ai #async #wasm #api-key

async-openai-wasm

基于WASM的OpenAI Rust库

8个版本

0.23.4 2024年7月24日
0.23.1 2024年6月11日
0.21.0 2024年5月8日
0.20.0 2024年4月16日

#532 in 网页编程

Download history 227/week @ 2024-04-13 171/week @ 2024-04-20 16/week @ 2024-04-27 189/week @ 2024-05-04 22/week @ 2024-05-11 7/week @ 2024-05-18 2/week @ 2024-05-25 193/week @ 2024-06-08 32/week @ 2024-06-15 3/week @ 2024-06-22 26/week @ 2024-06-29 103/week @ 2024-07-20 34/week @ 2024-07-27

每月158次下载
用于 transprompt

MIT 协议

310KB
5.5K SLoC

async-openai-wasm

基于WASM的异步Rust库

概述

async-openai-wasmasync-openai 的一个分支,通过针对 wasm32-unknown-unknown 来支持WASM目标。这意味着 >99% 的代码库应归功于原始项目。当 async-openai 发布新版本时,将与原始项目进行手动同步。版本保持与 async-openai 发布同步,这意味着当 async-openai 发布 x.y.z 时,async-openai-wasm 也会发布一个 x.y.z 版本。

async-openai-wasm 是 OpenAI 的非官方 Rust 库。

  • 它基于 OpenAI OpenAPI 规范
  • 当前功能
    • 助手(v2)
    • 音频
    • 批量处理
    • 聊天
    • 完成(旧版)
    • 嵌入
    • 文件
    • 微调
    • 图像
    • 模型
    • 审查
    • WASM支持
  • 所有可用API上的SSE流
  • 速率限制 时,请求(除SSE流外)包括表单提交会使用指数退避重试。
  • 所有请求对象的直观构建器模式。
  • Microsoft Azure OpenAI 服务(仅限符合 OpenAI 规范的API)

关于Azure OpenAI服务(AOS)的说明async-openai-wasm 主要实现 OpenAI 规范,并不试图与 AOS 规范保持一致。就像 async-openai 一样。

async-openai 的区别

++ WASM支持

++ WASM示例

-- Tokio

-- 非Wasm示例:请参考原始项目 async-openai

-- 回退重试:由于 这个问题急需帮助

-- 文件保存:在浏览器上 wasm32-unknown-unknown 没有访问文件系统的权限。

使用方法

该库从环境变量 OPENAI_API_KEY 读取 API密钥

# On macOS/Linux
export OPENAI_API_KEY='sk-...'
# On Windows Powershell
$Env:OPENAI_API_KEY='sk-...'

图像生成示例

use async_openai_wasm::{
    types::{CreateImageRequestArgs, ImageSize, ResponseFormat},
    Client,
};
use std::error::Error;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // create client, reads OPENAI_API_KEY environment variable for API key.
    let client = Client::new();

    let request = CreateImageRequestArgs::default()
        .prompt("cats on sofa and carpet in living room")
        .n(2)
        .response_format(ResponseFormat::Url)
        .size(ImageSize::S256x256)
        .user("async-openai-wasm")
        .build()?;

    let response = client.images().create(request).await?;

    // Download and save images to ./data directory.
    // Each url is downloaded and saved in dedicated Tokio task.
    // Directory is created if it doesn't exist.
    let paths = response.save("./data").await?;

    paths
        .iter()
        .for_each(|path| println!("Image file path: {}", path.display()));

    Ok(())
}

放大以适应README,实际大小256x256

贡献

此存储库只接受与WASM支持相关的bug报告和PR。对于其他问题和PR,请访问原始项目 async-openai

本项目遵守 Rust行为准则

配套Crates

  • openai-func-enums 提供了过程宏,使得使用此库与OpenAI API的工具调用功能更简单。它还提供了可以添加到现有 clap 应用程序子命令的 derive 宏,以实现自然语言的使用。它还支持 openai 的 并行工具调用,并允许您选择同时运行多个工具调用或在各自的 OS 线程中运行。

为什么有 async-openai-wasm

因为我想要开发和发布一个依赖于 async-openaiexperiments 分支中的 wasm 功能的 crate,但稳定 wasm 功能的步伐与我预期的不同。

许可证

附加修改许可为 MIT许可证。原始项目也许可为 MIT许可证

依赖关系

~6–21MB
~342K SLoC