@node-llm/core 0.3.0 → 0.4.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.
Files changed (90) hide show
  1. package/README.md +176 -25
  2. package/dist/chat/Chat.d.ts +26 -1
  3. package/dist/chat/Chat.d.ts.map +1 -1
  4. package/dist/chat/Chat.js +83 -1
  5. package/dist/chat/ChatOptions.d.ts +5 -0
  6. package/dist/chat/ChatOptions.d.ts.map +1 -1
  7. package/dist/chat/ChatResponse.d.ts +5 -0
  8. package/dist/chat/ChatResponse.d.ts.map +1 -1
  9. package/dist/chat/ChatResponse.js +12 -0
  10. package/dist/constants.d.ts +7 -0
  11. package/dist/constants.d.ts.map +1 -0
  12. package/dist/constants.js +6 -0
  13. package/dist/embedding/Embedding.d.ts +17 -0
  14. package/dist/embedding/Embedding.d.ts.map +1 -0
  15. package/dist/embedding/Embedding.js +24 -0
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/llm.d.ts +11 -1
  20. package/dist/llm.d.ts.map +1 -1
  21. package/dist/llm.js +55 -28
  22. package/dist/providers/Embedding.d.ts +20 -0
  23. package/dist/providers/Embedding.d.ts.map +1 -0
  24. package/dist/providers/Embedding.js +1 -0
  25. package/dist/providers/Provider.d.ts +11 -4
  26. package/dist/providers/Provider.d.ts.map +1 -1
  27. package/dist/providers/gemini/Capabilities.d.ts +30 -0
  28. package/dist/providers/gemini/Capabilities.d.ts.map +1 -0
  29. package/dist/providers/gemini/Capabilities.js +148 -0
  30. package/dist/providers/gemini/Chat.d.ts +8 -0
  31. package/dist/providers/gemini/Chat.d.ts.map +1 -0
  32. package/dist/providers/gemini/Chat.js +69 -0
  33. package/dist/providers/gemini/ChatUtils.d.ts +9 -0
  34. package/dist/providers/gemini/ChatUtils.d.ts.map +1 -0
  35. package/dist/providers/gemini/ChatUtils.js +83 -0
  36. package/dist/providers/gemini/Embeddings.d.ts +8 -0
  37. package/dist/providers/gemini/Embeddings.d.ts.map +1 -0
  38. package/dist/providers/gemini/Embeddings.js +44 -0
  39. package/dist/providers/gemini/Errors.d.ts +2 -0
  40. package/dist/providers/gemini/Errors.d.ts.map +1 -0
  41. package/dist/providers/gemini/Errors.js +34 -0
  42. package/dist/providers/gemini/GeminiProvider.d.ts +34 -0
  43. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -0
  44. package/dist/providers/gemini/GeminiProvider.js +55 -0
  45. package/dist/providers/gemini/Image.d.ts +8 -0
  46. package/dist/providers/gemini/Image.d.ts.map +1 -0
  47. package/dist/providers/gemini/Image.js +47 -0
  48. package/dist/providers/gemini/Models.d.ts +8 -0
  49. package/dist/providers/gemini/Models.d.ts.map +1 -0
  50. package/dist/providers/gemini/Models.js +38 -0
  51. package/dist/providers/gemini/Streaming.d.ts +8 -0
  52. package/dist/providers/gemini/Streaming.d.ts.map +1 -0
  53. package/dist/providers/gemini/Streaming.js +70 -0
  54. package/dist/providers/gemini/Transcription.d.ts +9 -0
  55. package/dist/providers/gemini/Transcription.d.ts.map +1 -0
  56. package/dist/providers/gemini/Transcription.js +63 -0
  57. package/dist/providers/gemini/index.d.ts +11 -0
  58. package/dist/providers/gemini/index.d.ts.map +1 -0
  59. package/dist/providers/gemini/index.js +24 -0
  60. package/dist/providers/gemini/types.d.ts +118 -0
  61. package/dist/providers/gemini/types.d.ts.map +1 -0
  62. package/dist/providers/gemini/types.js +1 -0
  63. package/dist/providers/openai/Capabilities.d.ts +7 -2
  64. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  65. package/dist/providers/openai/Capabilities.js +52 -214
  66. package/dist/providers/openai/Chat.d.ts.map +1 -1
  67. package/dist/providers/openai/Chat.js +3 -0
  68. package/dist/providers/openai/Embedding.d.ts +8 -0
  69. package/dist/providers/openai/Embedding.d.ts.map +1 -0
  70. package/dist/providers/openai/Embedding.js +48 -0
  71. package/dist/providers/openai/ModelDefinitions.d.ts +25 -0
  72. package/dist/providers/openai/ModelDefinitions.d.ts.map +1 -0
  73. package/dist/providers/openai/ModelDefinitions.js +211 -0
  74. package/dist/providers/openai/Moderation.d.ts.map +1 -1
  75. package/dist/providers/openai/Moderation.js +3 -2
  76. package/dist/providers/openai/OpenAIProvider.d.ts +7 -0
  77. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  78. package/dist/providers/openai/OpenAIProvider.js +10 -0
  79. package/dist/providers/openai/Transcription.d.ts.map +1 -1
  80. package/dist/providers/openai/Transcription.js +5 -4
  81. package/dist/schema/Schema.d.ts +20 -0
  82. package/dist/schema/Schema.d.ts.map +1 -0
  83. package/dist/schema/Schema.js +22 -0
  84. package/dist/schema/to-json-schema.d.ts +3 -0
  85. package/dist/schema/to-json-schema.d.ts.map +1 -0
  86. package/dist/schema/to-json-schema.js +10 -0
  87. package/dist/utils/Binary.d.ts +12 -0
  88. package/dist/utils/Binary.d.ts.map +1 -0
  89. package/dist/utils/Binary.js +71 -0
  90. package/package.json +3 -2
