Skip to content

NillionNetwork/nilai-ts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

nilAI TypeScript SDK

A TypeScript SDK for the Nilai platform that provides delegation token management and OpenAI-compatible client functionality for accessing AI models through secure, decentralized infrastructure.

πŸš€ Quick Start

Installation

This project uses pnpm for dependency management.

# Install dependencies
pnpm install

Basic Usage

import { NilaiOpenAIClient } from "@nillion/nilai-ts";
import "dotenv/config";

// Initialize client with API key from environment variables
const client = new NilaiOpenAIClient({
  baseURL: "https://nilai-a779.nillion.network/v1/",
  apiKey: process.env.NILLION_API_KEY,
});

// Make a chat completion request
const response = await client.chat.completions.create({
  model: "meta-llama/Llama-3.1-8B-Instruct",
  messages: [{ role: "user", content: "Hello! Can you help me with something?" }],
});

console.log(`Response: ${response.choices[0].message.content}`);

πŸ“– Usage Examples

1. API Key Mode (Simple)

The easiest way to get started. Your API key is your private key.

import { NilaiOpenAIClient } from "@nillion/nilai-ts";
import "dotenv/config";

// Set up your API key in a .env file or environment variable
const client = new NilaiOpenAIClient({
  baseURL: "https://nilai-a779.nillion.network/v1/",  
  apiKey: process.env.NILLION_API_KEY, // Your private key
});

// Make requests just like with OpenAI
const response = await client.chat.completions.create({
  model: "meta-llama/Llama-3.1-8B-Instruct",
  messages: [
    { role: "user", content: "Explain quantum computing in simple terms" },
  ],
});

console.log(response.choices[0].message.content);

To execute it:

pnpm i
pnpm exec tsx examples/0-api-key.ts

2. Delegation Token Mode (Advanced)

For more secure, distributed access where you want to separate server credentials from client usage.

import {
  NilaiOpenAIClient,
  DelegationTokenServer,
  AuthType,
  NilAuthInstance,
} from "@nillion/nilai-ts";
import "dotenv/config";

// Server-side: Create a delegation token server
const server = new DelegationTokenServer(process.env.NILLION_API_KEY, {
  nilauthInstance: NilAuthInstance.SANDBOX,
  expirationTime: 3600, // 1 hour validity
  tokenMaxUses: 10, // Allow 10 uses
});

// Client-side: Initialize client for delegation token mode
const client = new NilaiOpenAIClient({
  baseURL: "https://nilai-a779.nillion.network/v1/",
  authType: AuthType.DELEGATION_TOKEN,
});

// Step 1: Client requests delegation
const delegationRequest = client.getDelegationRequest();

// Step 2: Server creates delegation token
const delegationToken = await server.createDelegationToken(delegationRequest);

// Step 3: Client uses the delegation token
client.updateDelegation(delegationToken);

// Step 4: Make authenticated requests
const response = await client.chat.completions.create({
  model: "meta-llama/Llama-3.1-8B-Instruct",
  messages: [
    { role: "user", content: "What are the benefits of decentralized AI?" },
  ],
});

console.log(response.choices[0].message.content);

To execute it:

pnpm i
pnpm exec tsx examples/1-delegation-token.ts

3. Environment Configuration

Create a .env file for your credentials:

# .env file
NILLION_API_KEY=your-private-key-for-nilai

Then in your code:

import "dotenv/config";
import { NilaiOpenAIClient } from "@nillion/nilai-ts";

const client = new NilaiOpenAIClient({
  baseURL: "https://nilai-a779.nillion.network/v1/",
  apiKey: process.env.NILLION_API_KEY,
});

✨ Features

  • πŸ” Multiple Authentication Methods: Support for API keys and delegation tokens.
  • πŸ€– OpenAI Compatibility: Drop-in replacement for the OpenAI client.
  • ⚑ Automatic Token Management: Handles root token caching and expiration automatically.
  • πŸ›‘οΈ Secure Delegation: Server-side token management with configurable expiration and usage limits.
  • 🌐 Network Flexibility: Support for sandbox and production nilauth environments.
  • πŸ”’ Type Safety: Strongly typed with Zod schema validation for robust development.
  • πŸ”§ Universal Compatibility: Built-in polyfills for Node.js environments ensure seamless operation across different platforms without manual configuration.

πŸ—οΈ Architecture

DelegationTokenServer

A server-side component responsible for:

  • Creating delegation tokens with configurable expiration and usage limits.
  • Managing the root token lifecycle and caching.
  • Handling cryptographic operations securely.

NilaiOpenAIClient

An OpenAI-compatible client that:

  • Supports both API key and delegation token authentication.
  • Automatically handles NUC token creation and management.
  • Provides a familiar chat completion interface.

Token Management

  • Root Tokens: Long-lived tokens for server authentication, managed by DelegationTokenServer or NilaiOpenAIClient in API Key mode.
  • Delegation Tokens: Short-lived, limited-use tokens for client operations.
  • Automatic Refresh: Expired root tokens are automatically refreshed when needed.

βœ… Testing

Running Tests

To run all tests:

pnpm test

To run tests in watch mode:

pnpm test:watch

Test Coverage

To run tests with coverage reporting:

pnpm test:coverage

πŸ“¦ Development

Code Quality

This project uses Biome for linting and formatting.

Run formatting:

pnpm fmt

Run linting:

pnpm lint

Run all checks:

pnpm ci

πŸ“‚ Project Structure

src/
β”œβ”€β”€ client.ts           # NilaiOpenAIClient class
β”œβ”€β”€ server.ts           # DelegationTokenServer class
β”œβ”€β”€ types.ts            # Type definitions and Zod schemas
β”œβ”€β”€ utils.ts            # Utility functions
└── internal/
    └── debug_client.ts # Debug client

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •