AKI.IO 类型脚本/节点.js SDK
一个现代的TypeScript/Node.js SDK,用于AKI.IO AI Model Hub API.
安装
npm install @aki-io/aki-io
yarn add @aki-io/aki-io
pnpm add @aki-io/aki-io
快速启动
import { AkiClient } from '@aki-io/aki-io'
const client = new AkiClient({
endpointName: 'llama3_chat',
apiKey: 'your-api-key-here'
})
const result = await client.doApiRequest({
prompt_input: 'Hello, how are you?'
})
console.log(result.text)
配置
const client = new AkiClient({
endpointName: 'llama3_chat', // Required: API endpoint name
apiKey: 'your-api-key-here', // Required: Your API key
apiServer: 'https://aki.io', // Optional: API server URL (default: 'https://aki.io')
outputBinaryFormat: 'base64', // Optional: 'base64' or 'byteString' (default: 'base64')
raiseExceptions: false, // Optional: Throw exceptions on errors (default: false)
progressInterval: 0.2, // Optional: Progress poll interval in seconds (default: 0.2)
returnToolCallDict: false // Optional: Parse tool calls as JSON (default: false)
})
使用量
简单请求
import { AkiClient } from '@aki-io/aki-io'
const client = new AkiClient({
endpointName: 'llama3_chat',
apiKey: process.env.AKI_API_KEY!
})
const result = await client.doApiRequest({
prompt_input: 'What is the capital of France?'
})
if (result.success) {
console.log(result.text)
} else {
console.error('Error:', result.error)
}
聊天环境
const result = await client.doApiRequest({
chat_context: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'What is 2+2?' },
{ role: 'assistant', content: '2+2 equals 4.' },
{ role: 'user', content: 'And what is 3+3?' }
]
})
console.log(result.text)
进程调用
const result = await client.doApiRequest(
{
prompt_input: 'Write a long story about a robot.'
},
(progressInfo, progressData) => {
console.log(`Progress: ${progressInfo.progress}%`)
console.log(`Queue Position: ${progressInfo.queue_position}`)
if (progressData?.text) {
console.log('Partial text:', progressData.text)
}
}
)
console.log('Final result:', result.text)
Async 生成器( 结构化)
for await (const update of client.getApiRequestGenerator({
prompt_input: 'Tell me a joke'
})) {
if (update.job_state === 'started') {
console.log('Job started:', update.job_id)
} else if (update.job_state === 'processing') {
console.log('Progress:', update.progress_data?.text)
} else if (update.job_state === 'done') {
console.log('Final result:', update.result_data?.text)
}
}
方便函数
import { doAkiRequest } from '@aki-io/aki-io'
const result = await doAkiRequest(
'llama3_chat',
'your-api-key',
{ prompt_input: 'Hello!' }
)
console.log(result.text)
验证 API 密钥
const validation = await client.initApiKey()
if (validation.success) {
console.log('API key is valid')
} else {
console.error('Invalid API key:', validation.error)
}
获取可用的终点
const endpoints = await client.getEndpointList()
console.log('Available endpoints:', endpoints)
获取终点细节
const details = await client.getEndpointDetails('llama3_chat')
console.log('Endpoint details:', details)
二进制数据处理
import { encodeBinary, decodeBinary } from '@aki-io/aki-io'
const imageBuffer = await fs.readFile('image.png')
const encoded = encodeBinary(imageBuffer, 'png')
console.log(encoded)
// data:image/png;base64,iVBORw0KGgo...
const [format, decoded] = decodeBinary(encoded)
console.log(format) // 'png'
console.log(decoded) // Buffer containing the image data
处理错误
import { AkiClient, AkiError, ConnectionError, ValidationError } from '@aki-io/aki-io'
const client = new AkiClient({
endpointName: 'llama3_chat',
apiKey: 'your-api-key',
raiseExceptions: true
})
try {
const result = await client.doApiRequest({ prompt_input: 'Hello' })
console.log(result.text)
} catch (error) {
if (error instanceof ValidationError) {
console.error('Invalid request:', error.message)
} else if (error instanceof ConnectionError) {
console.error('Connection failed:', error.message)
} else if (error instanceof AkiError) {
console.error('API error:', error.message)
}
}
API 参考
AkiClient
构造器
new AkiClient(config: AkiClientConfig)
方法
doApiRequest(params, progressCallback?)- 请求APIgetApiRequestGenerator(params)- 获取同步生成器进行流出initApiKey(apiKey?)- 验证 API 密钥getEndpointList()- 获取可用的终点列表getEndpointDetails(endpointName?)- 获取终点细节cancelRequest(jobId?)- 取消运行中的请求setApiKey(apiKey)- 设置新的 API 密钥getVersion()- 获得SDK版本(静态)
工具函数
encodeBinary(data, format?, type?)- 编码二进制数据至基数64decodeBinary(base64String)- 解码基数64到二进制isValidBase64(string)- 检查字符串是否有效isValidJson(string)- 检查字符串是否有效 JSON
类型
interface AkiClientConfig {
endpointName: string
apiKey: string
apiServer?: string
outputBinaryFormat?: 'base64' | 'byteString'
raiseExceptions?: boolean
progressInterval?: number
returnToolCallDict?: boolean
}
interface ApiResponse {
success: boolean
job_id?: string
text?: string
images?: string | string[]
error?: string
error_code?: number
// ... additional fields
}
interface ProgressInfo {
job_id: string
progress: number
queue_position: number
estimate: number
job_state?: JobState
success?: boolean
}
interface ProgressData {
text?: string
images?: string | string[]
num_generated_tokens?: number
// ... additional fields
}
type ProgressCallback = (progressInfo: ProgressInfo, progressData: ProgressData | null) => void
type JobState = 'started' | 'processing' | 'done' | 'canceled' | 'lapsed'
所需资源
- 节点.js 18.0.0或以上
- TypeScript 5.0 或以上(用于开发)
许可证
麻省理工学院执照 - 看 自由主义 详细文件.