@kernl-sdk/ai 0.4.3 → 0.4.4

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.
Files changed (53) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +18 -0
  3. package/dist/__tests__/integration.test.js +10 -11
  4. package/dist/__tests__/language-model.test.js +15 -20
  5. package/dist/convert/__tests__/response.test.js +18 -16
  6. package/dist/convert/__tests__/stream.test.js +21 -20
  7. package/dist/convert/__tests__/tools.test.js +5 -5
  8. package/dist/convert/__tests__/ui-stream.test.js +11 -5
  9. package/dist/convert/response.d.ts +4 -4
  10. package/dist/convert/response.d.ts.map +1 -1
  11. package/dist/convert/response.js +1 -20
  12. package/dist/convert/stream.d.ts.map +1 -1
  13. package/dist/convert/stream.js +1 -7
  14. package/dist/convert/tools.d.ts +2 -2
  15. package/dist/convert/tools.d.ts.map +1 -1
  16. package/dist/convert/tools.js +2 -2
  17. package/dist/embedding-model.d.ts +3 -3
  18. package/dist/embedding-model.d.ts.map +1 -1
  19. package/dist/oauth/anthropic.d.ts +8 -0
  20. package/dist/oauth/anthropic.d.ts.map +1 -0
  21. package/dist/oauth/anthropic.js +65 -0
  22. package/dist/oauth/openai.d.ts +8 -0
  23. package/dist/oauth/openai.d.ts.map +1 -0
  24. package/dist/oauth/openai.js +97 -0
  25. package/dist/oauth/types.d.ts +25 -0
  26. package/dist/oauth/types.d.ts.map +1 -0
  27. package/dist/oauth/types.js +1 -0
  28. package/dist/providers/anthropic.d.ts +42 -2
  29. package/dist/providers/anthropic.d.ts.map +1 -1
  30. package/dist/providers/anthropic.js +34 -1
  31. package/dist/providers/google.d.ts +4 -4
  32. package/dist/providers/google.d.ts.map +1 -1
  33. package/dist/providers/google.js +1 -1
  34. package/dist/providers/openai.d.ts +43 -3
  35. package/dist/providers/openai.d.ts.map +1 -1
  36. package/dist/providers/openai.js +36 -2
  37. package/package.json +9 -9
  38. package/src/__tests__/integration.test.ts +10 -11
  39. package/src/__tests__/language-model.test.ts +15 -20
  40. package/src/convert/__tests__/response.test.ts +23 -21
  41. package/src/convert/__tests__/stream.test.ts +21 -20
  42. package/src/convert/__tests__/tools.test.ts +6 -6
  43. package/src/convert/__tests__/ui-stream.test.ts +11 -5
  44. package/src/convert/response.ts +9 -30
  45. package/src/convert/stream.ts +1 -7
  46. package/src/convert/tools.ts +5 -5
  47. package/src/embedding-model.ts +3 -5
  48. package/src/oauth/anthropic.ts +87 -0
  49. package/src/oauth/openai.ts +129 -0
  50. package/src/oauth/types.ts +25 -0
  51. package/src/providers/anthropic.ts +60 -19
  52. package/src/providers/google.ts +4 -37
  53. package/src/providers/openai.ts +62 -41
@@ -1,29 +1,67 @@
1
- import { anthropic as _anthropic } from "@ai-sdk/anthropic";
1
+ import {
2
+ anthropic as _anthropic,
3
+ createAnthropic as _createAnthropic,
4
+ } from "@ai-sdk/anthropic";
2
5
  import { AISDKLanguageModel } from "../language-model";
6
+ import { createOAuthFetch } from "../oauth/anthropic";
7
+ import type { OAuthCredentials } from "../oauth/types";
3
8
 
4
9
  /**
5
- * Anthropic model IDs.
10
+ * Anthropic model IDs (derived from @ai-sdk/anthropic).
6
11
  */
