点数
DoTs 是基于DO OpenAPIv3规格的官方数字海洋打字客户端.
新设 ——推论现活在自己的名字空间:
import { Client } from "@digitalocean/dots/inference"遗产import { InferenceClient } from "@digitalocean/dots"仍得到充分支持(Client财务报告和审定财务报表InferenceClient是同一构造器)。 跳转到 AI 推论( I) 用于使用.在v1.11.0中新建 —— 说
DoTs舰只一等支持 DigitalOcean 无服务器推论:流式聊天完成,图像生成,和模型上市. 浏览可运行的脚本examples/inference/。 。 。 .
开始
先决条件
- 节点JS 20.10或以上
- 类型脚本 5 或以上
- 一个数字海洋账户,有活跃订阅. 连同一个数字海洋标志,并有管理数字海洋资源的适当权限.
"type": "module"在您的软件包中。 json( 用于 ES 模块支持)
安装
该套件发布于npmjs.com.
npm i @digitalocean/dots
文档
注:目前缺乏综合文件质量,正在编制之中。 文件正在积极改进,一旦固定,将予以更新.
https://digital oceandots.readthedocs.io/en/latest/ (中文(简体) )
基本用途
从客户端开始的快速指南
认证
dots 必须初始化为 createDigitalOceanClient()。需要数字海洋符号。 可通过 DigitalOceanApiKeyAuthenticationProvider(),下文举例:
const authProvider = new DigitalOceanApiKeyAuthenticationProvider(token!);
// Create request adapter using the fetch-based implementation
const adapter = new FetchRequestAdapter(authProvider);
// Create the API client
const client = createDigitalOceanClient(adapter);
管理数字海洋资源
在下面查找创建数字海洋卷的工作示例 dots数字 :
import { createDigitalOceanClient, DigitalOceanApiKeyAuthenticationProvider,
FetchRequestAdapter, Volumes_ext4 } from "@digitalocean/dots";
const token = process.env.DIGITALOCEAN_TOKEN;
if (!token) {
throw new Error("DIGITALOCEAN_TOKEN not set");
}
const authProvider = new DigitalOceanApiKeyAuthenticationProvider(token!);
// Create request adapter using the fetch-based implementation
const adapter = new FetchRequestAdapter(authProvider);
// Create the API client
const client = createDigitalOceanClient(adapter);
async function main(): Promise<void> {
try {
const volumeReq: Volumes_ext4 = {
sizeGigabytes: 10,
name: `test-volume`,
description: "Block storage testing",
region: "nyc3",
filesystemType: "ext4",
};
const resp = await client.v2.volumes.post(volumeReq);
if (resp && resp.volume) {
const volume = resp.volume;
console.log(`Created volume ${volume.name} <ID: ${volume.id}>`);
} else {
throw new Error("Failed to create volume or volume is undefined");
}
console.log("Done!");
} catch (err) {
console.error(err);
}
}
main();
运行上面代码片段 tsc && node index.js 将输出如下:
Created volume test-volume <ID: 751d0c09-1613-11f0-8aa5-0a58ac147241>
Done!
更多工作实例可见于 dots/examples。 。 。 .
AI 推论( I)
已添加 页:1。直接从
DoTs——流畅聊天,图像生成,模型上市等.
认证
推断API由从v2控制-平面符号中分离的证书入门. 您必须使用 一个 改为:
- A 类 DigitalOcean 个人访问托肯( PAT) 与 完全进入 范围 在所有资源,包括GenAI/Inference中阅读/写作。 只有特定资源类型的托肯将被拒绝.
- A 类 模式访问密钥 数字海洋云控制台 GenAI 平台 — 模式存取密钥这些是推荐的 生产工作量的证书 因为范围只是推断.
证书作为 apiKey 推论 Client。同样的 DIGITALOCEAN_TOKEN 校对:Soup 只有在 pAT有全访问范围;否则使用模型访问密钥.
import { Client } from "@digitalocean/dots/inference";
const client = new Client({
apiKey: process.env.DIGITALOCEAN_TOKEN!, // full-access PAT or Model Access Key
});
正在流出聊天完成
import { Client } from "@digitalocean/dots/inference";
const client = new Client({ apiKey: process.env.DIGITALOCEAN_TOKEN! });
const stream = await client.chat.completions.create({
model: "llama3.3-70b-instruct",
messages: [{ role: "user", content: "Write two short lines about DigitalOcean." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices?.[0]?.delta?.content ?? "");
}
process.stdout.write("\n");
还支持调用式的流线:
await client.chat.completions.create(
{ model: "llama3.3-70b-instruct", messages, stream: true },
{
onData: (chunk) => process.stdout.write(chunk.choices?.[0]?.delta?.content ?? ""),
onComplete: () => console.log("\n[done]"),
onError: (err) => console.error(err),
},
);
图像生成
import { Client } from "@digitalocean/dots/inference";
const client = new Client({ apiKey: process.env.DIGITALOCEAN_TOKEN! });
const result = await client.images.generate({
model: "stable-diffusion-3.5-large", // any image model from `client.models.list()`
prompt: "An isometric illustration of a serverless data center, soft pastel colors",
n: 1,
size: "1024x1024",
});
const img = result.data?.[0];
if (img?.url) {
console.log(img.url);
} else if (img?.b64_json) {
// Stable Diffusion returns base64 — decode and save to disk.
const fs = await import("node:fs");
fs.writeFileSync("generated-image.png", Buffer.from(img.b64_json, "base64"));
console.log("Saved generated-image.png");
}
列出现有模式
import { Client } from "@digitalocean/dots/inference";
const client = new Client({ apiKey: process.env.DIGITALOCEAN_TOKEN! });
const models = await client.models.list();
for (const m of models.data ?? []) {
console.log(`${m.id}\t${m.owned_by ?? ""}`);
}
导入样式( 全部等同)
新的 @digitalocean/dots/inference 子路径支持所有通常的导入形状 —— 选择与您的项目常规相匹配的形状 。 下面的每个表格都决定 不变 构造器( e)Client === InferenceClient),因此可以混合并匹配,而没有任何运行时间差异:
// Named import — closest to `from pydo.inference import client`
import { Client } from "@digitalocean/dots/inference";
// Namespace import — gives you Client, ClientOptions, SSEStream, etc. in one bag
import * as inference from "@digitalocean/dots/inference";
const c = new inference.Client({ apiKey });
// Default import
import Client from "@digitalocean/dots/inference";
// Legacy name still reachable through the new subpath
import { InferenceClient } from "@digitalocean/dots/inference";
// Original root import — unchanged, still fully supported
import { InferenceClient } from "@digitalocean/dots";
后相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相. 遗产
import { InferenceClient } from "@digitalocean/dots"继续和以前一样工作。 现有代码无需更改. 在两个表面自动添加到 OpenAPI spec 地块中的新端点—— 您不需要编辑src/inference-gen/inference.ts来揭露他们.
可运行示例
上面每个片段的最小,可操作的版本活在下面 examples/inference/数字 :
namespace-usage.ts- 练习新的@digitalocean/dots/inference命名空间端到端( 身份检查,models.list,非流畅聊天,流畅聊天,嵌入式).chat-streaming.ts——流出聊天完成并打印到到达时的符号.image-generation.ts—— 生成一个单一的图像stable-diffusion-3.5-large。如果模型返回一个,则打印URL,否则解码基数64的有效载荷并写入generated-image.png。 。 。 .models-list.ts——列出可以调用的所有型号的ID.
每个脚本只需要 DIGITALOCEAN_TOKEN 设定 :
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/namespace-usage.ts
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/chat-streaming.ts
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/image-generation.ts
DIGITALOCEAN_TOKEN=... npx tsx examples/inference/models-list.ts
看见
HTTP 401: Unauthorized — Unable to authenticate you您提供的令牌要么是空的, 过期的, 要么只被限定为特定资源 。 资源范围PAT无法调用推断网关——使用全接PAT或模型访问密钥.
已知问题
本节列出已知的客户端生成器问题.
产生巢穴 value 嵌入数组的字段
- 这是我们的代码生成工具Kiota的现存问题
- 有关这个问题的更详细情况可见于此 这里
路线图
DoTs 覆盖数字海洋控制平面今日,积极拓展AI/Information表面. 即将到来和飞行中的工作:
- 推论
- 扩展了对无服务器推论端点的覆盖(响应API,嵌入,音频,Async图像生成).
- 用于推断请求/反应形状的一等打字(目前打法松散为:
Record<string, any>用于前向比较). - GenAI平台控制平面的助手:代理,知识基础,以及模型访问密钥管理.
- 内建回调,速率限制处理,以及结构化出错类型用于推论调用.
- 专门推论
- 提供和管理专门推论终点和信使的方便包装.
- 数字化
- 为控制平面和推论工作流程更好地生成文件和端到端实例.
- 扩展示例
examples/(包括额外)examples/inference/剧本).
有你喜欢的用例优先吗? 打开一个问题 并告诉我们.
捐款
我们欢迎捐款! 随便你,通过访问我们的客户 联系指南 详细信息和指南. 对于特性请求或错误报告,打开一个问题帮助我们改进客户端.
许可证
这个项目根据Apache许可证2.0获得许可. 见 自由主义 详细文件.