{"_id":"@aki-io/aki-io","_rev":"2-178b76c0cc5edfce2fe73dfd25339aa0","name":"@aki-io/aki-io","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@aki-io/aki-io","version":"1.0.0","keywords":["aki-io","aki","ai","llm","large-language-model","machine-learning","api-client","chat","image-generation","streaming"],"author":{"name":"AKI.IO GmbH"},"license":"MIT","_id":"@aki-io/aki-io@1.0.0","maintainers":[{"name":"aki-npm-admin","email":"henri@aki.io"}],"homepage":"https://aki.io","bugs":{"url":"https://github.com/aki-io-labs/aki-io/issues"},"dist":{"shasum":"1c6e36a47475120701ab8de11382bc7dc7edc541","tarball":"https://registry.npmjs.org/@aki-io/aki-io/-/aki-io-1.0.0.tgz","fileCount":19,"integrity":"sha512-kABw+Dv07bz1mtjGn7xgaWuE2sykxeziVyMETrfaAbrXDTeb5nV4POF/jWDBJmqariMzB5cEP1Eg8/4eU5G8Gg==","signatures":[{"sig":"MEQCIDHx7uChobkJZ1IlToGyttl9hG8fg3gFEObaNnGt4nsqAiAowBa7pRYAfPA4br/abpMdxibGeNyaCKjidJLT2RozXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61020},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f91981f9d01078da6e80ed7646ecc6815c8a5881","scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"aki-npm-admin","email":"henri@aki.io"},"repository":{"url":"git+https://github.com/aki-io-labs/aki-io.git","type":"git","directory":"typescript"},"_npmVersion":"10.9.4","description":"Official TypeScript/Node.js SDK for the AKI.IO AI Model Hub API","directories":{},"sideEffects":false,"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/aki-io_1.0.0_1775416456408_0.07228092927316476","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aki-io/aki-io","version":"1.0.1","description":"Official TypeScript/Node.js SDK for the AKI.IO AI Model Hub API","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","type":"module","sideEffects":false,"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","clean":"rm -rf dist","prepublishOnly":"npm run build"},"keywords":["aki-io","aki","ai","llm","large-language-model","machine-learning","api-client","chat","image-generation","streaming"],"author":{"name":"AKI.IO GmbH"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aki-io-labs/aki-io.git","directory":"typescript"},"homepage":"https://aki.io","bugs":{"url":"https://github.com/aki-io-labs/aki-io/issues"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"dependencies":{},"devDependencies":{"@types/node":"^22.0.0","@vitest/coverage-v8":"^3.0.0","typescript":"^5.7.0","vitest":"^3.0.0"},"engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"_id":"@aki-io/aki-io@1.0.1","gitHead":"15b1664babb74a991a654e54576537a6896fed46","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-kPk6zCRFjkqCJivZvYSGZls5D2aZBVwtz5FCr6eWuXlfhNjrDHIniGJBjpRP97p9ULE15QBsAb/DwIHyQEuaAw==","shasum":"c095ce8e1390e651848eba1c56ac7e32226f873e","tarball":"https://registry.npmjs.org/@aki-io/aki-io/-/aki-io-1.0.1.tgz","fileCount":19,"unpackedSize":61020,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDdElufju8g2o43ULZKo2bDUkKNS5mutotgGnROYhMMQQIhAPSSMnUsTb0qeNaDoT3d6ropDXKkQuCECxqOb2M6XbYY"}]},"_npmUser":{"name":"aki-npm-admin","email":"henri@aki.io"},"directories":{},"maintainers":[{"name":"aki-npm-admin","email":"henri@aki.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aki-io_1.0.1_1775417968597_0.8021427963633392"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-05T19:14:16.342Z","modified":"2026-04-05T19:39:28.854Z","1.0.0":"2026-04-05T19:14:16.624Z","1.0.1":"2026-04-05T19:39:28.731Z"},"bugs":{"url":"https://github.com/aki-io-labs/aki-io/issues"},"author":{"name":"AKI.IO GmbH"},"license":"MIT","homepage":"https://aki.io","keywords":["aki-io","aki","ai","llm","large-language-model","machine-learning","api-client","chat","image-generation","streaming"],"repository":{"type":"git","url":"git+https://github.com/aki-io-labs/aki-io.git","directory":"typescript"},"description":"Official TypeScript/Node.js SDK for the AKI.IO AI Model Hub API","maintainers":[{"name":"aki-npm-admin","email":"henri@aki.io"}],"readme":"# AKI.IO TypeScript/Node.js SDK\n\nA modern TypeScript/Node.js SDK for the AKI.IO AI Model Hub API.\n\n## Installation\n\n```bash\nnpm install @aki-io/aki-io\n```\n\n```bash\nyarn add @aki-io/aki-io\n```\n\n```bash\npnpm add @aki-io/aki-io\n```\n\n## Quick Start\n\n```typescript\nimport { AkiClient } from '@aki-io/aki-io'\n\nconst client = new AkiClient({\n  endpointName: 'llama3_chat',\n  apiKey: 'your-api-key-here'\n})\n\nconst result = await client.doApiRequest({\n  prompt_input: 'Hello, how are you?'\n})\n\nconsole.log(result.text)\n```\n\n## Configuration\n\n```typescript\nconst client = new AkiClient({\n  endpointName: 'llama3_chat',        // Required: API endpoint name\n  apiKey: 'your-api-key-here',        // Required: Your API key\n  apiServer: 'https://aki.io',        // Optional: API server URL (default: 'https://aki.io')\n  outputBinaryFormat: 'base64',       // Optional: 'base64' or 'byteString' (default: 'base64')\n  raiseExceptions: false,             // Optional: Throw exceptions on errors (default: false)\n  progressInterval: 0.2,              // Optional: Progress poll interval in seconds (default: 0.2)\n  returnToolCallDict: false           // Optional: Parse tool calls as JSON (default: false)\n})\n```\n\n## Usage\n\n### Simple Request\n\n```typescript\nimport { AkiClient } from '@aki-io/aki-io'\n\nconst client = new AkiClient({\n  endpointName: 'llama3_chat',\n  apiKey: process.env.AKI_API_KEY!\n})\n\nconst result = await client.doApiRequest({\n  prompt_input: 'What is the capital of France?'\n})\n\nif (result.success) {\n  console.log(result.text)\n} else {\n  console.error('Error:', result.error)\n}\n```\n\n### Chat Context\n\n```typescript\nconst result = await client.doApiRequest({\n  chat_context: [\n    { role: 'system', content: 'You are a helpful assistant.' },\n    { role: 'user', content: 'What is 2+2?' },\n    { role: 'assistant', content: '2+2 equals 4.' },\n    { role: 'user', content: 'And what is 3+3?' }\n  ]\n})\n\nconsole.log(result.text)\n```\n\n### Progress Callbacks\n\n```typescript\nconst result = await client.doApiRequest(\n  {\n    prompt_input: 'Write a long story about a robot.'\n  },\n  (progressInfo, progressData) => {\n    console.log(`Progress: ${progressInfo.progress}%`)\n    console.log(`Queue Position: ${progressInfo.queue_position}`)\n    \n    if (progressData?.text) {\n      console.log('Partial text:', progressData.text)\n    }\n  }\n)\n\nconsole.log('Final result:', result.text)\n```\n\n### Async Generator (Streaming)\n\n```typescript\nfor await (const update of client.getApiRequestGenerator({ \n  prompt_input: 'Tell me a joke' \n})) {\n  if (update.job_state === 'started') {\n    console.log('Job started:', update.job_id)\n  } else if (update.job_state === 'processing') {\n    console.log('Progress:', update.progress_data?.text)\n  } else if (update.job_state === 'done') {\n    console.log('Final result:', update.result_data?.text)\n  }\n}\n```\n\n### Convenience Function\n\n```typescript\nimport { doAkiRequest } from '@aki-io/aki-io'\n\nconst result = await doAkiRequest(\n  'llama3_chat',\n  'your-api-key',\n  { prompt_input: 'Hello!' }\n)\n\nconsole.log(result.text)\n```\n\n### Validate API Key\n\n```typescript\nconst validation = await client.initApiKey()\n\nif (validation.success) {\n  console.log('API key is valid')\n} else {\n  console.error('Invalid API key:', validation.error)\n}\n```\n\n### Get Available Endpoints\n\n```typescript\nconst endpoints = await client.getEndpointList()\n\nconsole.log('Available endpoints:', endpoints)\n```\n\n### Get Endpoint Details\n\n```typescript\nconst details = await client.getEndpointDetails('llama3_chat')\n\nconsole.log('Endpoint details:', details)\n```\n\n### Binary Data Handling\n\n```typescript\nimport { encodeBinary, decodeBinary } from '@aki-io/aki-io'\n\nconst imageBuffer = await fs.readFile('image.png')\n\nconst encoded = encodeBinary(imageBuffer, 'png')\nconsole.log(encoded)\n// data:image/png;base64,iVBORw0KGgo...\n\nconst [format, decoded] = decodeBinary(encoded)\nconsole.log(format)  // 'png'\nconsole.log(decoded) // Buffer containing the image data\n```\n\n### Error Handling\n\n```typescript\nimport { AkiClient, AkiError, ConnectionError, ValidationError } from '@aki-io/aki-io'\n\nconst client = new AkiClient({\n  endpointName: 'llama3_chat',\n  apiKey: 'your-api-key',\n  raiseExceptions: true\n})\n\ntry {\n  const result = await client.doApiRequest({ prompt_input: 'Hello' })\n  console.log(result.text)\n} catch (error) {\n  if (error instanceof ValidationError) {\n    console.error('Invalid request:', error.message)\n  } else if (error instanceof ConnectionError) {\n    console.error('Connection failed:', error.message)\n  } else if (error instanceof AkiError) {\n    console.error('API error:', error.message)\n  }\n}\n```\n\n## API Reference\n\n### `AkiClient`\n\n#### Constructor\n\n```typescript\nnew AkiClient(config: AkiClientConfig)\n```\n\n#### Methods\n\n- `doApiRequest(params, progressCallback?)` - Make an API request\n- `getApiRequestGenerator(params)` - Get async generator for streaming\n- `initApiKey(apiKey?)` - Validate API key\n- `getEndpointList()` - Get list of available endpoints\n- `getEndpointDetails(endpointName?)` - Get endpoint details\n- `cancelRequest(jobId?)` - Cancel a running request\n- `setApiKey(apiKey)` - Set new API key\n- `getVersion()` - Get SDK version (static)\n\n### Utility Functions\n\n- `encodeBinary(data, format?, type?)` - Encode binary data to base64\n- `decodeBinary(base64String)` - Decode base64 to binary\n- `isValidBase64(string)` - Check if string is valid base64\n- `isValidJson(string)` - Check if string is valid JSON\n\n### Types\n\n```typescript\ninterface AkiClientConfig {\n  endpointName: string\n  apiKey: string\n  apiServer?: string\n  outputBinaryFormat?: 'base64' | 'byteString'\n  raiseExceptions?: boolean\n  progressInterval?: number\n  returnToolCallDict?: boolean\n}\n\ninterface ApiResponse {\n  success: boolean\n  job_id?: string\n  text?: string\n  images?: string | string[]\n  error?: string\n  error_code?: number\n  // ... additional fields\n}\n\ninterface ProgressInfo {\n  job_id: string\n  progress: number\n  queue_position: number\n  estimate: number\n  job_state?: JobState\n  success?: boolean\n}\n\ninterface ProgressData {\n  text?: string\n  images?: string | string[]\n  num_generated_tokens?: number\n  // ... additional fields\n}\n\ntype ProgressCallback = (progressInfo: ProgressInfo, progressData: ProgressData | null) => void\ntype JobState = 'started' | 'processing' | 'done' | 'canceled' | 'lapsed'\n```\n\n## Requirements\n\n- Node.js 18.0.0 or higher\n- TypeScript 5.0 or higher (for development)\n\n## License\n\nMIT License - see [LICENSE](../LICENSE) file for details.\n\n## Support\n\n- Documentation: https://aki.io/docs\n- Issues: https://github.com/aki-io-labs/aki-io/issues\n- Website: https://aki.io\n","readmeFilename":"README.md"}