@luanpoppe/ai 1.1.4 → 1.1.6

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 (151) hide show
  1. package/.env.example +13 -1
  2. package/README.md +795 -0
  3. package/dist/@types/embedding-model-names.d.ts +11 -0
  4. package/dist/@types/embedding-model-names.d.ts.map +1 -0
  5. package/dist/@types/embedding-model-names.js +3 -0
  6. package/dist/@types/embedding-model-names.js.map +1 -0
  7. package/dist/@types/model-names.d.ts +21 -5
  8. package/dist/@types/model-names.d.ts.map +1 -1
  9. package/dist/@types/openrouter-provider.d.ts +25 -0
  10. package/dist/@types/openrouter-provider.d.ts.map +1 -0
  11. package/dist/@types/openrouter-provider.js +3 -0
  12. package/dist/@types/openrouter-provider.js.map +1 -0
  13. package/dist/ai.d.ts +7 -0
  14. package/dist/ai.d.ts.map +1 -1
  15. package/dist/ai.js +56 -5
  16. package/dist/ai.js.map +1 -1
  17. package/dist/audio/gemini-transcription.d.ts +4 -0
  18. package/dist/audio/gemini-transcription.d.ts.map +1 -0
  19. package/dist/audio/gemini-transcription.js +37 -0
  20. package/dist/audio/gemini-transcription.js.map +1 -0
  21. package/dist/audio/index.d.ts +33 -0
  22. package/dist/audio/index.d.ts.map +1 -0
  23. package/dist/audio/index.js +43 -0
  24. package/dist/audio/index.js.map +1 -0
  25. package/dist/audio/openrouter-client.d.ts +2 -0
  26. package/dist/audio/openrouter-client.d.ts.map +1 -0
  27. package/dist/audio/openrouter-client.js +7 -0
  28. package/dist/audio/openrouter-client.js.map +1 -0
  29. package/dist/audio/speech-openai.d.ts +4 -0
  30. package/dist/audio/speech-openai.d.ts.map +1 -0
  31. package/dist/audio/speech-openai.js +65 -0
  32. package/dist/audio/speech-openai.js.map +1 -0
  33. package/dist/audio/speech-openrouter.d.ts +4 -0
  34. package/dist/audio/speech-openrouter.d.ts.map +1 -0
  35. package/dist/audio/speech-openrouter.js +89 -0
  36. package/dist/audio/speech-openrouter.js.map +1 -0
  37. package/dist/audio/transcription-openai.d.ts +11 -0
  38. package/dist/audio/transcription-openai.d.ts.map +1 -0
  39. package/dist/audio/transcription-openai.js +204 -0
  40. package/dist/audio/transcription-openai.js.map +1 -0
  41. package/dist/audio/transcription-openrouter.d.ts +4 -0
  42. package/dist/audio/transcription-openrouter.d.ts.map +1 -0
  43. package/dist/audio/transcription-openrouter.js +44 -0
  44. package/dist/audio/transcription-openrouter.js.map +1 -0
  45. package/dist/audio/types.d.ts +92 -0
  46. package/dist/audio/types.d.ts.map +1 -0
  47. package/dist/audio/types.js +6 -0
  48. package/dist/audio/types.js.map +1 -0
  49. package/dist/audio/utils.d.ts +5 -0
  50. package/dist/audio/utils.d.ts.map +1 -0
  51. package/dist/audio/utils.js +25 -0
  52. package/dist/audio/utils.js.map +1 -0
  53. package/dist/embeddings/embed-gemini.d.ts +3 -0
  54. package/dist/embeddings/embed-gemini.d.ts.map +1 -0
  55. package/dist/embeddings/embed-gemini.js +38 -0
  56. package/dist/embeddings/embed-gemini.js.map +1 -0
  57. package/dist/embeddings/embed-openai.d.ts +3 -0
  58. package/dist/embeddings/embed-openai.d.ts.map +1 -0
  59. package/dist/embeddings/embed-openai.js +44 -0
  60. package/dist/embeddings/embed-openai.js.map +1 -0
  61. package/dist/embeddings/embed-openrouter.d.ts +3 -0
  62. package/dist/embeddings/embed-openrouter.d.ts.map +1 -0
  63. package/dist/embeddings/embed-openrouter.js +47 -0
  64. package/dist/embeddings/embed-openrouter.js.map +1 -0
  65. package/dist/embeddings/index.d.ts +19 -0
  66. package/dist/embeddings/index.d.ts.map +1 -0
  67. package/dist/embeddings/index.js +36 -0
  68. package/dist/embeddings/index.js.map +1 -0
  69. package/dist/embeddings/route.d.ts +12 -0
  70. package/dist/embeddings/route.d.ts.map +1 -0
  71. package/dist/embeddings/route.js +42 -0
  72. package/dist/embeddings/route.js.map +1 -0
  73. package/dist/embeddings/types.d.ts +37 -0
  74. package/dist/embeddings/types.d.ts.map +1 -0
  75. package/dist/embeddings/types.js +6 -0
  76. package/dist/embeddings/types.js.map +1 -0
  77. package/dist/embeddings/utils.d.ts +6 -0
  78. package/dist/embeddings/utils.d.ts.map +1 -0
  79. package/dist/embeddings/utils.js +25 -0
  80. package/dist/embeddings/utils.js.map +1 -0
  81. package/dist/index.d.ts +12 -2
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +16 -3
  84. package/dist/index.js.map +1 -1
  85. package/dist/langchain/audio-transcription.d.ts +8 -13
  86. package/dist/langchain/audio-transcription.d.ts.map +1 -1
  87. package/dist/langchain/audio-transcription.js +8 -92
  88. package/dist/langchain/audio-transcription.js.map +1 -1
  89. package/dist/langchain/messages.d.ts +6 -1
  90. package/dist/langchain/messages.d.ts.map +1 -1
  91. package/dist/langchain/messages.js +35 -7
  92. package/dist/langchain/messages.js.map +1 -1
  93. package/dist/langchain/models.d.ts +38 -0
  94. package/dist/langchain/models.d.ts.map +1 -1
  95. package/dist/langchain/models.js +63 -4
  96. package/dist/langchain/models.js.map +1 -1
  97. package/dist/langchain/structured-output.d.ts +9 -0
  98. package/dist/langchain/structured-output.d.ts.map +1 -0
  99. package/dist/langchain/structured-output.js +70 -0
  100. package/dist/langchain/structured-output.js.map +1 -0
  101. package/dist/langchain/tools.d.ts +1 -1
  102. package/dist/utils/openrouter-client.d.ts +4 -0
  103. package/dist/utils/openrouter-client.d.ts.map +1 -0
  104. package/dist/utils/openrouter-client.js +16 -0
  105. package/dist/utils/openrouter-client.js.map +1 -0
  106. package/docs/LANGCHAIN_WHISPER_WINDOWS_BUG.md +2 -0
  107. package/package.json +4 -4
  108. package/src/@types/embedding-model-names.ts +36 -0
  109. package/src/@types/model-names.ts +104 -6
  110. package/src/@types/openrouter-provider.ts +27 -0
  111. package/src/ai.ts +89 -10
  112. package/src/audio/gemini-transcription.ts +47 -0
  113. package/src/audio/index.ts +101 -0
  114. package/src/audio/openrouter-client.ts +4 -0
  115. package/src/audio/speech-openai.ts +79 -0
  116. package/src/audio/speech-openrouter.ts +121 -0
  117. package/src/audio/transcription-openai.ts +259 -0
  118. package/src/audio/transcription-openrouter.ts +59 -0
  119. package/src/audio/types.ts +127 -0
  120. package/src/audio/utils.ts +20 -0
  121. package/src/embeddings/embed-gemini.ts +54 -0
  122. package/src/embeddings/embed-openai.ts +53 -0
  123. package/src/embeddings/embed-openrouter.ts +64 -0
  124. package/src/embeddings/index.ts +83 -0
  125. package/src/embeddings/route.ts +62 -0
  126. package/src/embeddings/types.ts +53 -0
  127. package/src/embeddings/utils.ts +21 -0
  128. package/src/index.ts +52 -5
  129. package/src/langchain/audio-transcription.ts +19 -90
  130. package/src/langchain/messages.ts +84 -12
  131. package/src/langchain/models.ts +130 -3
  132. package/src/langchain/structured-output.ts +77 -0
  133. package/src/utils/openrouter-client.ts +10 -0
  134. package/tests/e2e/README.md +53 -0
  135. package/tests/e2e/ai-audio-multiprovider.test.ts +118 -0
  136. package/tests/e2e/ai-deepseek-structured-output.test.ts +133 -0
  137. package/tests/e2e/ai-embeddings.test.ts +87 -0
  138. package/tests/e2e/ai-local-models.test.ts +65 -0
  139. package/tests/unit/audio/index.test.ts +17 -0
  140. package/tests/unit/audio/speech-openai.test.ts +74 -0
  141. package/tests/unit/audio/speech-openrouter.test.ts +88 -0
  142. package/tests/unit/audio/transcription-openai.test.ts +130 -0
  143. package/tests/unit/audio/transcription-openrouter.test.ts +82 -0
  144. package/tests/unit/embeddings/embed-gemini.test.ts +52 -0
  145. package/tests/unit/embeddings/embed-openai.test.ts +68 -0
  146. package/tests/unit/embeddings/embed-openrouter.test.ts +62 -0
  147. package/tests/unit/embeddings/index.test.ts +55 -0
  148. package/tests/unit/index.test.ts +209 -0
  149. package/tests/unit/langchain/messages.test.ts +37 -0
  150. package/tests/unit/langchain/models.test.ts +223 -1
  151. package/tests/unit/langchain/structured-output.test.ts +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-openrouter.js","sourceRoot":"","sources":["../../src/audio/speech-openrouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AudioBuffer } from "../@types/audio";
