@kb-labs/adapters 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursorrules +32 -0
- package/.github/workflows/ci.yml +13 -0
- package/.github/workflows/deploy.yml +28 -0
- package/.github/workflows/docker-build.yml +25 -0
- package/.github/workflows/drift-check.yml +10 -0
- package/.github/workflows/profiles-validate.yml +16 -0
- package/.github/workflows/release.yml +8 -0
- package/.kb/devkit/agents/devkit-maintainer/context.globs +15 -0
- package/.kb/devkit/agents/devkit-maintainer/permissions.yml +17 -0
- package/.kb/devkit/agents/devkit-maintainer/prompt.md +28 -0
- package/.kb/devkit/agents/devkit-maintainer/runbook.md +31 -0
- package/.kb/devkit/agents/docs-crafter/prompt.md +24 -0
- package/.kb/devkit/agents/docs-crafter/runbook.md +18 -0
- package/.kb/devkit/agents/release-manager/context.globs +7 -0
- package/.kb/devkit/agents/release-manager/prompt.md +27 -0
- package/.kb/devkit/agents/release-manager/runbook.md +17 -0
- package/.kb/devkit/agents/test-generator/context.globs +7 -0
- package/.kb/devkit/agents/test-generator/prompt.md +27 -0
- package/.kb/devkit/agents/test-generator/runbook.md +18 -0
- package/CONTRIBUTING.md +90 -0
- package/IMPLEMENTATION_COMPLETE.md +416 -0
- package/LICENSE +186 -0
- package/README-TEMPLATE.md +179 -0
- package/README.md +306 -0
- package/docs/DOCUMENTATION.md +74 -0
- package/docs/adr/0000-template.md +49 -0
- package/docs/adr/0001-architecture-and-repository-layout.md +33 -0
- package/docs/adr/0002-plugins-and-extensibility.md +46 -0
- package/docs/adr/0003-package-and-module-boundaries.md +37 -0
- package/docs/adr/0004-versioning-and-release-policy.md +38 -0
- package/docs/adr/0005-use-devkit-for-shared-tooling.md +48 -0
- package/docs/adr/0006-adopt-devkit-sync.md +47 -0
- package/docs/adr/0007-drift-kit-check.md +72 -0
- package/docs/adr/0008-devkit-sync-wrapper-strategy.md +67 -0
- package/docs/naming-convention.md +272 -0
- package/eslint.config.js +27 -0
- package/kb-labs.config.json +5 -0
- package/package.json +84 -0
- package/package.json.bin +25 -0
- package/package.json.lib +30 -0
- package/packages/adapters-analytics-duckdb/package.json +54 -0
- package/packages/adapters-analytics-duckdb/scripts/migrate-from-jsonl.mjs +253 -0
- package/packages/adapters-analytics-duckdb/src/index.ts +380 -0
- package/packages/adapters-analytics-duckdb/src/manifest.ts +36 -0
- package/packages/adapters-analytics-duckdb/src/schema.ts +161 -0
- package/packages/adapters-analytics-duckdb/tsconfig.build.json +15 -0
- package/packages/adapters-analytics-duckdb/tsconfig.json +9 -0
- package/packages/adapters-analytics-duckdb/tsup.config.ts +9 -0
- package/packages/adapters-analytics-file/README.md +32 -0
- package/packages/adapters-analytics-file/eslint.config.js +27 -0
- package/packages/adapters-analytics-file/package.json +50 -0
- package/packages/adapters-analytics-file/src/__tests__/daily-stats.spec.ts +287 -0
- package/packages/adapters-analytics-file/src/__tests__/scoped-analytics.test.ts +233 -0
- package/packages/adapters-analytics-file/src/index.test.ts +214 -0
- package/packages/adapters-analytics-file/src/index.ts +830 -0
- package/packages/adapters-analytics-file/src/manifest.ts +45 -0
- package/packages/adapters-analytics-file/tsconfig.build.json +15 -0
- package/packages/adapters-analytics-file/tsconfig.json +9 -0
- package/packages/adapters-analytics-file/tsup.config.ts +9 -0
- package/packages/adapters-analytics-sqlite/package.json +55 -0
- package/packages/adapters-analytics-sqlite/scripts/migrate-from-jsonl.mjs +194 -0
- package/packages/adapters-analytics-sqlite/src/index.ts +460 -0
- package/packages/adapters-analytics-sqlite/src/manifest.ts +41 -0
- package/packages/adapters-analytics-sqlite/tsconfig.build.json +15 -0
- package/packages/adapters-analytics-sqlite/tsconfig.json +9 -0
- package/packages/adapters-analytics-sqlite/tsup.config.ts +9 -0
- package/packages/adapters-environment-docker/README.md +28 -0
- package/packages/adapters-environment-docker/eslint.config.js +5 -0
- package/packages/adapters-environment-docker/package.json +49 -0
- package/packages/adapters-environment-docker/src/index.test.ts +138 -0
- package/packages/adapters-environment-docker/src/index.ts +439 -0
- package/packages/adapters-environment-docker/src/manifest.ts +65 -0
- package/packages/adapters-environment-docker/tsconfig.build.json +15 -0
- package/packages/adapters-environment-docker/tsconfig.json +16 -0
- package/packages/adapters-environment-docker/tsup.config.ts +9 -0
- package/packages/adapters-eventbus-cache/README.md +242 -0
- package/packages/adapters-eventbus-cache/eslint.config.js +27 -0
- package/packages/adapters-eventbus-cache/package.json +46 -0
- package/packages/adapters-eventbus-cache/src/index.test.ts +235 -0
- package/packages/adapters-eventbus-cache/src/index.ts +215 -0
- package/packages/adapters-eventbus-cache/src/manifest.ts +50 -0
- package/packages/adapters-eventbus-cache/src/types.ts +58 -0
- package/packages/adapters-eventbus-cache/tsconfig.build.json +15 -0
- package/packages/adapters-eventbus-cache/tsconfig.json +9 -0
- package/packages/adapters-eventbus-cache/tsup.config.ts +9 -0
- package/packages/adapters-fs/README.md +171 -0
- package/packages/adapters-fs/allowed.txt +1 -0
- package/packages/adapters-fs/conflict.txt +1 -0
- package/packages/adapters-fs/dest.txt +1 -0
- package/packages/adapters-fs/eslint.config.js +27 -0
- package/packages/adapters-fs/exists.txt +1 -0
- package/packages/adapters-fs/not-allowed.txt +1 -0
- package/packages/adapters-fs/other.txt +1 -0
- package/packages/adapters-fs/package.json +55 -0
- package/packages/adapters-fs/public/file1.txt +1 -0
- package/packages/adapters-fs/public/file2.txt +1 -0
- package/packages/adapters-fs/secret.txt +1 -0
- package/packages/adapters-fs/secrets/key.txt +1 -0
- package/packages/adapters-fs/src/index.test.ts +243 -0
- package/packages/adapters-fs/src/index.ts +258 -0
- package/packages/adapters-fs/src/manifest.ts +35 -0
- package/packages/adapters-fs/src/secure-storage.test.ts +380 -0
- package/packages/adapters-fs/src/secure-storage.ts +268 -0
- package/packages/adapters-fs/test.json +1 -0
- package/packages/adapters-fs/test.txt +1 -0
- package/packages/adapters-fs/test.xyz +1 -0
- package/packages/adapters-fs/test1.txt +1 -0
- package/packages/adapters-fs/test2.txt +1 -0
- package/packages/adapters-fs/tsconfig.build.json +15 -0
- package/packages/adapters-fs/tsconfig.json +9 -0
- package/packages/adapters-fs/tsup.config.ts +8 -0
- package/packages/adapters-fs/vitest.config.ts +19 -0
- package/packages/adapters-log-ringbuffer/README.md +228 -0
- package/packages/adapters-log-ringbuffer/eslint.config.js +27 -0
- package/packages/adapters-log-ringbuffer/package.json +47 -0
- package/packages/adapters-log-ringbuffer/src/__tests__/ring-buffer.test.ts +450 -0
- package/packages/adapters-log-ringbuffer/src/index.ts +212 -0
- package/packages/adapters-log-ringbuffer/src/manifest.ts +30 -0
- package/packages/adapters-log-ringbuffer/tsconfig.build.json +15 -0
- package/packages/adapters-log-ringbuffer/tsconfig.json +9 -0
- package/packages/adapters-log-ringbuffer/tsup.config.ts +9 -0
- package/packages/adapters-log-ringbuffer/vitest.config.ts +14 -0
- package/packages/adapters-log-sqlite/README.md +396 -0
- package/packages/adapters-log-sqlite/eslint.config.js +27 -0
- package/packages/adapters-log-sqlite/package.json +49 -0
- package/packages/adapters-log-sqlite/src/__tests__/log-persistence.test.ts +718 -0
- package/packages/adapters-log-sqlite/src/index.ts +1068 -0
- package/packages/adapters-log-sqlite/src/manifest.ts +36 -0
- package/packages/adapters-log-sqlite/src/schema.sql +46 -0
- package/packages/adapters-log-sqlite/tsconfig.build.json +15 -0
- package/packages/adapters-log-sqlite/tsconfig.json +9 -0
- package/packages/adapters-log-sqlite/tsup.config.ts +9 -0
- package/packages/adapters-log-sqlite/vitest.config.ts +15 -0
- package/packages/adapters-mongodb/README.md +147 -0
- package/packages/adapters-mongodb/eslint.config.js +27 -0
- package/packages/adapters-mongodb/package.json +53 -0
- package/packages/adapters-mongodb/src/index.ts +428 -0
- package/packages/adapters-mongodb/src/manifest.ts +45 -0
- package/packages/adapters-mongodb/src/secure-document.ts +231 -0
- package/packages/adapters-mongodb/tsconfig.build.json +15 -0
- package/packages/adapters-mongodb/tsconfig.json +9 -0
- package/packages/adapters-mongodb/tsup.config.ts +8 -0
- package/packages/adapters-openai/README.md +151 -0
- package/packages/adapters-openai/embeddings.ts +37 -0
- package/packages/adapters-openai/eslint.config.js +26 -0
- package/packages/adapters-openai/index.ts +22 -0
- package/packages/adapters-openai/package.json +57 -0
- package/packages/adapters-openai/src/embeddings-manifest.ts +45 -0
- package/packages/adapters-openai/src/embeddings.ts +104 -0
- package/packages/adapters-openai/src/index.ts +13 -0
- package/packages/adapters-openai/src/llm.ts +304 -0
- package/packages/adapters-openai/src/manifest.ts +47 -0
- package/packages/adapters-openai/tsconfig.build.json +15 -0
- package/packages/adapters-openai/tsconfig.json +9 -0
- package/packages/adapters-openai/tsup.config.ts +8 -0
- package/packages/adapters-pino/README.md +152 -0
- package/packages/adapters-pino/eslint.config.js +27 -0
- package/packages/adapters-pino/package.json +49 -0
- package/packages/adapters-pino/src/index.test.ts +44 -0
- package/packages/adapters-pino/src/index.ts +322 -0
- package/packages/adapters-pino/src/log-ring-buffer.ts +142 -0
- package/packages/adapters-pino/src/manifest.ts +49 -0
- package/packages/adapters-pino/tsconfig.build.json +15 -0
- package/packages/adapters-pino/tsconfig.json +9 -0
- package/packages/adapters-pino/tsup.config.ts +9 -0
- package/packages/adapters-pino-http/README.md +141 -0
- package/packages/adapters-pino-http/eslint.config.js +27 -0
- package/packages/adapters-pino-http/package.json +46 -0
- package/packages/adapters-pino-http/src/index.ts +229 -0
- package/packages/adapters-pino-http/tsconfig.build.json +15 -0
- package/packages/adapters-pino-http/tsconfig.json +9 -0
- package/packages/adapters-pino-http/tsup.config.ts +9 -0
- package/packages/adapters-qdrant/README.md +166 -0
- package/packages/adapters-qdrant/eslint.config.js +27 -0
- package/packages/adapters-qdrant/package.json +49 -0
- package/packages/adapters-qdrant/src/index.ts +490 -0
- package/packages/adapters-qdrant/src/manifest.ts +54 -0
- package/packages/adapters-qdrant/src/retry.ts +204 -0
- package/packages/adapters-qdrant/tsconfig.build.json +15 -0
- package/packages/adapters-qdrant/tsconfig.json +9 -0
- package/packages/adapters-qdrant/tsup.config.ts +9 -0
- package/packages/adapters-redis/README.md +159 -0
- package/packages/adapters-redis/eslint.config.js +27 -0
- package/packages/adapters-redis/package.json +49 -0
- package/packages/adapters-redis/src/index.ts +164 -0
- package/packages/adapters-redis/src/manifest.ts +49 -0
- package/packages/adapters-redis/tsconfig.build.json +15 -0
- package/packages/adapters-redis/tsconfig.json +9 -0
- package/packages/adapters-redis/tsup.config.ts +9 -0
- package/packages/adapters-snapshot-localfs/README.md +10 -0
- package/packages/adapters-snapshot-localfs/eslint.config.js +2 -0
- package/packages/adapters-snapshot-localfs/package.json +46 -0
- package/packages/adapters-snapshot-localfs/src/index.test.ts +40 -0
- package/packages/adapters-snapshot-localfs/src/index.ts +292 -0
- package/packages/adapters-snapshot-localfs/src/manifest.ts +32 -0
- package/packages/adapters-snapshot-localfs/tsconfig.build.json +15 -0
- package/packages/adapters-snapshot-localfs/tsconfig.json +16 -0
- package/packages/adapters-snapshot-localfs/tsup.config.ts +11 -0
- package/packages/adapters-sqlite/README.md +163 -0
- package/packages/adapters-sqlite/eslint.config.js +27 -0
- package/packages/adapters-sqlite/package.json +54 -0
- package/packages/adapters-sqlite/src/index.test.ts +245 -0
- package/packages/adapters-sqlite/src/index.ts +382 -0
- package/packages/adapters-sqlite/src/manifest.ts +47 -0
- package/packages/adapters-sqlite/src/secure-sql.test.ts +290 -0
- package/packages/adapters-sqlite/src/secure-sql.ts +281 -0
- package/packages/adapters-sqlite/tsconfig.build.json +15 -0
- package/packages/adapters-sqlite/tsconfig.json +9 -0
- package/packages/adapters-sqlite/tsup.config.ts +8 -0
- package/packages/adapters-sqlite/vitest.config.ts +19 -0
- package/packages/adapters-transport/README.md +170 -0
- package/packages/adapters-transport/eslint.config.js +27 -0
- package/packages/adapters-transport/package.json +49 -0
- package/packages/adapters-transport/src/__tests__/unix-socket-server.test.ts +550 -0
- package/packages/adapters-transport/src/index.ts +101 -0
- package/packages/adapters-transport/src/ipc-transport.ts +228 -0
- package/packages/adapters-transport/src/transport.ts +224 -0
- package/packages/adapters-transport/src/types.ts +92 -0
- package/packages/adapters-transport/src/unix-socket-server.ts +193 -0
- package/packages/adapters-transport/src/unix-socket-transport.ts +280 -0
- package/packages/adapters-transport/tsconfig.build.json +15 -0
- package/packages/adapters-transport/tsconfig.json +9 -0
- package/packages/adapters-transport/tsup.config.ts +9 -0
- package/packages/adapters-vibeproxy/README.md +159 -0
- package/packages/adapters-vibeproxy/eslint.config.js +27 -0
- package/packages/adapters-vibeproxy/package.json +51 -0
- package/packages/adapters-vibeproxy/src/index.ts +13 -0
- package/packages/adapters-vibeproxy/src/llm.ts +437 -0
- package/packages/adapters-vibeproxy/src/manifest.ts +51 -0
- package/packages/adapters-vibeproxy/tsconfig.build.json +15 -0
- package/packages/adapters-vibeproxy/tsconfig.json +9 -0
- package/packages/adapters-vibeproxy/tsup.config.ts +8 -0
- package/packages/adapters-workspace-agent/package.json +46 -0
- package/packages/adapters-workspace-agent/src/__tests__/adapter.test.ts +212 -0
- package/packages/adapters-workspace-agent/src/index.ts +220 -0
- package/packages/adapters-workspace-agent/src/manifest.ts +36 -0
- package/packages/adapters-workspace-agent/tsconfig.build.json +15 -0
- package/packages/adapters-workspace-agent/tsconfig.json +16 -0
- package/packages/adapters-workspace-agent/tsup.config.ts +11 -0
- package/packages/adapters-workspace-localfs/README.md +9 -0
- package/packages/adapters-workspace-localfs/eslint.config.js +2 -0
- package/packages/adapters-workspace-localfs/package.json +46 -0
- package/packages/adapters-workspace-localfs/src/index.test.ts +27 -0
- package/packages/adapters-workspace-localfs/src/index.ts +172 -0
- package/packages/adapters-workspace-localfs/src/manifest.ts +32 -0
- package/packages/adapters-workspace-localfs/tsconfig.build.json +15 -0
- package/packages/adapters-workspace-localfs/tsconfig.json +16 -0
- package/packages/adapters-workspace-localfs/tsup.config.ts +11 -0
- package/packages/adapters-workspace-worktree/README.md +9 -0
- package/packages/adapters-workspace-worktree/eslint.config.js +2 -0
- package/packages/adapters-workspace-worktree/package.json +46 -0
- package/packages/adapters-workspace-worktree/src/index.test.ts +38 -0
- package/packages/adapters-workspace-worktree/src/index.ts +245 -0
- package/packages/adapters-workspace-worktree/src/manifest.ts +38 -0
- package/packages/adapters-workspace-worktree/tsconfig.build.json +15 -0
- package/packages/adapters-workspace-worktree/tsconfig.json +16 -0
- package/packages/adapters-workspace-worktree/tsup.config.ts +11 -0
- package/pnpm-workspace.yaml +2800 -0
- package/prettierrc.json +1 -0
- package/scripts/devkit-sync.mjs +37 -0
- package/scripts/hooks/post-push +9 -0
- package/scripts/hooks/pre-commit +9 -0
- package/scripts/hooks/pre-push +9 -0
- package/test-integration.ts +242 -0
- package/test.txt +1 -0
- package/tsconfig.base.json +6 -0
- package/tsconfig.build.json +15 -0
- package/tsconfig.json +9 -0
- package/tsconfig.paths.json +26 -0
- package/tsconfig.tools.json +17 -0
- package/tsup.config.bin.ts +34 -0
- package/tsup.config.cli.ts +41 -0
- package/tsup.config.dual.ts +46 -0
- package/tsup.config.ts +36 -0
- package/tsup.external.json +103 -0
- package/vitest.config.ts +2 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# @kb-labs/adapters-openai
|
|
2
|
+
|
|
3
|
+
> Part of [KB Labs](https://github.com/KirillBaranov/kb-labs) ecosystem. Works exclusively within KB Labs platform.
|
|
4
|
+
|
|
5
|
+
OpenAI language model adapter supporting GPT-4, GPT-3.5, and other OpenAI models with streaming and function calling.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
| Property | Value |
|
|
10
|
+
|----------|-------|
|
|
11
|
+
| **Implements** | `ILLM` |
|
|
12
|
+
| **Type** | `core` |
|
|
13
|
+
| **Requires** | None |
|
|
14
|
+
| **Category** | AI |
|
|
15
|
+
|
|
16
|
+
## Features
|
|
17
|
+
|
|
18
|
+
- **Multiple Models** - GPT-4, GPT-4 Turbo, GPT-3.5 Turbo
|
|
19
|
+
- **Streaming Support** - Real-time token streaming
|
|
20
|
+
- **Function Calling** - Native tool/function support
|
|
21
|
+
- **Configurable** - Temperature, max tokens, and more
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pnpm add @kb-labs/adapters-openai
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Configuration
|
|
30
|
+
|
|
31
|
+
Add to your `kb.config.json`:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"platform": {
|
|
36
|
+
"adapters": {
|
|
37
|
+
"llm": "@kb-labs/adapters-openai"
|
|
38
|
+
},
|
|
39
|
+
"adapterOptions": {
|
|
40
|
+
"llm": {
|
|
41
|
+
"apiKey": "${OPENAI_API_KEY}",
|
|
42
|
+
"model": "gpt-4-turbo",
|
|
43
|
+
"temperature": 0.7
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Options
|
|
51
|
+
|
|
52
|
+
| Option | Type | Default | Description |
|
|
53
|
+
|--------|------|---------|-------------|
|
|
54
|
+
| `apiKey` | `string` | - | OpenAI API key |
|
|
55
|
+
| `model` | `string` | `"gpt-4-turbo"` | Model to use |
|
|
56
|
+
| `temperature` | `number` | `0.7` | Sampling temperature (0.0 to 2.0) |
|
|
57
|
+
| `maxTokens` | `number` | - | Maximum tokens to generate |
|
|
58
|
+
|
|
59
|
+
## Usage
|
|
60
|
+
|
|
61
|
+
### Via Platform (Recommended)
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { usePlatform } from '@kb-labs/sdk';
|
|
65
|
+
|
|
66
|
+
const platform = usePlatform();
|
|
67
|
+
|
|
68
|
+
// Simple chat
|
|
69
|
+
const response = await platform.llm.chat([
|
|
70
|
+
{ role: 'user', content: 'Hello!' }
|
|
71
|
+
]);
|
|
72
|
+
|
|
73
|
+
// Streaming
|
|
74
|
+
for await (const chunk of platform.llm.stream([
|
|
75
|
+
{ role: 'user', content: 'Tell me a story' }
|
|
76
|
+
])) {
|
|
77
|
+
process.stdout.write(chunk.content);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// With function calling
|
|
81
|
+
const result = await platform.llm.chatWithTools(
|
|
82
|
+
[{ role: 'user', content: 'What is the weather?' }],
|
|
83
|
+
[{ name: 'getWeather', parameters: { ... } }]
|
|
84
|
+
);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Standalone (Testing/Development)
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { createAdapter } from '@kb-labs/adapters-openai';
|
|
91
|
+
|
|
92
|
+
const llm = createAdapter({
|
|
93
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
94
|
+
model: 'gpt-4-turbo'
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const response = await llm.chat([
|
|
98
|
+
{ role: 'user', content: 'Hello!' }
|
|
99
|
+
]);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Adapter Manifest
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
{
|
|
106
|
+
id: 'openai-llm',
|
|
107
|
+
name: 'OpenAI LLM',
|
|
108
|
+
version: '1.0.0',
|
|
109
|
+
implements: 'ILLM',
|
|
110
|
+
capabilities: {
|
|
111
|
+
streaming: true,
|
|
112
|
+
custom: {
|
|
113
|
+
functionCalling: true,
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## FAQ
|
|
120
|
+
|
|
121
|
+
<details>
|
|
122
|
+
<summary><strong>Q: How do I switch models?</strong></summary>
|
|
123
|
+
|
|
124
|
+
Change the `model` option:
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"adapterOptions": {
|
|
129
|
+
"llm": {
|
|
130
|
+
"model": "gpt-3.5-turbo"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
</details>
|
|
136
|
+
|
|
137
|
+
<details>
|
|
138
|
+
<summary><strong>Q: How do I handle rate limits?</strong></summary>
|
|
139
|
+
|
|
140
|
+
The adapter includes automatic retry with exponential backoff. For high-volume usage, consider using OpenAI's usage tiers or implement request queuing.
|
|
141
|
+
</details>
|
|
142
|
+
|
|
143
|
+
## Related Adapters
|
|
144
|
+
|
|
145
|
+
| Adapter | Use Case |
|
|
146
|
+
|---------|----------|
|
|
147
|
+
| `@kb-labs/adapters-vibeproxy` | Local multi-provider proxy (Claude, GPT, etc.) |
|
|
148
|
+
|
|
149
|
+
## License
|
|
150
|
+
|
|
151
|
+
[KB Public License v1.1](../../LICENSE) - KB Labs Team
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/adapters-openai/embeddings
|
|
3
|
+
* OpenAI embeddings adapter entry point.
|
|
4
|
+
*
|
|
5
|
+
* This file provides a separate entry point for the embeddings adapter,
|
|
6
|
+
* allowing it to be loaded independently from the LLM adapter.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```json
|
|
10
|
+
* // In kb.config.json
|
|
11
|
+
* {
|
|
12
|
+
* "platform": {
|
|
13
|
+
* "adapters": {
|
|
14
|
+
* "embeddings": "@kb-labs/adapters-openai/embeddings"
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { OpenAIEmbeddings, type OpenAIEmbeddingsConfig } from './src/embeddings.js';
|
|
22
|
+
|
|
23
|
+
// Re-export manifest
|
|
24
|
+
export { manifest } from './src/embeddings-manifest.js';
|
|
25
|
+
|
|
26
|
+
// Re-export types and class
|
|
27
|
+
export { OpenAIEmbeddings, type OpenAIEmbeddingsConfig, EMBEDDING_MODELS, type EmbeddingModel } from './src/embeddings.js';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Create OpenAI embeddings adapter.
|
|
31
|
+
*/
|
|
32
|
+
export function createAdapter(config?: OpenAIEmbeddingsConfig): OpenAIEmbeddings {
|
|
33
|
+
return new OpenAIEmbeddings(config);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Default export
|
|
37
|
+
export default createAdapter;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard ESLint configuration template
|
|
3
|
+
*
|
|
4
|
+
* This is the canonical template for all @kb-labs packages.
|
|
5
|
+
* DO NOT modify this file locally - it is synced from @kb-labs/devkit
|
|
6
|
+
*
|
|
7
|
+
* Customization guidelines:
|
|
8
|
+
* - DevKit preset already includes all standard ignores
|
|
9
|
+
* - Only add project-specific ignores if absolutely necessary
|
|
10
|
+
* - Document why custom ignores are needed
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/kb-labs/devkit#eslint-configuration
|
|
13
|
+
*/
|
|
14
|
+
import nodePreset from '@kb-labs/devkit/eslint/node.js';
|
|
15
|
+
|
|
16
|
+
export default [
|
|
17
|
+
...nodePreset,
|
|
18
|
+
|
|
19
|
+
// Project-specific ignores
|
|
20
|
+
{
|
|
21
|
+
ignores: [
|
|
22
|
+
// Ignore tsup bundled config files
|
|
23
|
+
'**/*.bundled_*.mjs',
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI LLM adapter entry point.
|
|
3
|
+
* Re-exports from src/ for clean dist structure.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { OpenAILLM, type OpenAILLMConfig } from './src/index.js';
|
|
7
|
+
|
|
8
|
+
// Re-export manifest
|
|
9
|
+
export { manifest } from './src/manifest.js';
|
|
10
|
+
|
|
11
|
+
// Re-export types and class
|
|
12
|
+
export { OpenAILLM, type OpenAILLMConfig } from './src/index.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Create OpenAI LLM adapter.
|
|
16
|
+
*/
|
|
17
|
+
export function createAdapter(config?: OpenAILLMConfig): OpenAILLM {
|
|
18
|
+
return new OpenAILLM(config);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Default export
|
|
22
|
+
export default createAdapter;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kb-labs/adapters-openai",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "OpenAI adapter implementing ILLM and IEmbeddings interfaces",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./llm": {
|
|
14
|
+
"import": "./dist/llm.js",
|
|
15
|
+
"types": "./dist/llm.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./embeddings": {
|
|
18
|
+
"import": "./dist/embeddings.js",
|
|
19
|
+
"types": "./dist/embeddings.d.ts"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"scripts": {
|
|
28
|
+
"clean": "rimraf dist",
|
|
29
|
+
"build": "tsup",
|
|
30
|
+
"dev": "tsup --watch",
|
|
31
|
+
"type-check": "tsc --noEmit",
|
|
32
|
+
"test": "vitest run --passWithNoTests",
|
|
33
|
+
"test:watch": "vitest",
|
|
34
|
+
"lint": "eslint src --ext .ts",
|
|
35
|
+
"lint:fix": "eslint . --fix"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"openai": "^4.104.0"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@kb-labs/core-platform": "*"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@kb-labs/core-platform": "link:../../../../platform/kb-labs-core/packages/core-platform",
|
|
45
|
+
"@types/node": "^24.3.3",
|
|
46
|
+
"eslint": "^9",
|
|
47
|
+
"tsup": "^8.5.0",
|
|
48
|
+
"typescript": "^5.6.3",
|
|
49
|
+
"vitest": "^3.2.4",
|
|
50
|
+
"@kb-labs/devkit": "link:../../../kb-labs-devkit",
|
|
51
|
+
"rimraf": "^6.0.1"
|
|
52
|
+
},
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=20.0.0",
|
|
55
|
+
"pnpm": ">=9.0.0"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/adapters-openai/embeddings-manifest
|
|
3
|
+
* Adapter manifest for OpenAI embeddings.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { AdapterManifest } from "@kb-labs/core-platform";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Adapter manifest for OpenAI embeddings.
|
|
10
|
+
*/
|
|
11
|
+
export const manifest: AdapterManifest = {
|
|
12
|
+
manifestVersion: "1.0.0",
|
|
13
|
+
id: "openai-embeddings",
|
|
14
|
+
name: "OpenAI Embeddings",
|
|
15
|
+
version: "1.0.0",
|
|
16
|
+
description:
|
|
17
|
+
"OpenAI text embeddings adapter (text-embedding-3-small, text-embedding-3-large, etc.)",
|
|
18
|
+
author: "KB Labs",
|
|
19
|
+
license: "MIT",
|
|
20
|
+
type: "core",
|
|
21
|
+
implements: "IEmbeddings",
|
|
22
|
+
capabilities: {
|
|
23
|
+
batch: true,
|
|
24
|
+
},
|
|
25
|
+
configSchema: {
|
|
26
|
+
apiKey: {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "OpenAI API key (defaults to OPENAI_API_KEY env var)",
|
|
29
|
+
},
|
|
30
|
+
model: {
|
|
31
|
+
type: "string",
|
|
32
|
+
default: "text-embedding-3-small",
|
|
33
|
+
description: "Embedding model to use",
|
|
34
|
+
enum: [
|
|
35
|
+
"text-embedding-3-small",
|
|
36
|
+
"text-embedding-3-large",
|
|
37
|
+
"text-embedding-ada-002",
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
dimensions: {
|
|
41
|
+
type: "number",
|
|
42
|
+
description: "Number of dimensions (for v3 models)",
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/adapters-openai/embeddings
|
|
3
|
+
* OpenAI implementation of IEmbeddings interface.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import OpenAI from "openai";
|
|
7
|
+
import type { IEmbeddings } from "@kb-labs/core-platform";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Supported OpenAI embedding models and their dimensions.
|
|
11
|
+
*/
|
|
12
|
+
export const EMBEDDING_MODELS = {
|
|
13
|
+
"text-embedding-3-small": 1536,
|
|
14
|
+
"text-embedding-3-large": 3072,
|
|
15
|
+
"text-embedding-ada-002": 1536,
|
|
16
|
+
} as const;
|
|
17
|
+
|
|
18
|
+
export type EmbeddingModel = keyof typeof EMBEDDING_MODELS;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for OpenAI embeddings adapter.
|
|
22
|
+
*/
|
|
23
|
+
export interface OpenAIEmbeddingsConfig {
|
|
24
|
+
/** OpenAI API key (defaults to OPENAI_API_KEY env var) */
|
|
25
|
+
apiKey?: string;
|
|
26
|
+
/** Base URL for API (optional, for proxies or Azure) */
|
|
27
|
+
baseURL?: string;
|
|
28
|
+
/** Embedding model to use */
|
|
29
|
+
model?: EmbeddingModel;
|
|
30
|
+
/** Organization ID (optional) */
|
|
31
|
+
organization?: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* OpenAI implementation of IEmbeddings interface.
|
|
36
|
+
*/
|
|
37
|
+
export class OpenAIEmbeddings implements IEmbeddings {
|
|
38
|
+
private client: OpenAI;
|
|
39
|
+
private model: EmbeddingModel;
|
|
40
|
+
readonly dimensions: number;
|
|
41
|
+
|
|
42
|
+
constructor(config: OpenAIEmbeddingsConfig = {}) {
|
|
43
|
+
this.client = new OpenAI({
|
|
44
|
+
apiKey: config.apiKey ?? process.env.OPENAI_API_KEY,
|
|
45
|
+
baseURL: config.baseURL,
|
|
46
|
+
organization: config.organization,
|
|
47
|
+
});
|
|
48
|
+
this.model = config.model ?? "text-embedding-3-small";
|
|
49
|
+
this.dimensions = EMBEDDING_MODELS[this.model];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async embed(text: string): Promise<number[]> {
|
|
53
|
+
const response = await this.client.embeddings.create({
|
|
54
|
+
model: this.model,
|
|
55
|
+
input: text,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const first = response.data[0];
|
|
59
|
+
if (!first) {
|
|
60
|
+
throw new Error("OpenAI embeddings API returned empty response");
|
|
61
|
+
}
|
|
62
|
+
return first.embedding;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async embedBatch(texts: string[]): Promise<number[][]> {
|
|
66
|
+
if (texts.length === 0) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// OpenAI supports batching natively
|
|
71
|
+
const response = await this.client.embeddings.create({
|
|
72
|
+
model: this.model,
|
|
73
|
+
input: texts,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Sort by index to maintain order
|
|
77
|
+
const sorted = response.data.sort((a, b) => a.index - b.index);
|
|
78
|
+
return sorted.map((item) => item.embedding);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Get the dimensions of the embeddings.
|
|
83
|
+
* This method is needed for IPC/Unix Socket transport to access the dimensions property.
|
|
84
|
+
*/
|
|
85
|
+
async getDimensions(): Promise<number> {
|
|
86
|
+
return this.dimensions;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Create OpenAI embeddings adapter.
|
|
92
|
+
* This is the factory function called by initPlatform() when loading adapters.
|
|
93
|
+
*/
|
|
94
|
+
export function createAdapter(
|
|
95
|
+
config?: OpenAIEmbeddingsConfig,
|
|
96
|
+
): OpenAIEmbeddings {
|
|
97
|
+
return new OpenAIEmbeddings(config);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Re-export manifest for adapter loading
|
|
101
|
+
export { manifest } from "./embeddings-manifest.js";
|
|
102
|
+
|
|
103
|
+
// Default export for direct import
|
|
104
|
+
export default createAdapter;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/adapters-openai
|
|
3
|
+
* OpenAI LLM adapter entry point.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Re-export LLM adapter as default
|
|
7
|
+
export { OpenAILLM, type OpenAILLMConfig, createAdapter } from "./llm.js";
|
|
8
|
+
|
|
9
|
+
// Re-export manifest
|
|
10
|
+
export { manifest } from "./manifest.js";
|
|
11
|
+
|
|
12
|
+
// Default export
|
|
13
|
+
export { createAdapter as default } from "./llm.js";
|