7
- export type AnthropicModelId =
8
- | "claude-haiku-4-5"
9
- | "claude-haiku-4-5-20251001"
10
- | "claude-sonnet-4-5"
11
- | "claude-sonnet-4-5-20250929"
12
- | "claude-opus-4-1"
13
- | "claude-opus-4-0"
14
- | "claude-sonnet-4-0"
15
- | "claude-opus-4-1-20250805"
16
- | "claude-opus-4-20250514"
17
- | "claude-sonnet-4-20250514"
18
- | "claude-3-7-sonnet-latest"
19
- | "claude-3-7-sonnet-20250219"
20
- | "claude-3-5-haiku-latest"
21
- | "claude-3-5-haiku-20241022"
22
- | "claude-3-haiku-20240307"
23
- | (string & {});
12
+ export type AnthropicModelId = Parameters<typeof _anthropic>[0];
13
+
14
+ /**
15
+ * Options for creating a custom Anthropic provider.
16
+ */
17
+ export interface AnthropicProviderOptions {
18
+ /** API key for standard authentication */
19
+ apiKey?: string;
20
+ /** OAuth credentials for Claude Pro/Max authentication */
21
+ oauth?: OAuthCredentials;
22
+ /** Custom base URL */
23
+ baseURL?: string;
24
+ /** Custom headers */
25
+ headers?: Record<string, string>;
26
+ }
27
+
28
+ /**
29
+ * Create a custom Anthropic provider with explicit credentials.
30
+ *
31
+ * @example API key auth
32
+ * ```ts
33
+ * const anthropic = createAnthropic({ apiKey: "sk-..." });
34
+ * const model = anthropic("claude-sonnet-4-5");
35
+ * ```
36
+ *
37
+ * @example OAuth auth (Claude Pro/Max)
38
+ * ```ts
39
+ * const anthropic = createAnthropic({
40
+ * oauth: {
41
+ * accessToken: "...",
42
+ * refreshToken: "...",
43
+ * expiresAt: Date.now() + 3600000,
44
+ * onRefresh: (tokens) => saveTokens(tokens),
45
+ * }
46
+ * });
47
+ * const model = anthropic("claude-sonnet-4-5");
48
+ * ```
49
+ */
50
+ export function createAnthropic(options: AnthropicProviderOptions = {}) {
51
+ const provider = _createAnthropic({
52
+ apiKey: options.oauth ? undefined : options.apiKey,
53
+ baseURL: options.baseURL,
54
+ headers: options.headers,
55
+ fetch: options.oauth ? createOAuthFetch(options.oauth) : undefined,
56
+ });
57
+
58
+ return (modelId: AnthropicModelId) =>
59
+ new AISDKLanguageModel(provider(modelId));
60
+ }
24
61
 
25
62
  /**
26
63
  * Create a kernl-compatible Anthropic language model.
64
+ * Uses ANTHROPIC_API_KEY environment variable.
27
65
  *
28
66
  * @example
29
67
  * ```ts
@@ -38,4 +76,7 @@ export function anthropic(modelId: AnthropicModelId) {
38
76
  return new AISDKLanguageModel(model);
39
77
  }
40
78
 
79
+ // Re-export types
80
+ export type { OAuthCredentials } from "../oauth/types";
81
+
41
82
  // Note: Anthropic does not currently support embeddings
@@ -1,45 +1,12 @@
1
1
  import { google as _google } from "@ai-sdk/google";
2
+ import { registerEmbeddingProvider } from "@kernl-sdk/retrieval";
2
3
  import { AISDKLanguageModel } from "../language-model";
3
4
  import { AISDKEmbeddingModel } from "../embedding-model";
4
- import { registerEmbeddingProvider } from "@kernl-sdk/retrieval";
5
5
 
6
6
  /**
7
- * Google Generative AI model IDs.
7
+ * Google model IDs (derived from @ai-sdk/google).
8
8
  */
9
- type GoogleGenerativeAIModelId =
10
- | "gemini-1.5-flash"
11
- | "gemini-1.5-flash-latest"
12
- | "gemini-1.5-flash-001"
13
- | "gemini-1.5-flash-002"
14
- | "gemini-1.5-flash-8b"
15
- | "gemini-1.5-flash-8b-latest"
16
- | "gemini-1.5-flash-8b-001"
17
- | "gemini-1.5-pro"
18
- | "gemini-1.5-pro-latest"
19
- | "gemini-1.5-pro-001"
20
- | "gemini-1.5-pro-002"
21
- | "gemini-2.0-flash"
22
- | "gemini-2.0-flash-001"
23
- | "gemini-2.0-flash-live-001"
24
- | "gemini-2.0-flash-lite"
25
- | "gemini-2.0-pro-exp-02-05"
26
- | "gemini-2.0-flash-thinking-exp-01-21"
27
- | "gemini-2.0-flash-exp"
28
- | "gemini-2.5-pro"
29
- | "gemini-2.5-flash"
30
- | "gemini-2.5-flash-image-preview"
31
- | "gemini-2.5-flash-lite"
32
- | "gemini-2.5-flash-lite-preview-09-2025"
33
- | "gemini-2.5-flash-preview-04-17"
34
- | "gemini-2.5-flash-preview-09-2025"
35
- | "gemini-pro-latest"
36
- | "gemini-flash-latest"
37
- | "gemini-flash-lite-latest"
38
- | "gemini-2.5-pro-exp-03-25"
39
- | "gemini-exp-1206"
40
- | "gemma-3-12b-it"
41
- | "gemma-3-27b-it"
42
- | (string & {});
9
+ export type GoogleModelId = Parameters<typeof _google>[0];
43
10
 
44
11
  /**
45
12
  * Create a kernl-compatible Google Generative AI language model.
@@ -52,7 +19,7 @@ type GoogleGenerativeAIModelId =
52
19
  * const response = await gemini.generate([...], {});
53
20
  * ```
54
21
  */