2
+ import type { OpenAITranscriptionDetailed, OpenAITranscriptionOptions } from "./types";
3
+ export declare function transcribeDetailedOpenAI(audioBuffer: AudioBuffer, options?: OpenAITranscriptionOptions, openAIApiKey?: string): Promise<OpenAITranscriptionDetailed>;
4
+ export declare function transcribeWithWhisperOpenAI(audioBuffer: AudioBuffer, options?: OpenAITranscriptionOptions, openAIApiKey?: string): Promise<string>;
5
+ export declare function transcribeToSrtOpenAI(audioBuffer: AudioBuffer, options?: Omit<OpenAITranscriptionOptions, "responseFormat">, openAIApiKey?: string): Promise<string>;
6
+ export declare function transcribeToVttOpenAI(audioBuffer: AudioBuffer, options?: Omit<OpenAITranscriptionOptions, "responseFormat">, openAIApiKey?: string): Promise<string>;
7
+ export declare function transcribeDiarizedOpenAI(audioBuffer: AudioBuffer, options?: Omit<OpenAITranscriptionOptions, "model" | "responseFormat">, openAIApiKey?: string): Promise<OpenAITranscriptionDetailed>;
8
+ export declare function translateOpenAI(audioBuffer: AudioBuffer, options?: Omit<OpenAITranscriptionOptions, "responseFormat">, openAIApiKey?: string): Promise<string>;
9
+ export declare function transcribeFileDetailedOpenAI(filePath: string, options?: OpenAITranscriptionOptions, openAIApiKey?: string): Promise<OpenAITranscriptionDetailed>;
10
+ export declare function transcribeFileWithWhisperOpenAI(filePath: string, options?: OpenAITranscriptionOptions, openAIApiKey?: string): Promise<string>;
11
+ //# sourceMappingURL=transcription-openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-openai.d.ts","sourceRoot":"","sources":["../../src/audio/transcription-openai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAI3B,MAAM,SAAS,CAAC;AA4GjB,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,0BAA+B,EACxC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,2BAA2B,CAAC,CA4BtC;AAED,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,0BAA+B,EACxC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,CAAM,EAChE,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,CAAM,EAChE,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,OAAO,GAAG,gBAAgB,CAAM,EAC1E,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,2BAA2B,CAAC,CAWtC;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,CAAM,EAChE,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAA+B,EACxC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,2BAA2B,CAAC,CAYtC;AAED,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAA+B,EACxC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAOjB"}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.transcribeDetailedOpenAI = transcribeDetailedOpenAI;
40
+ exports.transcribeWithWhisperOpenAI = transcribeWithWhisperOpenAI;
41
+ exports.transcribeToSrtOpenAI = transcribeToSrtOpenAI;
42
+ exports.transcribeToVttOpenAI = transcribeToVttOpenAI;
43
+ exports.transcribeDiarizedOpenAI = transcribeDiarizedOpenAI;
44
+ exports.translateOpenAI = translateOpenAI;
45
+ exports.transcribeFileDetailedOpenAI = transcribeFileDetailedOpenAI;
46
+ exports.transcribeFileWithWhisperOpenAI = transcribeFileWithWhisperOpenAI;
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const openai_1 = __importDefault(require("openai"));
50
+ const openai_2 = require("openai");
51
+ const utils_1 = require("./utils");
52
+ function createOpenAIClient(apiKey) {
53
+ if (apiKey) {
54
+ return new openai_1.default({ apiKey });
55
+ }
56
+ return new openai_1.default();
57
+ }
58
+ async function createAudioFile(audioBuffer, format) {
59
+ const buffer = (0, utils_1.toAudioBuffer)(audioBuffer);
60
+ const extension = (0, utils_1.getAudioExtension)(format);
61
+ const fileName = `whisper-${Date.now()}.${extension}`;
62
+ return (0, openai_2.toFile)(buffer, fileName);
63
+ }
64
+ function validateTranscriptionOptions(options) {
65
+ const model = options.model ?? "whisper-1";
66
+ const format = options.responseFormat ?? "text";
67
+ if (options.timestampGranularities?.length &&
68
+ (model !== "whisper-1" || format !== "verbose_json")) {
69
+ throw new Error("[@luanpoppe/ai] timestampGranularities só é suportado com model whisper-1 e responseFormat verbose_json.");
70
+ }
71
+ if (model === "gpt-4o-transcribe-diarize" && format === "diarized_json") {
72
+ if (!options.chunkingStrategy) {
73
+ options.chunkingStrategy = "auto";
74
+ }
75
+ }
76
+ }
77
+ function mapVerboseResponse(response) {
78
+ const words = Array.isArray(response.words)
79
+ ? response.words
80
+ : undefined;
81
+ const segments = Array.isArray(response.segments)
82
+ ? response.segments
83
+ : undefined;
84
+ const detailed = {
85
+ text: String(response.text ?? ""),
86
+ };
87
+ if (typeof response.language === "string") {
88
+ detailed.language = response.language;
89
+ }
90
+ if (typeof response.duration === "number") {
91
+ detailed.duration = response.duration;
92
+ }
93
+ if (words)
94
+ detailed.words = words;
95
+ if (segments)
96
+ detailed.segments = segments;
97
+ return detailed;
98
+ }
99
+ function mapDiarizedResponse(response) {
100
+ const segments = Array.isArray(response.segments)
101
+ ? response.segments
102
+ : [];
103
+ const speakers = segments.map((seg) => ({
104
+ speaker: String(seg.speaker ?? "unknown"),
105
+ start: Number(seg.start ?? 0),
106
+ end: Number(seg.end ?? 0),
107
+ text: String(seg.text ?? ""),
108
+ }));
109
+ return {
110
+ text: String(response.text ?? speakers.map((s) => s.text).join(" ")),
111
+ speakers,
112
+ segments: speakers.map((s, id) => ({
113
+ id,
114
+ start: s.start,
115
+ end: s.end,
116
+ text: s.text,
117
+ })),
118
+ };
119
+ }
120
+ function mapTranscriptionResponse(response, responseFormat) {
121
+ if (typeof response === "string") {
122
+ return { text: response };
123
+ }
124
+ const obj = response;
125
+ if (responseFormat === "diarized_json") {
126
+ return mapDiarizedResponse(obj);
127
+ }
128
+ if (responseFormat === "verbose_json") {
129
+ return mapVerboseResponse(obj);
130
+ }
131
+ return { text: String(obj.text ?? "") };
132
+ }
133
+ async function transcribeDetailedOpenAI(audioBuffer, options = {}, openAIApiKey) {
134
+ validateTranscriptionOptions(options);
135
+ const openai = createOpenAIClient(openAIApiKey);
136
+ const file = await createAudioFile(audioBuffer, options.format);
137
+ const responseFormat = options.responseFormat ?? "verbose_json";
138
+ const model = options.model ?? "whisper-1";
139
+ const params = {
140
+ file,
141
+ model,
142
+ response_format: responseFormat,
143
+ };
144
+ if (options.languageIn2Digits)
145
+ params.language = options.languageIn2Digits;
146
+ if (options.prompt)
147
+ params.prompt = options.prompt;
148
+ if (options.temperature !== undefined)
149
+ params.temperature = options.temperature;
150
+ if (options.timestampGranularities) {
151
+ params.timestamp_granularities = options.timestampGranularities;
152
+ }
153
+ if (options.chunkingStrategy) {
154
+ params.chunking_strategy = options.chunkingStrategy;
155
+ }
156
+ const response = await openai.audio.transcriptions.create(params);
157
+ return mapTranscriptionResponse(response, responseFormat);
158
+ }
159
+ async function transcribeWithWhisperOpenAI(audioBuffer, options = {}, openAIApiKey) {
160
+ const detailed = await transcribeDetailedOpenAI(audioBuffer, { ...options, responseFormat: options.responseFormat ?? "text" }, openAIApiKey);
161
+ return detailed.text;
162
+ }
163
+ async function transcribeToSrtOpenAI(audioBuffer, options = {}, openAIApiKey) {
164
+ const detailed = await transcribeDetailedOpenAI(audioBuffer, { ...options, model: options.model ?? "whisper-1", responseFormat: "srt" }, openAIApiKey);
165
+ return detailed.text;
166
+ }
167
+ async function transcribeToVttOpenAI(audioBuffer, options = {}, openAIApiKey) {
168
+ const detailed = await transcribeDetailedOpenAI(audioBuffer, { ...options, model: options.model ?? "whisper-1", responseFormat: "vtt" }, openAIApiKey);
169
+ return detailed.text;
170
+ }
171
+ async function transcribeDiarizedOpenAI(audioBuffer, options = {}, openAIApiKey) {
172
+ return transcribeDetailedOpenAI(audioBuffer, {
173
+ ...options,
174
+ model: "gpt-4o-transcribe-diarize",
175
+ responseFormat: "diarized_json",
176
+ chunkingStrategy: options.chunkingStrategy ?? "auto",
177
+ }, openAIApiKey);
178
+ }
179
+ async function translateOpenAI(audioBuffer, options = {}, openAIApiKey) {
180
+ const openai = createOpenAIClient(openAIApiKey);
181
+ const file = await createAudioFile(audioBuffer, options.format);
182
+ const response = await openai.audio.translations.create({
183
+ file,
184
+ model: "whisper-1",
185
+ ...(options.prompt ? { prompt: options.prompt } : {}),
186
+ ...(options.temperature !== undefined
187
+ ? { temperature: options.temperature }
188
+ : {}),
189
+ });
190
+ return typeof response === "string" ? response : response.text;
191
+ }
192
+ async function transcribeFileDetailedOpenAI(filePath, options = {}, openAIApiKey) {
193
+ if (!fs.existsSync(filePath)) {
194
+ throw new Error(`Arquivo não encontrado: ${filePath}`);
195
+ }
196
+ const audioBuffer = fs.readFileSync(filePath);
197
+ const format = options.format ?? (path.extname(filePath).replace(/^\./, "") || "mp3");
198
+ return transcribeDetailedOpenAI(audioBuffer, { ...options, format }, openAIApiKey);
199
+ }
200
+ async function transcribeFileWithWhisperOpenAI(filePath, options = {}, openAIApiKey) {
201
+ const detailed = await transcribeFileDetailedOpenAI(filePath, options, openAIApiKey);
202
+ return detailed.text;
203
+ }
204
+ //# sourceMappingURL=transcription-openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-openai.js","sourceRoot":"","sources":["../../src/audio/transcription-openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AudioBuffer } from "../@types/audio";
2
+ import type { OpenRouterTranscriptionOptions, OpenRouterTranscriptionResult } from "./types";
3
+ export declare function transcribeOpenRouter(audioBuffer: AudioBuffer, options: OpenRouterTranscriptionOptions, openRouterApiKey?: string): Promise<OpenRouterTranscriptionResult>;
4
+ //# sourceMappingURL=transcription-openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-openrouter.d.ts","sourceRoot":"","sources":["../../src/audio/transcription-openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EACV,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AAMjB,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,8BAA8B,EACvC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,6BAA6B,CAAC,CA2CxC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transcribeOpenRouter = transcribeOpenRouter;
4
+ const models_1 = require("../langchain/models");
5
+ const utils_1 = require("./utils");
6
+ const OPENROUTER_TRANSCRIPTIONS_URL = "https://openrouter.ai/api/v1/audio/transcriptions";
7
+ async function transcribeOpenRouter(audioBuffer, options, openRouterApiKey) {
8
+ if (!openRouterApiKey) {
9
+ throw new Error("OpenRouter API key is not passed in the transcription parameters");
10
+ }
11
+ const format = (0, utils_1.getAudioExtension)(options.format);
12
+ const provider = (0, models_1.resolveOpenRouterProvider)(options.model, {
13
+ openRouterProvider: options.openRouterProvider,
14
+ openRouterAllowAllProviders: options.openRouterAllowAllProviders,
15
+ });
16
+ const body = {
17
+ model: options.model,
18
+ input_audio: {
19
+ data: (0, utils_1.bufferToBase64)(audioBuffer),
20
+ format,
21
+ },
22
+ };
23
+ if (options.language)
24
+ body.language = options.language;
25
+ if (options.temperature !== undefined)
26
+ body.temperature = options.temperature;
27
+ if (provider)
28
+ body.provider = provider;
29
+ const response = await fetch(OPENROUTER_TRANSCRIPTIONS_URL, {
30
+ method: "POST",
31
+ headers: {
32
+ Authorization: `Bearer ${openRouterApiKey}`,
33
+ "Content-Type": "application/json",
34
+ },
35
+ body: JSON.stringify(body),
36
+ });
37
+ if (!response.ok) {
38
+ const errText = await response.text();
39
+ throw new Error(`[@luanpoppe/ai] OpenRouter STT falhou (${response.status}): ${errText}`);
40
+ }
41
+ const data = (await response.json());
42
+ return data;
43
+ }
44
+ //# sourceMappingURL=transcription-openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcription-openrouter.js","sourceRoot":"","sources":["../../src/audio/transcription-openrouter.ts"],"names":[],"mappings":";;AAWA,oDA+CC;AAzDD,gDAAgE;AAKhE,mCAA4D;AAE5D,MAAM,6BAA6B,GACjC,mDAAmD,CAAC;AAE/C,KAAK,UAAU,oBAAoB,CACxC,WAAwB,EACxB,OAAuC,EACvC,gBAAyB;IAEzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,yBAAiB,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAA,kCAAyB,EAAC,OAAO,CAAC,KAAK,EAAE;QACxD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;KACjE,CAAC,CAAC;IAEH,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE;YACX,IAAI,EAAE,IAAA,sBAAc,EAAC,WAAW,CAAC;YACjC,MAAM;SACP;KACF,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACvD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAC9E,IAAI,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,6BAA6B,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,gBAAgB,EAAE;YAC3C,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,0CAA0C,QAAQ,CAAC,MAAM,MAAM,OAAO,EAAE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkC,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,92 @@
1
+ import type { AudioMimeType } from "../@types/audio";
2
+ import type { OpenRouterProviderPreferences } from "../@types/openrouter-provider";
3
+ export type WhisperModel = "whisper-1" | "gpt-4o-transcribe" | "gpt-4o-mini-transcribe" | "gpt-4o-mini-transcribe-2025-12-15" | "gpt-4o-transcribe-diarize";
4
+ export type OpenAITranscriptionResponseFormat = "json" | "text" | "srt" | "verbose_json" | "vtt" | "diarized_json";
5
+ export type OpenAITranscriptionOptions = {
6
+ model?: WhisperModel;
7
+ languageIn2Digits?: string;
8
+ prompt?: string;
9
+ responseFormat?: OpenAITranscriptionResponseFormat;
10
+ temperature?: number;
11
+ timestampGranularities?: ("word" | "segment")[];
12
+ format?: string | AudioMimeType;
13
+ /** Obrigatório para `gpt-4o-transcribe-diarize` em áudio > 30s */
14
+ chunkingStrategy?: "auto" | {
15
+ type: "server_vad";
16
+ };
17
+ };
18
+ export type TranscriptionWord = {
19
+ word: string;
20
+ start: number;
21
+ end: number;
22
+ };
23
+ export type TranscriptionSegment = {
24
+ id?: number;
25
+ start: number;
26
+ end: number;
27
+ text: string;
28
+ };
29
+ export type DiarizedSegment = {
30
+ speaker: string;
31
+ start: number;
32
+ end: number;
33
+ text: string;
34
+ };
35
+ export type OpenAITranscriptionDetailed = {
36
+ text: string;
37
+ language?: string;
38
+ duration?: number;
39
+ words?: TranscriptionWord[];
40
+ segments?: TranscriptionSegment[];
41
+ speakers?: DiarizedSegment[];
42
+ };
43
+ export type OpenRouterTranscriptionOptions = {
44
+ model: string;
45
+ format?: string | AudioMimeType;
46
+ language?: string;
47
+ temperature?: number;
48
+ openRouterProvider?: OpenRouterProviderPreferences;
49
+ /** Quando true, não aplica default de provider (ex.: deepseek only) */
50
+ openRouterAllowAllProviders?: boolean;
51
+ };
52
+ export type OpenRouterTranscriptionResult = {
53
+ text: string;
54
+ usage?: {
55
+ seconds?: number;
56
+ cost?: number;
57
+ input_tokens?: number;
58
+ output_tokens?: number;
59
+ total_tokens?: number;
60
+ };
61
+ };
62
+ export type OpenAISpeechModel = "tts-1" | "tts-1-hd" | "gpt-4o-mini-tts" | "gpt-4o-mini-tts-2025-12-15";
63
+ export type OpenAISpeechResponseFormat = "mp3" | "opus" | "aac" | "flac" | "wav" | "pcm";
64
+ export type OpenAISpeechOptions = {
65
+ model?: OpenAISpeechModel;
66
+ voice: string;
67
+ responseFormat?: OpenAISpeechResponseFormat;
68
+ speed?: number;
69
+ /** Apenas modelos gpt-4o-mini-tts* */
70
+ instructions?: string;
71
+ };
72
+ export type OpenRouterSpeechOptions = {
73
+ model: string;
74
+ voice: string;
75
+ responseFormat?: "mp3" | "pcm";
76
+ speed?: number;
77
+ instructions?: string;
78
+ openRouterProvider?: OpenRouterProviderPreferences;
79
+ openRouterAllowAllProviders?: boolean;
80
+ };
81
+ export type SpeechResult = {
82
+ audio: Buffer;
83
+ contentType: string;
84
+ };
85
+ export type GeminiTranscriptionOptions = {
86
+ model?: string;
87
+ prompt?: string;
88
+ googleGeminiToken?: string;
89
+ };
90
+ /** A API pública da Anthropic não oferece STT/TTS nativo (apenas texto/imagem/documento). */
91
+ export declare const ANTHROPIC_NO_NATIVE_AUDIO: "A API da Anthropic n\u00E3o suporta \u00E1udio nativo. Use STT (OpenAI/OpenRouter) e depois AI.call com modelos anthropic.";
92
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/audio/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ANTHROPIC_NO_NATIVE_AUDIO = void 0;
4
+ /** A API pública da Anthropic não oferece STT/TTS nativo (apenas texto/imagem/documento). */
5
+ exports.ANTHROPIC_NO_NATIVE_AUDIO = "A API da Anthropic não suporta áudio nativo. Use STT (OpenAI/OpenRouter) e depois AI.call com modelos anthropic.";
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/audio/types.ts"],"names":[],"mappings":";;;AA4HA,6FAA6F;AAChF,QAAA,yBAAyB,GACpC,kHAA2H,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AudioBuffer, AudioMimeType } from "../@types/audio";
2
+ export declare function getAudioExtension(format?: string | AudioMimeType): string;
3
+ export declare function toAudioBuffer(audioBuffer: AudioBuffer): Buffer;
4
+ export declare function bufferToBase64(audioBuffer: AudioBuffer): string;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/audio/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAMzE;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAI9D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAudioExtension = getAudioExtension;
4
+ exports.toAudioBuffer = toAudioBuffer;
5
+ exports.bufferToBase64 = bufferToBase64;
6
+ const audio_1 = require("../@types/audio");
7
+ function getAudioExtension(format) {
8
+ if (!format)
9
+ return "mp3";
10
+ if (format.startsWith("audio/")) {
11
+ return audio_1.MIME_TO_EXTENSION[format] ?? "mp3";
12
+ }
13
+ return format.replace(/^\./, "");
14
+ }
15
+ function toAudioBuffer(audioBuffer) {
16
+ if (audioBuffer instanceof Buffer)
17
+ return audioBuffer;
18
+ if (audioBuffer instanceof ArrayBuffer)
19
+ return Buffer.from(audioBuffer);
20
+ return Buffer.from(audioBuffer);
21
+ }
22
+ function bufferToBase64(audioBuffer) {
23
+ return toAudioBuffer(audioBuffer).toString("base64");
24
+ }
25
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/audio/utils.ts"],"names":[],"mappings":";;AAGA,8CAMC;AAED,sCAIC;AAED,wCAEC;AAlBD,2CAAoD;AAEpD,SAAgB,iBAAiB,CAAC,MAA+B;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,yBAAiB,CAAC,MAAuB,CAAC,IAAI,KAAK,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,aAAa,CAAC,WAAwB;IACpD,IAAI,WAAW,YAAY,MAAM;QAAE,OAAO,WAAW,CAAC;IACtD,IAAI,WAAW,YAAY,WAAW;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,IAAI,CAAC,WAAyB,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,cAAc,CAAC,WAAwB;IACrD,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EmbeddingResult, GeminiEmbeddingOptions } from "./types";
2
+ export declare function embedGemini(input: string | string[], options: GeminiEmbeddingOptions, googleGeminiToken?: string): Promise<EmbeddingResult>;
3
+ //# sourceMappingURL=embed-gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-gemini.d.ts","sourceRoot":"","sources":["../../src/embeddings/embed-gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGvE,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,sBAAsB,EAC/B,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,eAAe,CAAC,CAsC1B"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedGemini = embedGemini;
4
+ const google_genai_1 = require("@langchain/google-genai");
5
+ const utils_1 = require("./utils");
6
+ async function embedGemini(input, options, googleGeminiToken) {
7
+ if (!googleGeminiToken) {
8
+ throw new Error("googleGeminiToken é obrigatório para embedGemini.");
9
+ }
10
+ const texts = (0, utils_1.normalizeInput)(input);
11
+ const modelParams = {
12
+ apiKey: googleGeminiToken,
13
+ model: options.model,
14
+ };
15
+ if (options.taskType) {
16
+ modelParams.taskType = options.taskType;
17
+ }
18
+ const embeddingsModel = new google_genai_1.GoogleGenerativeAIEmbeddings(modelParams);
19
+ const embeddings = texts.length === 1
20
+ ? [await embeddingsModel.embedQuery(texts[0])]
21
+ : await embeddingsModel.embedDocuments(texts);
22
+ const result = {
23
+ embeddings,
24
+ model: options.model,
25
+ };
26
+ if (options.dimensions !== undefined && options.model === "gemini-embedding-001") {
27
+ result.embeddings = result.embeddings.map((vec) => truncateAndNormalizeL2(vec, options.dimensions));
28
+ }
29
+ return result;
30
+ }
31
+ function truncateAndNormalizeL2(vector, dimensions) {
32
+ const truncated = vector.slice(0, dimensions);
33
+ const norm = Math.sqrt(truncated.reduce((sum, v) => sum + v * v, 0));
34
+ if (norm === 0)
35
+ return truncated;
36
+ return truncated.map((v) => v / norm);
37
+ }
38
+ //# sourceMappingURL=embed-gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-gemini.js","sourceRoot":"","sources":["../../src/embeddings/embed-gemini.ts"],"names":[],"mappings":";;AAIA,kCA0CC;AA9CD,0DAAuE;AAEvE,mCAAyC;AAElC,KAAK,UAAU,WAAW,CAC/B,KAAwB,EACxB,OAA+B,EAC/B,iBAA0B;IAE1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,mDAAmD,CACpD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC;IACpC,MAAM,WAAW,GACf;QACE,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;IACJ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAE9B,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,2CAA4B,CAAC,WAAW,CAAC,CAAC;IAEtE,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,MAAM,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,MAAM,GAAoB;QAC9B,UAAU;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;IAEF,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,sBAAsB,EAAE,CAAC;QACjF,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAChD,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAW,CAAC,CACjD,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAgB,EAAE,UAAkB;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OpenAIEmbeddingOptions, EmbeddingResult } from "./types";
2
+ export declare function embedOpenAI(input: string | string[], options: OpenAIEmbeddingOptions, openAIApiKey?: string): Promise<EmbeddingResult>;
3
+ //# sourceMappingURL=embed-openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-openai.d.ts","sourceRoot":"","sources":["../../src/embeddings/embed-openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAiCvE,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,sBAAsB,EAC/B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAc1B"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.embedOpenAI = embedOpenAI;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const utils_1 = require("./utils");
9
+ function createOpenAIClient(apiKey) {
10
+ if (!apiKey) {
11
+ throw new Error("OpenAI API key is not passed in the embedding parameters");
12
+ }
13
+ return new openai_1.default({ apiKey });
14
+ }
15
+ function mapEmbeddingResponse(response, model) {
16
+ const embeddings = response.data
17
+ .sort((a, b) => a.index - b.index)
18
+ .map((item) => item.embedding);
19
+ const result = {
20
+ embeddings,
21
+ model: response.model ?? model,
22
+ };
23
+ if (response.usage) {
24
+ result.usage = {
25
+ prompt_tokens: response.usage.prompt_tokens,
26
+ total_tokens: response.usage.total_tokens,
27
+ };
28
+ }
29
+ return result;
30
+ }
31
+ async function embedOpenAI(input, options, openAIApiKey) {
32
+ const openai = createOpenAIClient(openAIApiKey);
33
+ const texts = (0, utils_1.normalizeInput)(input);
34
+ const response = await openai.embeddings.create({
35
+ model: options.model,
36
+ input: texts.length === 1 ? texts[0] : texts,
37
+ ...(options.dimensions !== undefined ? { dimensions: options.dimensions } : {}),
38
+ ...(options.encodingFormat
39
+ ? { encoding_format: options.encodingFormat }
40
+ : {}),
41
+ });
42
+ return mapEmbeddingResponse(response, options.model);
43
+ }
44
+ //# sourceMappingURL=embed-openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-openai.js","sourceRoot":"","sources":["../../src/embeddings/embed-openai.ts"],"names":[],"mappings":";;;;;AAkCA,kCAkBC;AApDD,oDAA4B;AAE5B,mCAAyC;AAEzC,SAAS,kBAAkB,CAAC,MAAe;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,gBAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAwC,EACxC,KAAa;IAEb,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI;SAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAqB,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAoB;QAC9B,UAAU;QACV,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;KAC/B,CAAC;IAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,GAAG;YACb,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;YAC3C,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;SAC1C,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,KAAwB,EACxB,OAA+B,EAC/B,YAAqB;IAErB,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK;QAC7C,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,OAAO,CAAC,cAAc;YACxB,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,cAAc,EAAE;YAC7C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EmbeddingResult, OpenRouterEmbeddingOptions } from "./types";
2
+ export declare function embedOpenRouter(input: string | string[], options: OpenRouterEmbeddingOptions, openRouterApiKey?: string): Promise<EmbeddingResult>;
3
+ //# sourceMappingURL=embed-openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-openrouter.d.ts","sourceRoot":"","sources":["../../src/embeddings/embed-openrouter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AA0B3E,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,0BAA0B,EACnC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,eAAe,CAAC,CA8B1B"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.embedOpenRouter = embedOpenRouter;
4
+ const models_1 = require("../langchain/models");
5
+ const openrouter_client_1 = require("../utils/openrouter-client");
6
+ const utils_1 = require("./utils");
7
+ function mapEmbeddingResponse(response, model) {
8
+ const embeddings = response.data
9
+ .sort((a, b) => a.index - b.index)
10
+ .map((item) => item.embedding);
11
+ const result = {
12
+ embeddings,
13
+ model: response.model ?? model,
14
+ };
15
+ if (response.usage) {
16
+ result.usage = {
17
+ prompt_tokens: response.usage.prompt_tokens,
18
+ total_tokens: response.usage.total_tokens,
19
+ };
20
+ }
21
+ return result;
22
+ }
23
+ async function embedOpenRouter(input, options, openRouterApiKey) {
24
+ if (!openRouterApiKey) {
25
+ throw new Error("OpenRouter API key is not passed in the embedding parameters");
26
+ }
27
+ const openRouterModel = (0, utils_1.stripOpenRouterPrefix)(options.model);
28
+ const client = (0, openrouter_client_1.createOpenRouterOpenAIClient)(openRouterApiKey);
29
+ const texts = (0, utils_1.normalizeInput)(input);
30
+ const provider = (0, models_1.resolveOpenRouterProvider)(openRouterModel, {
31
+ openRouterProvider: options.openRouterProvider,
32
+ openRouterAllowAllProviders: options.openRouterAllowAllProviders,
33
+ });
34
+ const body = {
35
+ model: openRouterModel,
36
+ input: texts.length === 1 ? texts[0] : texts,
37
+ };
38
+ if (options.dimensions !== undefined)
39
+ body.dimensions = options.dimensions;
40
+ if (options.encodingFormat)
41
+ body.encoding_format = options.encodingFormat;
42
+ if (provider)
43
+ body.provider = provider;
44
+ const response = await client.embeddings.create(body);
45
+ return mapEmbeddingResponse(response, openRouterModel);
46
+ }
47
+ //# sourceMappingURL=embed-openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-openrouter.js","sourceRoot":"","sources":["../../src/embeddings/embed-openrouter.ts"],"names":[],"mappings":";;AA6BA,0CAkCC;AA9DD,gDAAgE;AAChE,kEAA0E;AAE1E,mCAAgE;AAEhE,SAAS,oBAAoB,CAC3B,QAAwC,EACxC,KAAa;IAEb,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI;SAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAqB,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAoB;QAC9B,UAAU;QACV,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;KAC/B,CAAC;IAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,GAAG;YACb,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;YAC3C,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;SAC1C,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,KAAwB,EACxB,OAAmC,EACnC,gBAAyB;IAEzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,IAAA,6BAAqB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,IAAA,gDAA4B,EAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,QAAQ,GAAG,IAAA,kCAAyB,EAAC,eAAe,EAAE;QAC1D,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;KACjE,CAAC,CAAC;IAEH,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,KAAK;KAC9C,CAAC;IAEF,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAC3E,IAAI,OAAO,CAAC,cAAc;QAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAC1E,IAAI,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAC7C,IAA+C,CAChD,CAAC;IAEF,OAAO,oBAAoB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC"}