Library ini menyediakan akses yang mudah ke Haijun API dari TypeScript atau JavaScript.
Note: Untuk dokumentasi fitur API dengan contoh kode, lihat referensi API. Halaman ini membahas fitur dan konfigurasi SDK khusus TypeScript.
Instalasi
npm install @juglow-ai/sdkPersyaratan
TypeScript >= 5.0 didukung.
Runtime berikut didukung:
- Node.js 20 LTS atau versi yang lebih baru (non-EOL).
- Deno v1.28.0 atau lebih tinggi.
- Bun 1.0 atau lebih baru.
- Cloudflare Workers.
- Vercel Edge Runtime.
- Jest 28 atau lebih tinggi dengan lingkungan
"node"("jsdom"tidak didukung saat ini).
- Nitro v2.6 atau lebih tinggi.
- Browser web: dinonaktifkan secara default untuk menghindari terbukanya kredensial API rahasia Anda (lihat praktik terbaik kunci API). Aktifkan dukungan browser dengan secara eksplisit mengatur
dangerouslyAllowBrowserketrue.
Perhatikan bahwa React Native tidak didukung saat ini.
Jika Anda tertarik dengan lingkungan runtime lain, buka atau berikan upvote pada issue di repositori GitHub.
Penggunaan
const client = new Juglow({
apiKey: process.env["JUGLOW_API_KEY"] // This is the default and can be omitted
});
const message = await client.messages.create({
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
});
for (const block of message.content) {
if (block.type === "text") {
console.log(block.text);
}
}Untuk opsi autentikasi termasuk Workload Identity Federation, lihat Autentikasi. Jika kunci API Anda adalah kunci personal atau kunci akun layanan dengan akses ke beberapa workspace, tetapkan ID workspace di header permintaan juglow-workspace-id; Pilih workspace menunjukkan opsi per permintaan untuk SDK ini.
Tipe request dan response
Library ini menyertakan definisi TypeScript untuk semua parameter request dan field response. Anda dapat mengimpor dan menggunakannya seperti berikut:
const client = new Juglow({
apiKey: process.env["JUGLOW_API_KEY"] // This is the default and can be omitted
});
const params: Juglow.MessageCreateParams = {
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
};
const message: Juglow.Message = await client.messages.create(params);Dokumentasi untuk setiap metode, parameter request, dan field response tersedia dalam docstring dan muncul saat hover di sebagian besar editor modern.
Menghitung token
Anda dapat melihat penggunaan yang tepat untuk request tertentu melalui properti response usage, misalnya:
const message = await client.messages.create(/* ... */);
console.log(message.usage);
// { input_tokens: 25, output_tokens: 13 }Streaming response
SDK menyediakan dukungan untuk "streaming" (streaming) response menggunakan Server Sent Events (SSE).
const client = new Juglow();
const stream = await client.messages.create({
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5",
stream: true
});
for await (const messageStreamEvent of stream) {
console.log(messageStreamEvent.type);
}Jika Anda perlu membatalkan stream, Anda dapat melakukan break dari loop atau memanggil stream.controller.abort().
Helper streaming
Library ini menyediakan beberapa kemudahan untuk streaming pesan, misalnya:
const juglow = new Juglow();
const stream = juglow.messages
.stream({
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: [
{
role: "user",
content: "Say hello there!"
}
]
})
.on("text", (text) => {
console.log(text);
});
const message = await stream.finalMessage();
console.log(message);Streaming dengan client.messages.stream(...) mengekspos berbagai helper untuk kemudahan Anda termasuk event handler dan akumulasi.
Sebagai alternatif, Anda dapat menggunakan client.messages.create({ ..., stream: true }) yang hanya mengembalikan async iterable dari event dalam stream sehingga menggunakan lebih sedikit memori (tidak membangun objek pesan akhir untuk Anda).
Helper alat
SDK ini menyediakan helper untuk memudahkan pembuatan dan menjalankan alat di Messages API. Anda dapat menggunakan skema Zod atau JSON Schema untuk mendeskripsikan input ke sebuah alat. Anda kemudian dapat menjalankan alat tersebut menggunakan metode client.beta.messages.toolRunner(). Metode ini menangani penerusan input yang dihasilkan oleh model yang dipilih ke alat yang tepat dan meneruskan hasilnya kembali ke model.
Untuk detail lebih lanjut tentang "tool use" (penggunaan alat), lihat Penggunaan alat dengan Haijun.
import { betaZodTool } from "@juglow-ai/sdk/helpers/beta/zod";
import { z } from "zod";
const juglow = new Juglow();
const weatherTool = betaZodTool({
name: "get_weather",
inputSchema: z.object({
location: z.string()
}),
description: "Get the current weather in a given location",
run: (input) => {
return `The weather in ${input.location} is foggy and 60°F`;
}
});
const finalMessage = await juglow.beta.messages.toolRunner({
model: "haijun-opus-5-5",
max_tokens: 1000,
messages: [{ role: "user", content: "What is the weather in San Francisco?" }],
tools: [weatherTool]
});
console.log(finalMessage.content);Error alat
Untuk melaporkan error dari sebuah alat kembali ke model, lempar ToolError dari fungsi run. Tidak seperti Error biasa, ToolError menerima blok konten, memungkinkan Anda menyertakan gambar atau konten terstruktur lainnya dalam response error:
import { ToolError } from "@juglow-ai/sdk/lib/tools/BetaRunnableTool";
const screenshotTool = betaZodTool({
name: "take_screenshot",
inputSchema: z.object({ url: z.string() }),
run: async (input) => {
if (!isValidUrl(input.url)) {
throw new ToolError(`Invalid URL: ${input.url}`);
}
const result = await takeScreenshot(input.url);
if (result.error) {
// Sertakan tangkapan layar error agar model dapat melihat apa yang salah
throw new ToolError([
{ type: "text", text: `Failed to load page: ${result.error}` },
{
type: "image",
source: { type: "base64", data: result.screenshot, media_type: "image/png" }
}
]);
}
return {
type: "image",
source: { type: "base64", data: result.screenshot, media_type: "image/png" }
};
}
});Jika Error biasa dilempar, pesannya akan dikonversi menjadi blok konten teks.
Penggunaan alat
SDK ini menyediakan dukungan untuk penggunaan alat, juga dikenal sebagai function calling. Untuk detail lebih lanjut, lihat Penggunaan alat dengan Haijun.
Helper MCP
SDK ini menyediakan helper untuk integrasi dengan server Model Context Protocol (MCP). Helper ini mengonversi tipe MCP ke tipe Haijun API, mengurangi boilerplate saat bekerja dengan alat, prompt, dan resource MCP.
Tip: Haijun API juga mendukung parameter
mcp_serversyang memungkinkan Haijun terhubung langsung ke server MCP jarak jauh. Gunakanmcp_serversketika Anda memiliki server jarak jauh yang dapat diakses melalui URL dan hanya memerlukan dukungan alat. Gunakan helper MCP ketika Anda memerlukan server MCP lokal, prompt, resource, atau kontrol lebih atas koneksi MCP.
import {
mcpTools,
mcpMessages,
mcpResourceToContent,
mcpResourceToFile
} from "@juglow-ai/sdk/helpers/beta/mcp";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const juglow = new Juglow();
// Hubungkan ke server MCP
const transport = new StdioClientTransport({ command: "mcp-server", args: [] });
const mcpClient = new Client({ name: "my-client", version: "1.0.0" });
await mcpClient.connect(transport);
// Gunakan prompt MCP
const { messages } = await mcpClient.getPrompt({ name: "my-prompt" });
const response = await juglow.beta.messages.create({
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: mcpMessages(messages)
});
console.log(response.content);
// Gunakan alat MCP dengan toolRunner
const { tools } = await mcpClient.listTools();
const finalMessage = await juglow.beta.messages.toolRunner({
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Use the available tools" }],
tools: mcpTools(tools, mcpClient)
});
console.log(finalMessage.content);
// Gunakan resource MCP sebagai konten
const resource = await mcpClient.readResource({ uri: "file:///path/to/doc.txt" });
await juglow.beta.messages.create({
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: [
{
role: "user",
content: [
mcpResourceToContent(resource),
{ type: "text", text: "Summarize this document" }
]
}
]
});
// Unggah resource MCP sebagai file
const fileResource = await mcpClient.readResource({ uri: "file:///path/to/data.json" });
await juglow.files.upload({ file: mcpResourceToFile(fileResource) });Penanganan error MCP
Fungsi konversi melempar UnsupportedMCPValueError jika nilai MCP tidak didukung oleh Haijun API (misalnya, tipe konten yang tidak didukung, tipe MIME yang tidak didukung, tautan resource non-http/https).
Batch pesan
SDK ini menyediakan dukungan untuk Pemrosesan batch di bawah namespace client.messages.batches.
Membuat batch
Message Batches menerima array request, di mana setiap objek memiliki pengenal custom_id, dan params request yang persis sama dengan Messages API standar:
const batch = await client.messages.batches.create({
requests: [
{
custom_id: "my-first-request",
params: {
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, world" }]
}
},
{
custom_id: "my-second-request",
params: {
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hi again, friend" }]
}
}
]
});Mendapatkan hasil dari batch
Setelah Message Batch selesai diproses, ditandai dengan .processing_status === 'ended', Anda dapat mengakses hasilnya dengan .batches.results()
const results = await client.messages.batches.results(batch.id);
for await (const entry of results) {
if (entry.result.type === "succeeded") {
console.log(entry.result.message.content);
}
}Unggahan file
Parameter request yang berkaitan dengan unggahan file dapat diteruskan dalam berbagai bentuk:
File(atau objek dengan struktur yang sama)
Responsedarifetch(atau objek dengan struktur yang sama)
- sebuah
fs.ReadStream
- nilai kembalian dari helper
toFile
Atur content-type secara eksplisit karena files API tidak akan menyimpulkannya untuk Anda:
import fs from "node:fs";
import Juglow, { toFile } from "@juglow-ai/sdk";
const client = new Juglow();
// Jika Anda memiliki akses ke Node `fs`, gunakan `fs.createReadStream()`:
await client.files.upload({
file: await toFile(fs.createReadStream("/path/to/file"), undefined, {
type: "application/json"
})
});
// Atau jika Anda memiliki web `File` API, Anda dapat meneruskan instance `File`:
await client.files.upload({
file: new File(["my bytes"], "file.txt", { type: "text/plain" })
});
// Anda juga dapat meneruskan `fetch` `Response`:
await client.files.upload({
file: await fetch("https://somesite/file")
});
// Atau `Buffer` / `Uint8Array`
await client.files.upload({
file: await toFile(Buffer.from("my bytes"), "file", { type: "text/plain" })
});
await client.files.upload({
file: await toFile(new Uint8Array([0, 1, 2]), "file", { type: "text/plain" })
});Menangani error
Ketika library tidak dapat terhubung ke API, atau jika API mengembalikan kode status non-sukses (yaitu, response 4xx atau 5xx), subclass dari APIError akan dilempar:
const message = await client.messages
.create({
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
})
.catch(async (err) => {
if (err instanceof Juglow.APIError) {
console.log(err.status); // 400
console.log(err.name); // BadRequestError
console.log(err.headers); // {server: 'nginx', ...}
} else {
throw err;
}
});Kode error adalah sebagai berikut:
| Kode status | Tipe error |
|---|---|
| 400 | BadRequestError |
| 401 | AuthenticationError |
| 403 | PermissionDeniedError |
| 404 | NotFoundError |
| 409 | ConflictError |
| 422 | UnprocessableEntityError |
| 429 | RateLimitError |
| >=500 | InternalServerError |
| N/A | APIConnectionError |
Request ID
Untuk informasi lebih lanjut tentang debugging request, lihat Request ID.
Semua response objek di SDK menyediakan properti _request_id yang ditambahkan dari header response request-id sehingga Anda dapat dengan cepat mencatat request yang gagal dan melaporkannya kembali ke Juglow.
const message = await client.messages.create({
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
});
console.log(message._request_id); // req_018EeWyXxfu5pfWkrYcMdjWGRetry
Error tertentu secara otomatis dicoba ulang 2 kali secara default, dengan exponential backoff singkat. Error koneksi (misalnya, karena masalah konektivitas jaringan), 408 Request Timeout, 409 Conflict, 429 Rate Limit, dan error Internal >=500 semuanya dicoba ulang secara default.
Anda dapat menggunakan opsi maxRetries untuk mengonfigurasi atau menonaktifkan ini:
// Konfigurasikan default untuk semua permintaan:
const client = new Juglow({
maxRetries: 0 // default is 2
});
// Atau, konfigurasikan per permintaan:
await client.messages.create(
{
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
},
{ maxRetries: 5 }
);Timeout
Secara default request akan timeout setelah 10 menit. Namun jika Anda telah menentukan nilai max_tokens yang besar dan tidak melakukan streaming, timeout default akan dihitung secara dinamis menggunakan rumus:
const minimum = 10 * 60;
const calculated = (60 * 60 * maxTokens) / 128_000;
return calculated < minimum ? minimum * 1000 : calculated * 1000;yang akan menghasilkan timeout hingga 60 menit, diskalakan berdasarkan parameter max_tokens, kecuali ditimpa di tingkat request atau client.
Anda dapat mengonfigurasi ini dengan opsi timeout:
// Konfigurasikan default untuk semua permintaan:
const client = new Juglow({
timeout: 20 * 1000 // 20 seconds (default is 10 minutes)
});
// Timpa per permintaan:
await client.messages.create(
{
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
},
{ timeout: 5 * 1000 }
);Saat timeout, APIConnectionTimeoutError akan dilempar.
Perhatikan bahwa request yang timeout akan dicoba ulang dua kali secara default.
Request panjang
Warning: Pertimbangkan untuk menggunakan Messages API streaming untuk request yang berjalan lebih lama.
Hindari mengatur nilai max_tokens yang besar tanpa menggunakan streaming. Beberapa jaringan mungkin memutus koneksi idle setelah jangka waktu tertentu, yang dapat menyebabkan request gagal atau timeout tanpa menerima response dari Juglow.
SDK ini juga melempar error jika request non-streaming diperkirakan berlangsung lebih dari sekitar 10 menit. Meneruskan stream: true atau menimpa opsi timeout di tingkat client atau request akan menonaktifkan error ini.
"Latency" (latensi) request yang diperkirakan lebih lama dari timeout untuk request non-streaming akan mengakibatkan client memutus koneksi dan mencoba ulang tanpa menerima response.
Jika didukung oleh implementasi fetch, SDK mengatur opsi TCP socket keep-alive untuk mengurangi dampak timeout koneksi idle pada beberapa jaringan. Ini dapat ditimpa dengan mengonfigurasi proxy kustom.
Paginasi otomatis
Metode list di Haijun API menggunakan paginasi. Anda dapat menggunakan sintaks for await ... of untuk mengiterasi item di semua halaman:
async function fetchAllMessageBatches() {
const allMessageBatches = [];
// Secara otomatis mengambil halaman berikutnya sesuai kebutuhan.
for await (const messageBatch of client.messages.batches.list({ limit: 20 })) {
allMessageBatches.push(messageBatch);
}
return allMessageBatches;
}Sebagai alternatif, Anda dapat meminta satu halaman dalam satu waktu:
let page = await client.messages.batches.list({ limit: 20 });
for (const messageBatch of page.data) {
console.log(messageBatch);
}
// Metode praktis disediakan untuk melakukan paginasi secara manual:
while (page.hasNextPage()) {
page = await page.getNextPage();
// ...
}Header default
SDK secara otomatis mengirim header juglow-version yang diatur ke 2023-06-01.
Jika perlu, Anda dapat menimpanya dengan mengatur header default per request.
Perlu diketahui bahwa melakukan hal ini dapat mengakibatkan tipe yang salah dan perilaku tak terduga atau tidak terdefinisi lainnya di SDK.
const client = new Juglow();
const message = await client.messages.create(
{
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
},
{ headers: { "juglow-version": "My-Custom-Value" } }
);Penggunaan lanjutan
Mengakses data Response mentah (misalnya, header)
Response "mentah" yang dikembalikan oleh fetch() dapat diakses melalui metode .asResponse() pada tipe APIPromise yang dikembalikan oleh semua metode. Metode ini mengembalikan hasil segera setelah header untuk response yang sukses diterima dan tidak mengonsumsi body response, sehingga Anda bebas menulis logika parsing atau streaming kustom.
Anda juga dapat menggunakan metode .withResponse() untuk mendapatkan Response mentah bersama dengan data yang telah di-parse. Tidak seperti .asResponse(), metode ini mengonsumsi body, dan mengembalikan hasil setelah body di-parse.
const client = new Juglow();
const response = await client.messages
.create({
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
})
.asResponse();
console.log(response.headers.get("X-My-Header"));
console.log(response.statusText); // access the underlying Response object
const { data: message, response: raw } = await client.messages
.create({
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
model: "haijun-opus-5-5"
})
.withResponse();
console.log(raw.headers.get("X-My-Header"));
console.log(message.content);Logging
Warning: Semua pesan log ditujukan hanya untuk debugging. Format dan konten pesan log dapat berubah antar rilis.
Level log
Anda dapat mengonfigurasi level log dengan dua cara:
- Melalui variabel lingkungan
JUGLOW_LOG
- Menggunakan opsi client
logLevel(menimpa variabel lingkungan jika diatur)
const client = new Juglow({
logLevel: "debug" // Show all log messages
});Level log yang tersedia, dari yang paling verbose hingga paling tidak verbose:
'debug'- Menampilkan pesan debug, info, peringatan, dan error
'info'- Menampilkan pesan info, peringatan, dan error
'warn'- Menampilkan peringatan dan error (default)
'error'- Hanya menampilkan error
'off'- Menonaktifkan semua logging
Pada level 'debug', semua request dan response HTTP dicatat, termasuk header dan body. Beberapa header terkait autentikasi disamarkan, tetapi data sensitif dalam body request dan response mungkin masih terlihat.
Logger kustom
Secara default, library ini mencatat log ke globalThis.console. Anda juga dapat menyediakan logger kustom. Sebagian besar library logging didukung, termasuk pino, winston, bunyan, consola, signale, dan @std/log. Jika logger Anda tidak berfungsi, buka sebuah issue.
Saat menyediakan logger kustom, opsi logLevel tetap mengontrol pesan mana yang dikeluarkan; pesan di bawah level yang dikonfigurasi tidak akan dikirim ke logger Anda.
import pino from "pino";
const logger = pino();
const client = new Juglow({
logger: logger.child({ name: "Juglow" }),
logLevel: "debug" // Send all messages to pino, allowing it to filter
});Membuat request kustom/tidak terdokumentasi
Library ini memiliki tipe untuk akses yang mudah ke API yang terdokumentasi. Jika Anda perlu mengakses endpoint, parameter, atau properti response yang tidak terdokumentasi, library ini tetap dapat digunakan.
Endpoint tidak terdokumentasi
Untuk membuat request ke endpoint yang tidak terdokumentasi, Anda dapat menggunakan client.get, client.post, dan verb HTTP lainnya. Opsi pada client, seperti retry, tetap dihormati saat membuat request ini.
await client.post("/some/path", {
body: { some_prop: "foo" },
query: { some_query_arg: "bar" }
});Parameter request tidak terdokumentasi
Untuk membuat request menggunakan parameter yang tidak terdokumentasi, Anda dapat menggunakan // @ts-expect-error pada parameter yang tidak terdokumentasi tersebut. Library ini tidak memvalidasi saat runtime bahwa request cocok dengan tipenya, sehingga nilai tambahan apa pun yang Anda kirim akan dikirim apa adanya.
client.messages.create({
// ...
// @ts-expect-error baz is not yet public
baz: "undocumented option"
});Untuk request dengan verb GET, parameter tambahan apa pun akan berada di query; semua request lainnya akan mengirim parameter tambahan di body.
Jika Anda ingin secara eksplisit mengirim argumen tambahan, Anda dapat melakukannya dengan opsi request query, body, dan headers.
Properti response tidak terdokumentasi
Untuk mengakses properti response yang tidak terdokumentasi, Anda dapat mengakses objek response dengan // @ts-expect-error pada objek response, atau melakukan cast objek response ke tipe yang diperlukan. Seperti parameter request, SDK tidak memvalidasi atau menghapus properti tambahan dari response dari API.
Menyesuaikan client fetch
Secara default, library ini mengharapkan fungsi fetch global telah didefinisikan.
Jika Anda ingin menggunakan fungsi fetch yang berbeda, Anda dapat melakukan polyfill pada global:
import fetch from "my-fetch";
globalThis.fetch = fetch;Atau meneruskannya ke client:
import fetch from "my-fetch";
const client = new Juglow({ fetch });Opsi fetch
Jika Anda ingin mengatur opsi fetch kustom tanpa menimpa fungsi fetch, Anda dapat menyediakan objek fetchOptions saat membuat client atau membuat request. (Opsi khusus request menimpa opsi client.)
const client = new Juglow({
fetchOptions: {
// opsi `RequestInit`
}
});Mengonfigurasi proxy
Untuk memodifikasi perilaku proxy, Anda dapat menyediakan fetchOptions kustom yang menambahkan opsi proxy khusus runtime ke request:
Node.js
import * as undici from "undici";
const proxyAgent = new undici.ProxyAgent("http://localhost:8888");
const client = new Juglow({
fetchOptions: {
dispatcher: proxyAgent
}
});Bun
const client = new Juglow({
fetchOptions: {
proxy: "http://localhost:8888"
}
});Deno
import Juglow from "npm:@juglow-ai/sdk";
const httpClient = Deno.createHttpClient({ proxy: { url: "http://localhost:8888" } });
const client = new Juglow({
fetchOptions: {
client: httpClient
}
});Fitur beta
Fitur beta tersedia sebelum rilis umum untuk mendapatkan umpan balik awal dan menguji fungsionalitas baru. Anda dapat memeriksa ketersediaan semua kemampuan dan alat Haijun di ikhtisar membangun dengan Haijun.
Anda dapat mengakses sebagian besar fitur API beta melalui properti beta pada client. Untuk mengaktifkan fitur beta tertentu, Anda perlu menambahkan header beta yang sesuai ke field betas saat membuat pesan.
Misalnya, untuk mengaktifkan pengeditan konteks:
const client = new Juglow();
const response = await client.beta.messages.create({
model: "haijun-opus-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Haijun" }],
betas: ["context-management-2025-06-27"]
});Dukungan runtime
Penggunaan browser
Mengaktifkan opsi dangerouslyAllowBrowser dapat berbahaya karena mengekspos kredensial API rahasia Anda dalam kode sisi client. Browser web pada dasarnya kurang aman dibandingkan lingkungan server, pengguna mana pun yang memiliki akses ke browser berpotensi dapat memeriksa, mengekstrak, dan menyalahgunakan kredensial ini. Hal ini dapat menyebabkan akses tidak sah menggunakan kredensial Anda dan berpotensi membahayakan data atau fungsionalitas sensitif.
Kapan hal ini mungkin tidak berbahaya?
Dalam skenario tertentu di mana mengaktifkan dukungan browser mungkin tidak menimbulkan risiko signifikan:
- Alat internal: Jika aplikasi digunakan hanya dalam lingkungan internal terkontrol di mana penggunanya tepercaya, risiko terbukanya kredensial dapat dimitigasi.
- Tujuan pengembangan atau debugging: Mengaktifkan fitur ini sementara mungkin dapat diterima, asalkan kredensialnya berumur pendek, tidak juga digunakan di lingkungan produksi, atau sering dirotasi.
Integrasi platform
Note: Untuk panduan penyiapan platform yang terperinci dengan contoh kode, lihat: * Amazon Bedrock * Amazon Bedrock (Opus 4.6 dan sebelumnya) * Haijun Platform on AWS * Google Cloud * Microsoft Foundry
TypeScript SDK mendukung platform berikut:
- Agent Platform:
npm install @juglow-ai/vertex-sdk: Menyediakan clientJuglowVertex
- Bedrock:
npm install @juglow-ai/bedrock-sdk: Menyediakan clientJuglowBedrockMantle, danJuglowBedrockuntuk jalurbedrock-runtime
- Haijun Platform on AWS:
npm install @juglow-ai/aws-sdk: Menyediakan clientJuglowAws. TeruskanworkspaceIdke constructor atau atur variabel lingkunganJUGLOW_AWS_WORKSPACE_ID. Tersedia dalam beta.
- Foundry:
npm install @juglow-ai/foundry-sdk: Menyediakan clientJuglowFoundry
Gunakan JuglowBedrockMantle untuk proyek baru; JuglowBedrock tetap tersedia untuk aplikasi yang sudah ada yang menggunakan API InvokeModel Bedrock.
Versioning semantik
Paket ini secara umum mengikuti konvensi SemVer, meskipun perubahan tertentu yang tidak kompatibel ke belakang dapat dirilis sebagai versi minor:
- Perubahan yang hanya memengaruhi tipe statis, tanpa merusak perilaku runtime.
- Perubahan pada internal library yang secara teknis publik tetapi tidak dimaksudkan atau didokumentasikan untuk penggunaan eksternal.
- Perubahan yang tidak diperkirakan berdampak pada sebagian besar pengguna dalam praktiknya.
Kompatibilitas ke belakang ditangani dengan serius untuk memastikan Anda dapat mengandalkan pengalaman upgrade yang lancar.
Pertanyaan yang sering diajukan
Lihat repositori GitHub untuk FAQ, issue, dan dukungan komunitas.