@@ -0,0 +1,118 @@
1
+ export interface GeminiPart {
2
+ text?: string;
3
+ inlineData?: {
4
+ mimeType: string;
5
+ data: string;
6
+ };
7
+ functionCall?: {
8
+ name: string;
9
+ args: Record<string, any>;
10
+ };
11
+ functionResponse?: {
12
+ name: string;
13
+ response: Record<string, any>;
14
+ };
15
+ }
16
+ export interface GeminiContent {
17
+ role?: "user" | "model";
18
+ parts: GeminiPart[];
19
+ }
20
+ export interface GeminiGenerateContentRequest {
21
+ contents: GeminiContent[];
22
+ systemInstruction?: {
23
+ parts: GeminiPart[];
24
+ };
25
+ tools?: {
26
+ functionDeclarations: Array<{
27
+ name: string;
28
+ description?: string;
29
+ parameters?: Record<string, any>;
30
+ }>;
31
+ }[];
32
+ generationConfig?: {
33
+ temperature?: number;
34
+ maxOutputTokens?: number;
35
+ stopSequences?: string[];
36
+ topP?: number;
37
+ topK?: number;
38
+ responseMimeType?: string;
39
+ responseSchema?: Record<string, any>;
40
+ };
41
+ safetySettings?: Array<{
42
+ category: string;
43
+ threshold: string;
44
+ }>;
45
+ }
46
+ export interface GeminiGenerateContentResponse {
47
+ candidates?: Array<{
48
+ content: GeminiContent;
49
+ finishReason?: string;
50
+ index?: number;
51
+ safetyRatings?: Array<{
52
+ category: string;
53
+ probability: string;
54
+ }>;
55
+ }>;
56
+ usageMetadata?: {
57
+ promptTokenCount: number;
58
+ candidatesTokenCount: number;
59
+ totalTokenCount: number;
60
+ };
61
+ modelVersion?: string;
62
+ }
63
+ export interface GeminiModel {
64
+ name: string;
65
+ version: string;
66
+ displayName: string;
67
+ description: string;
68
+ inputTokenLimit: number;
69
+ outputTokenLimit: number;
70
+ supportedGenerationMethods: string[];
71
+ temperature?: number;
72
+ topP?: number;
73
+ topK?: number;
74
+ }
75
+ export interface GeminiListModelsResponse {
76
+ models: GeminiModel[];
77
+ nextPageToken?: string;
78
+ }
79
+ export interface GeminiImageRequest {
80
+ prompt: string;
81
+ numberOfImages?: number;
82
+ aspectRatio?: string;
83
+ safetySetting?: Array<{
84
+ category: string;
85
+ threshold: string;
86
+ }>;
87
+ }
88
+ export interface GeminiImageResponse {
89
+ images: Array<{
90
+ image: {
91
+ mimeType: string;
92
+ data: string;
93
+ };
94
+ }>;
95
+ }
96
+ export interface GeminiEmbedRequest {
97
+ model: string;
98
+ content: {
99
+ parts: Array<{
100
+ text: string;
101
+ }>;
102
+ };
103
+ outputDimensionality?: number;
104
+ }
105
+ export interface GeminiEmbedResponse {
106
+ embedding: {
107
+ values: number[];
108
+ };
109
+ }
110
+ export interface GeminiBatchEmbedRequest {
111
+ requests: GeminiEmbedRequest[];
112
+ }
113
+ export interface GeminiBatchEmbedResponse {
114
+ embeddings: Array<{
115
+ values: number[];
116
+ }>;
117
+ }
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,12 +1,17 @@
1
- export type ModelFamily = "dall_e" | "chatgpt4o" | "gpt41" | "gpt41_mini" | "gpt41_nano" | "gpt4" | "gpt4_turbo" | "gpt45" | "gpt35_turbo" | "gpt4o" | "gpt4o_audio" | "gpt4o_mini" | "gpt4o_mini_audio" | "gpt4o_mini_realtime" | "gpt4o_mini_transcribe" | "gpt4o_mini_tts" | "gpt4o_realtime" | "gpt4o_search" | "gpt4o_transcribe" | "gpt5" | "gpt5_mini" | "gpt5_nano" | "o1" | "o1_mini" | "o1_pro" | "o3_mini" | "babbage" | "davinci" | "embedding3_large" | "embedding3_small" | "embedding_ada" | "tts1" | "tts1_hd" | "whisper" | "moderation" | "other";
1
+ import { ModelFamilyDefinition } from "./ModelDefinitions.js";
2
2
  export declare class Capabilities {
3
- static getFamily(modelId: string): ModelFamily;
3
+ static getFamily(modelId: string): string;
4
+ static getDefinition(modelId: string): ModelFamilyDefinition;
4
5
  static getContextWindow(modelId: string): number | null;
5
6
  static getMaxOutputTokens(modelId: string): number | null;
6
7
  static supportsVision(modelId: string): boolean;
7
8
  static supportsTools(modelId: string): boolean;
8
9
  static supportsStructuredOutput(modelId: string): boolean;
9
10
  static supportsJsonMode(modelId: string): boolean;
11
+ static supportsEmbeddings(modelId: string): boolean;
12
+ static supportsImageGeneration(modelId: string): boolean;
13
+ static supportsTranscription(modelId: string): boolean;
14
+ static supportsModeration(modelId: string): boolean;
10
15
  static getInputPrice(modelId: string): number;
11
16
  static getCachedInputPrice(modelId: string): number | undefined;
12
17
  static getOutputPrice(modelId: string): number;
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Capabilities.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,WAAW,GACX,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,OAAO,GACP,aAAa,GACb,OAAO,GACP,aAAa,GACb,YAAY,GACZ,kBAAkB,GAClB,qBAAqB,GACrB,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,kBAAkB,GAClB,MAAM,GACN,WAAW,GACX,WAAW,GACX,IAAI,GACJ,SAAS,GACT,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,MAAM,GACN,SAAS,GACT,SAAS,GACT,YAAY,GACZ,OAAO,CAAC;AA4EZ,qBAAa,YAAY;IACvB,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IAS9C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA8CvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgDzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAS/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAM7C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM/D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAM9C,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM;IAS7F,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKjD,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAarC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;IAUxG,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAgB5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAmBjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;CAyBlC"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE7E,qBAAa,YAAY;IACvB,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAUzC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAK5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIvD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMtD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK7C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI/D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAK9C,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM;IAI7F,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKjD,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAarC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;IAUxG,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAqB5E,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAiBjD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM;CAyBlC"}
@@ -1,227 +1,64 @@
1
- const MODEL_PATTERNS = {
2
- dall_e: /^dall-e/,
3
- chatgpt4o: /^chatgpt-4o/,
4
- gpt41: /^gpt-4\.1(?!-(?:mini|nano))/,
5
- gpt41_mini: /^gpt-4\.1-mini/,
6
- gpt41_nano: /^gpt-4\.1-nano/,
7
- gpt4: /^gpt-4(?:-\d{6})?$/,
8
- gpt4_turbo: /^gpt-4(?:\.5)?-(?:\d{6}-)?(preview|turbo)/,
9
- gpt35_turbo: /^gpt-3\.5-turbo/,
10
- gpt4o: /^gpt-4o(?!-(?:mini|audio|realtime|transcribe|tts|search))/,
11
- gpt4o_audio: /^gpt-4o-(?:audio)/,
12
- gpt4o_mini: /^gpt-4o-mini(?!-(?:audio|realtime|transcribe|tts|search))/,
13
- gpt4o_mini_audio: /^gpt-4o-mini-audio/,
14
- gpt4o_mini_realtime: /^gpt-4o-mini-realtime/,
15
- gpt4o_mini_transcribe: /^gpt-4o-mini-transcribe/,
16
- gpt4o_mini_tts: /^gpt-4o-mini-tts/,
17
- gpt4o_realtime: /^gpt-4o-realtime/,
18
- gpt4o_search: /^gpt-4o-search/,
19
- gpt4o_transcribe: /^gpt-4o-transcribe/,
20
- gpt5: /^gpt-5/,
21
- gpt5_mini: /^gpt-5-mini/,
22
- gpt5_nano: /^gpt-5-nano/,
23
- o1: /^o1(?!-(?:mini|pro))/,
24
- o1_mini: /^o1-mini/,
25
- o1_pro: /^o1-pro/,
26
- o3_mini: /^o3-mini/,
27
- babbage: /^babbage/,
28
- davinci: /^davinci/,
29
- embedding3_large: /^text-embedding-3-large/,
30
- embedding3_small: /^text-embedding-3-small/,
31
- embedding_ada: /^text-embedding-ada/,
32
- tts1: /^tts-1(?!-hd)/,
33
- tts1_hd: /^tts-1-hd/,
34
- whisper: /^whisper/,
35
- moderation: /^(?:omni|text)-moderation/,
36
- };
37
- const PRICES = {
38
- gpt5: { input: 1.25, output: 10.0, cached_input: 0.125 },
39
- gpt5_mini: { input: 0.25, output: 2.0, cached_input: 0.025 },
40
- gpt5_nano: { input: 0.05, output: 0.4, cached_input: 0.005 },
41
- gpt41: { input: 2.0, output: 8.0, cached_input: 0.5 },
42
- gpt41_mini: { input: 0.4, output: 1.6, cached_input: 0.1 },
43
- gpt41_nano: { input: 0.1, output: 0.4 },
44
- chatgpt4o: { input: 5.0, output: 15.0 },
45
- gpt4: { input: 10.0, output: 30.0 },
46
- gpt4_turbo: { input: 10.0, output: 30.0 },
47
- gpt45: { input: 75.0, output: 150.0 },
48
- gpt35_turbo: { input: 0.5, output: 1.5 },
49
- gpt4o: { input: 2.5, output: 10.0 },
50
- gpt4o_audio: { input: 2.5, output: 10.0, audio_input: 40.0, audio_output: 80.0 },
51
- gpt4o_mini: { input: 0.15, output: 0.6 },
52
- gpt4o_mini_audio: { input: 0.15, output: 0.6, audio_input: 10.0, audio_output: 20.0 },
53
- gpt4o_mini_realtime: { input: 0.6, output: 2.4 },
54
- gpt4o_mini_transcribe: { input: 1.25, output: 5.0, audio_input: 3.0 },
55
- gpt4o_mini_tts: { input: 0.6, output: 12.0 },
56
- gpt4o_realtime: { input: 5.0, output: 20.0 },
57
- gpt4o_search: { input: 2.5, output: 10.0 },
58
- gpt4o_transcribe: { input: 2.5, output: 10.0, audio_input: 6.0 },
59
- o1: { input: 15.0, output: 60.0 },
60
- o1_mini: { input: 1.1, output: 4.4 },
61
- o1_pro: { input: 150.0, output: 600.0 },
62
- o3_mini: { input: 1.1, output: 4.4 },
63
- babbage: { input: 0.4, output: 0.4 },
64
- davinci: { input: 2.0, output: 2.0 },
65
- embedding3_large: { price: 0.13 },
66
- embedding3_small: { price: 0.02 },
67
- embedding_ada: { price: 0.10 },
68
- tts1: { price: 15.0 },
69
- tts1_hd: { price: 30.0 },
70
- whisper: { price: 0.006 },
71
- moderation: { price: 0.0 }
72
- };
1
+ import { OPENAI_MODELS } from "./ModelDefinitions.js";
73
2
  export class Capabilities {
74
3
  static getFamily(modelId) {
75
- for (const [family, pattern] of Object.entries(MODEL_PATTERNS)) {
76
- if (pattern.test(modelId)) {
77
- return family;
4
+ for (const [key, def] of Object.entries(OPENAI_MODELS)) {
5
+ if (key === "other")
6
+ continue;
7
+ if (def.pattern.test(modelId)) {
8
+ return key;
78
9
  }
79
10
  }
80
11
  return "other";
81
12
  }
82
- static getContextWindow(modelId) {
13
+ static getDefinition(modelId) {
83
14
  const family = this.getFamily(modelId);
84
- switch (family) {
85
- case "gpt41":
86
- case "gpt41_mini":
87
- case "gpt41_nano":
88
- return 1_047_576;
89
- case "gpt5":
90
- case "gpt5_mini":
91
- case "gpt5_nano":
92
- case "chatgpt4o":
93
- case "gpt4_turbo":
94
- case "gpt4o":
95
- case "gpt4o_audio":
96
- case "gpt4o_mini":
97
- case "gpt4o_mini_audio":
98
- case "gpt4o_mini_realtime":
99
- case "gpt4o_realtime":
100
- case "gpt4o_search":
101
- case "gpt4o_transcribe":
102
- case "o1_mini":
103
- return 128_000;
104
- case "gpt4":
105
- return 8_192;
106
- case "gpt4o_mini_transcribe":
107
- return 16_000;
108
- case "o1":
109
- case "o1_pro":
110
- case "o3_mini":
111
- return 200_000;
112
- case "gpt35_turbo":
113
- return 16_385;
114
- case "gpt4o_mini_tts":
115
- case "tts1":
116
- case "tts1_hd":
117
- case "whisper":
118
- case "moderation":
119
- case "embedding3_large":
120
- case "embedding3_small":
121
- case "embedding_ada":
122
- return null;
123
- default:
124
- return 4_096;
125
- }
15
+ return OPENAI_MODELS[family];
16
+ }
17
+ static getContextWindow(modelId) {
18
+ return this.getDefinition(modelId).contextWindow;
126
19
  }
127
20
  static getMaxOutputTokens(modelId) {
128
- const family = this.getFamily(modelId);
129
- switch (family) {
130
- case "gpt5":
131
- case "gpt5_mini":
132
- case "gpt5_nano":
133
- return 400_000;
134
- case "gpt41":
135
- case "gpt41_mini":
136
- case "gpt41_nano":
137
- return 32_768;
138
- case "chatgpt4o":
139
- case "gpt4o":
140
- case "gpt4o_mini":
141
- return 16_384;
142
- case "babbage":
143
- case "davinci":
144
- return 16_384;
145
- case "gpt4":
146
- return 8_192;
147
- case "gpt35_turbo":
148
- return 4_096;
149
- case "gpt4_turbo":
150
- case "gpt4o_realtime":
151
- case "gpt4o_mini_realtime":
152
- return 4_096;
153
- case "gpt4o_mini_transcribe":
154
- return 2_000;
155
- case "o1":
156
- case "o1_pro":
157
- case "o3_mini":
158
- return 100_000;
159
- case "o1_mini":
160
- return 65_536;
161
- case "gpt4o_mini_tts":
162
- case "tts1":
163
- case "tts1_hd":
164
- case "whisper":
165
- case "moderation":
166
- case "embedding3_large":
167
- case "embedding3_small":
168
- case "embedding_ada":
169
- return null;
170
- default:
171
- return 16_384;
172
- }
21
+ return this.getDefinition(modelId).maxOutputTokens;
173
22
  }
174
23
  static supportsVision(modelId) {
175
- const family = this.getFamily(modelId);
176
- return [
177
- "gpt5", "gpt5_mini", "gpt5_nano", "gpt41", "gpt41_mini", "gpt41_nano",
178
- "chatgpt4o", "gpt4", "gpt4_turbo", "gpt4o", "gpt4o_mini", "o1", "o1_pro",
179
- "moderation", "gpt4o_search", "gpt4o_mini_search"
180
- ].includes(family);
24
+ return !!this.getDefinition(modelId).features.vision;
181
25
  }
182
26
  static supportsTools(modelId) {
183
- const family = this.getFamily(modelId);
184
- return [
185
- "gpt5", "gpt5_mini", "gpt5_nano", "gpt41", "gpt41_mini", "gpt41_nano",
186
- "gpt4", "gpt4_turbo", "gpt4o", "gpt4o_mini", "o1", "o1_pro", "o3_mini"
187
- ].includes(family);
27
+ return !!this.getDefinition(modelId).features.tools;
188
28
  }
189
29
  static supportsStructuredOutput(modelId) {
190
- const family = this.getFamily(modelId);
191
- return [
192
- "gpt5", "gpt5_mini", "gpt5_nano", "gpt41", "gpt41_mini", "gpt41_nano",
193
- "chatgpt4o", "gpt4o", "gpt4o_mini", "o1", "o1_pro", "o3_mini"
194
- ].includes(family);
30
+ return !!this.getDefinition(modelId).features.structuredOutput;
195
31
  }
196
32
  static supportsJsonMode(modelId) {
197
33
  return this.supportsStructuredOutput(modelId);
198
34
  }
35
+ static supportsEmbeddings(modelId) {
36
+ return this.getDefinition(modelId).type === "embedding";
37
+ }
38
+ static supportsImageGeneration(modelId) {
39
+ return this.getDefinition(modelId).type === "image";
40
+ }
41
+ static supportsTranscription(modelId) {
42
+ // Transcription is supported by audio models or specific models like gpt-4o-audio
43
+ const def = this.getDefinition(modelId);
44
+ return def.type === "audio" || (def.type === "chat" && /audio|transcribe/.test(modelId));
45
+ }
46
+ static supportsModeration(modelId) {
47
+ return this.getDefinition(modelId).type === "moderation";
48
+ }
199
49
  static getInputPrice(modelId) {
200
- const family = this.getFamily(modelId);
201
- const prices = PRICES[family] || { input: 0.5 };
50
+ const prices = this.getDefinition(modelId).pricing;
202
51
  return prices.input || prices.price || 0.5;
203
52
  }
204
53
  static getCachedInputPrice(modelId) {
205
- const family = this.getFamily(modelId);
206
- const prices = PRICES[family] || {};
207
- return prices.cached_input;
54
+ return this.getDefinition(modelId).pricing.cached_input;
208
55
  }
209
56
  static getOutputPrice(modelId) {
210
- const family = this.getFamily(modelId);
211
- const prices = PRICES[family] || { output: 1.5 };
57
+ const prices = this.getDefinition(modelId).pricing;
212
58
  return prices.output || prices.price || 1.5;
213
59
  }
214
60
  static getModelType(modelId) {
215
- const family = this.getFamily(modelId);
216
- if (/embedding/.test(family))
217
- return "embedding";
218
- if (/^tts|whisper|gpt4o_(?:mini_)?(?:transcribe|tts)$/.test(family))
219
- return "audio";
220
- if (family === "moderation")
221
- return "moderation";
222
- if (/dall/.test(family))
223
- return "image";
224
- return "chat";
61
+ return this.getDefinition(modelId).type;
225
62
  }
226
63
  static formatDisplayName(modelId) {
227
64
  const humanized = modelId.replace(/-/g, " ").split(" ").map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(" ");
@@ -258,43 +95,44 @@ export class Capabilities {
258
95
  return temperature;
259
96
  }
260
97
  static getModalities(modelId) {
98
+ const type = this.getModelType(modelId);
99
+ const features = this.getDefinition(modelId).features;
261
100
  const modalities = {
262
101
  input: ["text"],
263
102
  output: ["text"]
264
103
  };
265
- if (this.supportsVision(modelId))
104
+ if (features.vision)
266
105
  modalities.input.push("image", "pdf");
267
- if (/whisper|audio|tts|transcribe/.test(modelId))
106
+ if (type === "audio") {
268
107
  modalities.input.push("audio");
269
- if (/tts|audio/.test(modelId))
270
108
  modalities.output.push("audio");
271
- if (/dall-e|image/.test(modelId))
109
+ }
110
+ if (type === "image")
272
111
  modalities.output.push("image");
273
- if (/embedding/.test(modelId))
112
+ if (type === "embedding")
274
113
  modalities.output.push("embeddings");
275
- if (/moderation/.test(modelId))
114
+ if (type === "moderation")
276
115
  modalities.output.push("moderation");
277
116
  return modalities;
278
117
  }
279
118
  static getCapabilities(modelId) {
280
119
  const capabilities = [];
281
- if (!/moderation|embedding/.test(modelId))
120
+ const type = this.getModelType(modelId);
121
+ const features = this.getDefinition(modelId).features;
122
+ if (type !== "moderation" && type !== "embedding")
282
123
  capabilities.push("streaming");
283
- if (this.supportsTools(modelId))
124
+ if (features.tools)
284
125
  capabilities.push("function_calling");
285
- if (this.supportsStructuredOutput(modelId))
126
+ if (features.structuredOutput)
286
127
  capabilities.push("structured_output");
287
- if (/embedding|batch/.test(modelId))
128
+ if (type === "embedding")
288
129
  capabilities.push("batch");
289
130
  if (/o\d|gpt-5|codex/.test(modelId))
290
131
  capabilities.push("reasoning");
291
- if (/gpt-4-turbo|gpt-4o/.test(modelId)) {
292
- if (/vision/.test(modelId))
293
- capabilities.push("image_generation");
294
- if (/audio/.test(modelId)) {
295
- capabilities.push("speech_generation", "transcription");
296
- }
297
- }
132
+ if (type === "image")
133
+ capabilities.push("image_generation");
134
+ if (type === "audio")
135
+ capabilities.push("speech_generation", "transcription");
298
136
  return capabilities;
299
137
  }
300
138
  static getPricing(modelId) {
@@ -311,7 +149,7 @@ export class Capabilities {
311
149
  }
312
150
  }
313
151
  };
314
- if (/embedding|batch/.test(modelId)) {
152
+ if (this.getModelType(modelId) === "embedding") {
315
153
  pricing.text_tokens.batch = {
316
154
  input_per_million: standardPricing.input_per_million * 0.5,
317
155
  output_per_million: standardPricing.output_per_million * 0.5
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK3D,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAxC,OAAO,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM;IAEvE,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAsD3D"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK3D,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAxC,OAAO,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM;IAEvE,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CA0D3D"}
@@ -24,6 +24,9 @@ export class OpenAIChat {
24
24
  if (request.tools) {
25
25
  body.tools = request.tools;
26
26
  }
27
+ if (request.response_format) {
28
+ body.response_format = request.response_format;
29
+ }
27
30
  const response = await fetch(`${this.baseUrl}/chat/completions`, {
28
31
  method: "POST",
29
32
  headers: {
@@ -0,0 +1,8 @@
1
+ import { EmbeddingRequest, EmbeddingResponse } from "../Embedding.js";
2
+ export declare class OpenAIEmbedding {
3
+ private readonly baseUrl;
4
+ private readonly apiKey;
5
+ constructor(baseUrl: string, apiKey: string);
6
+ execute(request: EmbeddingRequest): Promise<EmbeddingResponse>;
7
+ }
8
+ //# sourceMappingURL=Embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Embedding.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Embedding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAKtE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA8CrE"}
@@ -0,0 +1,48 @@
1
+ import { handleOpenAIError } from "./Errors.js";
2
+ import { Capabilities } from "./Capabilities.js";
3
+ import { DEFAULT_MODELS } from "../../constants.js";
4
+ export class OpenAIEmbedding {
5
+ baseUrl;
6
+ apiKey;
7
+ constructor(baseUrl, apiKey) {
8
+ this.baseUrl = baseUrl;
9
+ this.apiKey = apiKey;
10
+ }
11
+ async execute(request) {
12
+ const model = request.model || DEFAULT_MODELS.EMBEDDING;
13
+ // Validate that the model is an embedding model
14
+ if (Capabilities.getModelType(model) !== "embedding") {
15
+ throw new Error(`Model ${model} does not support embeddings.`);
16
+ }
17
+ const body = {
18
+ input: request.input,
19
+ model,
20
+ };
21
+ if (request.dimensions) {
22
+ body.dimensions = request.dimensions;
23
+ }
24
+ if (request.user) {
25
+ body.user = request.user;
26
+ }
27
+ const response = await fetch(`${this.baseUrl}/embeddings`, {
28
+ method: "POST",
29
+ headers: {
30
+ "Authorization": `Bearer ${this.apiKey}`,
31
+ "Content-Type": "application/json",
32
+ },
33
+ body: JSON.stringify(body),
34
+ });
35
+ if (!response.ok) {
36
+ await handleOpenAIError(response, request.model || DEFAULT_MODELS.EMBEDDING);
37
+ }
38
+ const json = await response.json();
39
+ // Extract vectors from the response
40
+ const vectors = json.data.map((item) => item.embedding);
41
+ return {
42
+ vectors,
43
+ model: json.model,
44
+ input_tokens: json.usage.prompt_tokens,
45
+ dimensions: vectors[0]?.length || 0,
46
+ };
47
+ }
48
+ }
@@ -0,0 +1,25 @@
1
+ export interface ModelPricing {
2
+ input?: number;
3
+ output?: number;
4
+ price?: number;
5
+ cached_input?: number;
6
+ audio_input?: number;
7
+ audio_output?: number;
8
+ }
9
+ export interface ModelFeatures {
10
+ vision?: boolean;
11
+ tools?: boolean;
12
+ structuredOutput?: boolean;
13
+ jsonMode?: boolean;
14
+ }
15
+ export type ModelType = "chat" | "embedding" | "audio" | "image" | "moderation";
16
+ export interface ModelFamilyDefinition {
17
+ pattern: RegExp;
18
+ contextWindow: number | null;
19
+ maxOutputTokens: number | null;
20
+ pricing: ModelPricing;
21
+ features: ModelFeatures;
22
+ type: ModelType;
23
+ }
24
+ export declare const OPENAI_MODELS: Record<string, ModelFamilyDefinition>;
25
+ //# sourceMappingURL=ModelDefinitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelDefinitions.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/ModelDefinitions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAkN/D,CAAC"}