{"_id":"@cogitx-ai/model-sdk","_rev":"2-0e6ffdf594d80ab500e9d2811a8a6fae","name":"@cogitx-ai/model-sdk","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@cogitx-ai/model-sdk","version":"0.1.0","keywords":["cogitx","sdk","llm","chat-completions","typescript","javascript"],"license":"MIT","_id":"@cogitx-ai/model-sdk@0.1.0","maintainers":[{"name":"adarsh-cogitx","email":"adarsh@cogitx.ai"},{"name":"kushan-cogitx","email":"kushan@cogitx.ai"}],"dist":{"shasum":"87e12d816137d5743f7ce40d105de6bbe21d0b39","tarball":"https://registry.npmjs.org/@cogitx-ai/model-sdk/-/model-sdk-0.1.0.tgz","fileCount":7,"integrity":"sha512-bR9xCF1YZjv31gY2V2JOb6XioEHpqx9dn2uxLaJX8iwNdaYGXcdeh2KyEwusvrAspn8i1GHPYozr312dLzlwgQ==","signatures":[{"sig":"MEQCIDkFIGyWQckm2KNj6pVWpI2dZunHiwdp2+sUq+ImWAL7AiBchyqicXMMvzdI5+zz4yZMtqsQT2d+nzCiX794t4swOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66844},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"5e7a920f6d4ff31c15c03c8fc25dc0deb3482d1c","scripts":{"demo":"node examples/server.mjs","build":"tsup","clean":"rm -rf dist","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kushan-cogitx","email":"kushan@cogitx.ai"},"_npmVersion":"11.13.0","description":"JavaScript/TypeScript SDK for CogitX chat models","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/model-sdk_0.1.0_1784101130702_0.9414152020992665","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cogitx-ai/model-sdk","version":"0.1.1","description":"JavaScript/TypeScript SDK for CogitX chat models","main":"dist/index.cjs","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs","default":"./dist/index.mjs"}},"scripts":{"build":"tsup","clean":"rm -rf dist","demo":"node examples/server.mjs","prepare":"npm run build","typecheck":"tsc --noEmit"},"keywords":["cogitx","sdk","llm","chat-completions","typescript","javascript"],"license":"SEE LICENSE IN LICENSE.txt","publishConfig":{"access":"public"},"engines":{"node":">=18"},"devDependencies":{"tsup":"^8.5.1","typescript":"^5.6.3"},"gitHead":"5e7a920f6d4ff31c15c03c8fc25dc0deb3482d1c","_id":"@cogitx-ai/model-sdk@0.1.1","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-gJwCbVCWMJveqUkWcoyQY5pTE4uyhle4h3YKhDVav09BlWFZUnuJloV+ohwjBpxy/Kxcg3OE/3NeMPEzIVSRrA==","shasum":"06693d18048910e09914b70f186e8e9024fb0be8","tarball":"https://registry.npmjs.org/@cogitx-ai/model-sdk/-/model-sdk-0.1.1.tgz","fileCount":7,"unpackedSize":66867,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF+dP27oyuIe++o7VK0X7DpYtxr5f63CsDu6tQpBSGF6AiAoJPIHvZER2jLZh4R9wFXQSQDWhRhAOLBpTnOnTizE8w=="}]},"_npmUser":{"name":"kushan-cogitx","email":"kushan@cogitx.ai"},"directories":{},"maintainers":[{"name":"adarsh-cogitx","email":"adarsh@cogitx.ai"},{"name":"kushan-cogitx","email":"kushan@cogitx.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/model-sdk_0.1.1_1784101439362_0.8218217322461516"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T07:38:50.487Z","modified":"2026-07-15T07:43:59.698Z","0.1.0":"2026-07-15T07:38:50.835Z","0.1.1":"2026-07-15T07:43:59.571Z"},"license":"SEE LICENSE IN LICENSE.txt","keywords":["cogitx","sdk","llm","chat-completions","typescript","javascript"],"description":"JavaScript/TypeScript SDK for CogitX chat models","maintainers":[{"name":"adarsh-cogitx","email":"adarsh@cogitx.ai"},{"name":"kushan-cogitx","email":"kushan@cogitx.ai"}],"readme":"# @cogitx-ai/model-sdk\n\nA lightweight JavaScript/TypeScript SDK for CogitX chat models.\n\n- Base URL: user-provided (required)\n- Endpoint: `POST /{apiVersion}/chat/completions` (default `apiVersion`: `v1`)\n- Model: user-provided (required per request unless set in client options)\n- Supports standard chat completions and tool-calling loops.\n- Includes timeout/abort support, retries, validation, and observability hooks.\n\n## Installation\n\n```bash\nnpm install @cogitx-ai/model-sdk\n```\n\n## Import styles\n\nESM:\n\n```ts\nimport { CogitxClient } from \"@cogitx-ai/model-sdk\";\n```\n\nCommonJS:\n\n```js\nconst { CogitxClient } = require(\"@cogitx-ai/model-sdk\");\n```\n\n## Quick start\n\n```ts\nimport { CogitxClient } from \"@cogitx-ai/model-sdk\";\n\nconst client = new CogitxClient({\n  baseUrl: \"BASE_URL\", // required\n  apiVersion: \"v1\", // optional\n  model: \"MODEL_NAME\", // optional client-level default\n  temperature: 0.2, // optional default\n  maxTokens: 256, // optional default\n  topP: 0.9, // optional\n  topK: 50, // optional\n  timeoutMs: 15000, // optional request timeout\n  retryPolicy: { maxRetries: 2 } // optional retry override\n});\n\nconst response = await client.createChatCompletion({\n  message: \"Say hello in one sentence.\"\n});\n\nconsole.log(response.choices[0]?.message?.content);\n```\n\n## Chat completion\n\nUse `createChatCompletion` for one API call.\n\n```ts\nconst response = await client.createChatCompletion({\n  sessionId: \"workflow-session-123\",\n  history: [\n    { role: \"system\", content: \"You are concise.\" }\n  ],\n  messages: [\n    { role: \"user\", content: \"What can you do?\" }\n  ],\n  temperature: 0.3,\n  maxTokens: 200,\n  topP: 0.9,\n  topK: 50,\n  minP: 0.0,\n  presencePenalty: 0.0,\n  frequencyPenalty: 0.0,\n  repetitionPenalty: 1.05,\n  n: 1,\n  stream: false,\n  stop: null,\n  ignoreEos: false,\n  skipSpecialTokens: true\n});\n```\n\n### Abort, timeout and retries\n\n```ts\nconst controller = new AbortController();\nconst timeout = setTimeout(() => controller.abort(), 3000);\n\ntry {\n  const response = await client.createChatCompletion({\n    message: \"Give me a short summary\",\n    timeoutMs: 10000,\n    signal: controller.signal,\n    retryPolicy: {\n      maxRetries: 3,\n      baseDelayMs: 250,\n      maxDelayMs: 3000\n    }\n  });\n\n  console.log(response.choices[0]?.message?.content);\n} finally {\n  clearTimeout(timeout);\n}\n```\n\n### Observability hooks\n\n```ts\nconst client = new CogitxClient({\n  baseUrl: \"BASE_URL\",\n  hooks: {\n    onRequest(ctx) {\n      console.log(\"request\", ctx.attempt, ctx.url, ctx.payload.model);\n    },\n    onResponse(ctx) {\n      console.log(\"response\", ctx.status, `${ctx.durationMs}ms`);\n    },\n    onRetry(ctx) {\n      console.log(\"retry\", ctx.nextAttempt, \"in\", ctx.delayMs, \"ms\", ctx.reason);\n    },\n    onError(ctx) {\n      console.error(\"error\", ctx.error.name, ctx.error.message, \"retryable:\", ctx.retryable);\n    }\n  }\n});\n```\n\n### Error model\n\nThe SDK throws structured errors:\n\n- `CogitxValidationError`: invalid request input before API call\n- `CogitxTimeoutError`: request timed out\n- `CogitxAbortError`: caller aborted request\n- `CogitxNetworkError`: network layer failure\n- `CogitxApiError`: non-2xx API response with `status`, `body`, `requestId?`, `code?`\n\n### Full model-parameter example\n\nSDK input is camelCase only. The SDK maps these to API keys internally.\n\n```ts\nconst response = await client.createChatCompletion({\n  model: \"MODEL_NAME\",\n  messages: [\n    { role: \"system\", content: \"You are a helpful assistant.\" },\n    { role: \"user\", content: \"Explain transformers in 2 lines\" }\n  ],\n  temperature: 0.7,\n  topP: 0.9,\n  topK: 50,\n  minP: 0.0,\n  maxTokens: 200,\n  presencePenalty: 0.0,\n  frequencyPenalty: 0.0,\n  repetitionPenalty: 1.05,\n  n: 1,\n  stream: false,\n  stop: null,\n  ignoreEos: false,\n  skipSpecialTokens: true\n});\n```\n\n### Parameters\n\n- Constructor (`new CogitxClient(...)`)\n  - `baseUrl`: API base URL (required)\n  - `apiVersion?`: API version path segment (defaults to `v1`)\n  - `model?`: client-level default model (optional)\n  - `temperature?`: default temperature\n  - `maxTokens?`: default max tokens\n  - `topP?`, `topK?`, `minP?`\n  - `presencePenalty?`, `frequencyPenalty?`, `repetitionPenalty?`\n  - `n?`, `stream?`, `stop?`, `ignoreEos?`, `skipSpecialTokens?`\n  - `timeoutMs?`: default timeout in milliseconds\n  - `retryPolicy?`: default retry behavior\n  - `hooks?`: request lifecycle observability callbacks\n  - `headers?`: extra request headers\n  - `fetchImpl?`: custom fetch implementation\n- Per-call (`createChatCompletion(...)` and `runWithTools(...)`)\n  - `message?`: single user message shorthand\n  - `messages?`: current turn messages\n  - `history?`: prior messages to prepend\n  - `sessionId?`: session identifier sent to the model as `session_id`\n  - `model?`: required here if not set in client options\n  - `temperature?`, and all generation controls above as call overrides\n  - `timeoutMs?`, `signal?`, `retryPolicy?`, `requestId?`\n\n## Tool calling (two-step flow)\n\n`runWithTools` automates:\n\n1. Send user message + tool schemas\n2. If tool calls are returned:\n   - execute the matching handler\n   - send tool result back to the model\n   - continue until final assistant content (or max rounds)\n\n```ts\nimport { CogitxClient, type ChatTool } from \"@cogitx-ai/model-sdk\";\n\nconst client = new CogitxClient({\n  baseUrl: \"BASE_URL\",\n  apiVersion: \"v1\"\n});\n\nconst tools: ChatTool[] = [\n  {\n    type: \"function\",\n    function: {\n      name: \"get_weather\",\n      description: \"Get current weather for a city\",\n      parameters: {\n        type: \"object\",\n        properties: {\n          city: { type: \"string\" }\n        },\n        required: [\"city\"]\n      }\n    }\n  }\n];\n\nconst result = await client.runWithTools({\n  message: \"What is the weather in Bengaluru?\",\n  tools,\n  toolHandlers: {\n    async get_weather(args) {\n      const { city } = args as { city: string };\n      return { city, forecast: \"Sunny\", tempC: 30 };\n    }\n  }\n});\n\nconsole.log(result.response.choices[0]?.message?.content);\n```\n\n## Build\n\n```bash\nnpm install\nnpm run build\n```\n\n## Run browser sample\n\n```bash\nnpm run build\nnpm run demo\n```\n\nThen open:\n\n- `http://localhost:8080/examples/sample-js-page.html`\n\n## License\n© 2026 CogitX AI (Brand of STYAVENT INNOVATION PRIVATE LIMITED). All rights reserved.\nThis software is proprietary and confidential. \nSee [`LICENSE.txt`](./LICENSE.txt) for full license terms.\n","readmeFilename":"README.md"}