55
- export function google(modelId: GoogleGenerativeAIModelId) {
22
+ export function google(modelId: GoogleModelId) {
56
23
  const model = _google(modelId);
57
24
  return new AISDKLanguageModel(model);
58
25
  }
@@ -1,52 +1,70 @@
1
- import { openai as _openai } from "@ai-sdk/openai";
1
+ import {
2
+ openai as _openai,
3
+ createOpenAI as _createOpenAI,
4
+ } from "@ai-sdk/openai";
5
+ import { registerEmbeddingProvider } from "@kernl-sdk/retrieval";
6
+
2
7
  import { AISDKLanguageModel } from "../language-model";
3
8
  import { AISDKEmbeddingModel } from "../embedding-model";
4
- import { registerEmbeddingProvider } from "@kernl-sdk/retrieval";
9
+ import { createOAuthFetch } from "../oauth/openai";
10
+ import type { OpenAIOAuthCredentials } from "../oauth/types";
11
+
12
+ /**
13
+ * OpenAI model IDs (derived from @ai-sdk/openai).
14
+ */
15
+ export type OpenAIModelId = Parameters<typeof _openai>[0];
5
16
 
6
17
  /**
7
- * OpenAI model IDs.
18
+ * Options for creating a custom OpenAI provider.
8
19
  */
9
- type OpenAIModelId =
10
- | "chatgpt-4o-latest"
11
- | "gpt-3.5-turbo-0125"
12
- | "gpt-3.5-turbo-1106"
13
- | "gpt-3.5-turbo"
14
- | "gpt-4-0613"
15
- | "gpt-4-turbo-2024-04-09"
16
- | "gpt-4-turbo"
17
- | "gpt-4.1-2025-04-14"
18
- | "gpt-4.1-mini-2025-04-14"
19
- | "gpt-4.1-mini"
20
- | "gpt-4.1-nano-2025-04-14"
21
- | "gpt-4.1-nano"
22
- | "gpt-4.1"
23
- | "gpt-4"
24
- | "gpt-4o-2024-05-13"
25
- | "gpt-4o-2024-08-06"
26
- | "gpt-4o-2024-11-20"
27
- | "gpt-4o-mini-2024-07-18"
28
- | "gpt-4o-mini"
29
- | "gpt-4o"
30
- | "gpt-5-2025-08-07"
31
- | "gpt-5-chat-latest"
32
- | "gpt-5-codex"
33
- | "gpt-5-mini-2025-08-07"
34
- | "gpt-5-mini"
35
- | "gpt-5-nano-2025-08-07"
36
- | "gpt-5-nano"
37
- | "gpt-5-pro-2025-10-06"
38
- | "gpt-5-pro"
39
- | "gpt-5"
40
- | "o1-2024-12-17"
41
- | "o1"
42
- | "o3-2025-04-16"
43
- | "o3-mini-2025-01-31"
44
- | "o3-mini"
45
- | "o3"
46
- | (string & {});
20
+ export interface OpenAIProviderOptions {
21
+ /** API key for standard authentication */
22
+ apiKey?: string;
23
+ /** OAuth credentials for ChatGPT Plus/Pro (Codex) authentication */
24
+ oauth?: OpenAIOAuthCredentials;
25
+ /** Custom base URL (ignored for OAuth - uses Codex endpoint) */
26
+ baseURL?: string;
27
+ /** Custom headers */
28
+ headers?: Record<string, string>;
29
+ }
30
+
31
+ /**
32
+ * Create a custom OpenAI provider with explicit credentials.
33
+ *
34
+ * @example API key auth
35
+ * ```ts
36
+ * const openai = createOpenAI({ apiKey: "sk-..." });
37
+ * const model = openai("gpt-4o");
38
+ * ```
39
+ *
40
+ * @example OAuth auth (ChatGPT Plus/Pro via Codex)
41
+ * ```ts
42
+ * const openai = createOpenAI({
43
+ * oauth: {
44
+ * accessToken: "...",
45
+ * refreshToken: "...",
46
+ * expiresAt: Date.now() + 3600000,
47
+ * accountId: "...", // for org subscriptions
48
+ * onRefresh: (tokens) => saveTokens(tokens),
49
+ * }
50
+ * });
51
+ * const model = openai("gpt-4o");
52
+ * ```
53
+ */
54
+ export function createOpenAI(options: OpenAIProviderOptions = {}) {
55
+ const provider = _createOpenAI({
56
+ apiKey: options.oauth ? undefined : options.apiKey,
57
+ baseURL: options.oauth ? undefined : options.baseURL,
58
+ headers: options.headers,
59
+ fetch: options.oauth ? createOAuthFetch(options.oauth) : undefined,
60
+ });
61
+
62
+ return (modelId: OpenAIModelId) => new AISDKLanguageModel(provider(modelId));
63
+ }
47
64
 
48
65
  /**
49
66
  * Create a kernl-compatible OpenAI language model.
67
+ * Uses OPENAI_API_KEY environment variable.
50
68
  *
51
69
  * @example
52
70
  * ```ts
@@ -61,6 +79,9 @@ export function openai(modelId: OpenAIModelId) {
61
79
  return new AISDKLanguageModel(model);
62
80
  }
63
81
 
82
+ // Re-export types
83
+ export type { OpenAIOAuthCredentials } from "../oauth/types";
84
+
64
85
  // Auto-register OpenAI embedding provider
65
86
  registerEmbeddingProvider(
66
87
  "openai",