@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.
- package/.env.example +13 -1
- package/README.md +795 -0
- package/dist/@types/embedding-model-names.d.ts +11 -0
- package/dist/@types/embedding-model-names.d.ts.map +1 -0
- package/dist/@types/embedding-model-names.js +3 -0
- package/dist/@types/embedding-model-names.js.map +1 -0
- package/dist/@types/model-names.d.ts +21 -5
- package/dist/@types/model-names.d.ts.map +1 -1
- package/dist/@types/openrouter-provider.d.ts +25 -0
- package/dist/@types/openrouter-provider.d.ts.map +1 -0
- package/dist/@types/openrouter-provider.js +3 -0
- package/dist/@types/openrouter-provider.js.map +1 -0
- package/dist/ai.d.ts +7 -0
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +56 -5
- package/dist/ai.js.map +1 -1
- package/dist/audio/gemini-transcription.d.ts +4 -0
- package/dist/audio/gemini-transcription.d.ts.map +1 -0
- package/dist/audio/gemini-transcription.js +37 -0
- package/dist/audio/gemini-transcription.js.map +1 -0
- package/dist/audio/index.d.ts +33 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +43 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/audio/openrouter-client.d.ts +2 -0
- package/dist/audio/openrouter-client.d.ts.map +1 -0
- package/dist/audio/openrouter-client.js +7 -0
- package/dist/audio/openrouter-client.js.map +1 -0
- package/dist/audio/speech-openai.d.ts +4 -0
- package/dist/audio/speech-openai.d.ts.map +1 -0
- package/dist/audio/speech-openai.js +65 -0
- package/dist/audio/speech-openai.js.map +1 -0
- package/dist/audio/speech-openrouter.d.ts +4 -0
- package/dist/audio/speech-openrouter.d.ts.map +1 -0
- package/dist/audio/speech-openrouter.js +89 -0
- package/dist/audio/speech-openrouter.js.map +1 -0
- package/dist/audio/transcription-openai.d.ts +11 -0
- package/dist/audio/transcription-openai.d.ts.map +1 -0
- package/dist/audio/transcription-openai.js +204 -0
- package/dist/audio/transcription-openai.js.map +1 -0
- package/dist/audio/transcription-openrouter.d.ts +4 -0
- package/dist/audio/transcription-openrouter.d.ts.map +1 -0
- package/dist/audio/transcription-openrouter.js +44 -0
- package/dist/audio/transcription-openrouter.js.map +1 -0
- package/dist/audio/types.d.ts +92 -0
- package/dist/audio/types.d.ts.map +1 -0
- package/dist/audio/types.js +6 -0
- package/dist/audio/types.js.map +1 -0
- package/dist/audio/utils.d.ts +5 -0
- package/dist/audio/utils.d.ts.map +1 -0
- package/dist/audio/utils.js +25 -0
- package/dist/audio/utils.js.map +1 -0
- package/dist/embeddings/embed-gemini.d.ts +3 -0
- package/dist/embeddings/embed-gemini.d.ts.map +1 -0
- package/dist/embeddings/embed-gemini.js +38 -0
- package/dist/embeddings/embed-gemini.js.map +1 -0
- package/dist/embeddings/embed-openai.d.ts +3 -0
- package/dist/embeddings/embed-openai.d.ts.map +1 -0
- package/dist/embeddings/embed-openai.js +44 -0
- package/dist/embeddings/embed-openai.js.map +1 -0
- package/dist/embeddings/embed-openrouter.d.ts +3 -0
- package/dist/embeddings/embed-openrouter.d.ts.map +1 -0
- package/dist/embeddings/embed-openrouter.js +47 -0
- package/dist/embeddings/embed-openrouter.js.map +1 -0
- package/dist/embeddings/index.d.ts +19 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +36 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/route.d.ts +12 -0
- package/dist/embeddings/route.d.ts.map +1 -0
- package/dist/embeddings/route.js +42 -0
- package/dist/embeddings/route.js.map +1 -0
- package/dist/embeddings/types.d.ts +37 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +6 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/embeddings/utils.d.ts +6 -0
- package/dist/embeddings/utils.d.ts.map +1 -0
- package/dist/embeddings/utils.js +25 -0
- package/dist/embeddings/utils.js.map +1 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/langchain/audio-transcription.d.ts +8 -13
- package/dist/langchain/audio-transcription.d.ts.map +1 -1
- package/dist/langchain/audio-transcription.js +8 -92
- package/dist/langchain/audio-transcription.js.map +1 -1
- package/dist/langchain/messages.d.ts +6 -1
- package/dist/langchain/messages.d.ts.map +1 -1
- package/dist/langchain/messages.js +35 -7
- package/dist/langchain/messages.js.map +1 -1
- package/dist/langchain/models.d.ts +38 -0
- package/dist/langchain/models.d.ts.map +1 -1
- package/dist/langchain/models.js +63 -4
- package/dist/langchain/models.js.map +1 -1
- package/dist/langchain/structured-output.d.ts +9 -0
- package/dist/langchain/structured-output.d.ts.map +1 -0
- package/dist/langchain/structured-output.js +70 -0
- package/dist/langchain/structured-output.js.map +1 -0
- package/dist/langchain/tools.d.ts +1 -1
- package/dist/utils/openrouter-client.d.ts +4 -0
- package/dist/utils/openrouter-client.d.ts.map +1 -0
- package/dist/utils/openrouter-client.js +16 -0
- package/dist/utils/openrouter-client.js.map +1 -0
- package/docs/LANGCHAIN_WHISPER_WINDOWS_BUG.md +2 -0
- package/package.json +4 -4
- package/src/@types/embedding-model-names.ts +36 -0
- package/src/@types/model-names.ts +104 -6
- package/src/@types/openrouter-provider.ts +27 -0
- package/src/ai.ts +89 -10
- package/src/audio/gemini-transcription.ts +47 -0
- package/src/audio/index.ts +101 -0
- package/src/audio/openrouter-client.ts +4 -0
- package/src/audio/speech-openai.ts +79 -0
- package/src/audio/speech-openrouter.ts +121 -0
- package/src/audio/transcription-openai.ts +259 -0
- package/src/audio/transcription-openrouter.ts +59 -0
- package/src/audio/types.ts +127 -0
- package/src/audio/utils.ts +20 -0
- package/src/embeddings/embed-gemini.ts +54 -0
- package/src/embeddings/embed-openai.ts +53 -0
- package/src/embeddings/embed-openrouter.ts +64 -0
- package/src/embeddings/index.ts +83 -0
- package/src/embeddings/route.ts +62 -0
- package/src/embeddings/types.ts +53 -0
- package/src/embeddings/utils.ts +21 -0
- package/src/index.ts +52 -5
- package/src/langchain/audio-transcription.ts +19 -90
- package/src/langchain/messages.ts +84 -12
- package/src/langchain/models.ts +130 -3
- package/src/langchain/structured-output.ts +77 -0
- package/src/utils/openrouter-client.ts +10 -0
- package/tests/e2e/README.md +53 -0
- package/tests/e2e/ai-audio-multiprovider.test.ts +118 -0
- package/tests/e2e/ai-deepseek-structured-output.test.ts +133 -0
- package/tests/e2e/ai-embeddings.test.ts +87 -0
- package/tests/e2e/ai-local-models.test.ts +65 -0
- package/tests/unit/audio/index.test.ts +17 -0
- package/tests/unit/audio/speech-openai.test.ts +74 -0
- package/tests/unit/audio/speech-openrouter.test.ts +88 -0
- package/tests/unit/audio/transcription-openai.test.ts +130 -0
- package/tests/unit/audio/transcription-openrouter.test.ts +82 -0
- package/tests/unit/embeddings/embed-gemini.test.ts +52 -0
- package/tests/unit/embeddings/embed-openai.test.ts +68 -0
- package/tests/unit/embeddings/embed-openrouter.test.ts +62 -0
- package/tests/unit/embeddings/index.test.ts +55 -0
- package/tests/unit/index.test.ts +209 -0
- package/tests/unit/langchain/messages.test.ts +37 -0
- package/tests/unit/langchain/models.test.ts +223 -1
- package/tests/unit/langchain/structured-output.test.ts +49 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { embedOpenAI } from "./embed-openai";
|
|
2
|
+
import { embedOpenRouter } from "./embed-openrouter";
|
|
3
|
+
import { embedGemini } from "./embed-gemini";
|
|
4
|
+
import { embedWithModel, type EmbedOptions } from "./route";
|
|
5
|
+
import type { EmbedApiKeys, EmbeddingResult } from "./types";
|
|
6
|
+
export type { AIEmbeddingModelNames, OpenAIEmbeddingModel, GeminiEmbeddingModel, OpenRouterEmbeddingModel, OpenRouterPrefixedEmbeddingModel, } from "../@types/embedding-model-names";
|
|
7
|
+
export type { EmbeddingResult, EmbeddingUsage, OpenAIEmbeddingOptions, OpenRouterEmbeddingOptions, GeminiEmbeddingOptions, GeminiEmbeddingTaskType, EmbedApiKeys, } from "./types";
|
|
8
|
+
export type { EmbedOptions } from "./route";
|
|
9
|
+
export { ANTHROPIC_NO_NATIVE_EMBEDDINGS } from "./types";
|
|
10
|
+
export { embedWithModel };
|
|
11
|
+
export declare class AIEmbeddings {
|
|
12
|
+
static embedOpenAI: typeof embedOpenAI;
|
|
13
|
+
static embedOpenRouter: typeof embedOpenRouter;
|
|
14
|
+
static embedGemini: typeof embedGemini;
|
|
15
|
+
static embed(input: string | string[], options: EmbedOptions, keys: EmbedApiKeys): Promise<EmbeddingResult>;
|
|
16
|
+
static embedDocuments(texts: string[], options: EmbedOptions, keys: EmbedApiKeys): Promise<number[][]>;
|
|
17
|
+
static embedQuery(text: string, options: EmbedOptions, keys: EmbedApiKeys): Promise<number[]>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAKhB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,qBAAa,YAAY;IACvB,MAAM,CAAC,WAAW,qBAAe;IACjC,MAAM,CAAC,eAAe,yBAAmB;IACzC,MAAM,CAAC,WAAW,qBAAe;WAEpB,KAAK,CAChB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,eAAe,CAAC;WAId,cAAc,CACzB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;WAWT,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;CAUrB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AIEmbeddings = exports.embedWithModel = exports.ANTHROPIC_NO_NATIVE_EMBEDDINGS = void 0;
|
|
4
|
+
const embed_openai_1 = require("./embed-openai");
|
|
5
|
+
const embed_openrouter_1 = require("./embed-openrouter");
|
|
6
|
+
const embed_gemini_1 = require("./embed-gemini");
|
|
7
|
+
const route_1 = require("./route");
|
|
8
|
+
Object.defineProperty(exports, "embedWithModel", { enumerable: true, get: function () { return route_1.embedWithModel; } });
|
|
9
|
+
var types_1 = require("./types");
|
|
10
|
+
Object.defineProperty(exports, "ANTHROPIC_NO_NATIVE_EMBEDDINGS", { enumerable: true, get: function () { return types_1.ANTHROPIC_NO_NATIVE_EMBEDDINGS; } });
|
|
11
|
+
class AIEmbeddings {
|
|
12
|
+
static embedOpenAI = embed_openai_1.embedOpenAI;
|
|
13
|
+
static embedOpenRouter = embed_openrouter_1.embedOpenRouter;
|
|
14
|
+
static embedGemini = embed_gemini_1.embedGemini;
|
|
15
|
+
static async embed(input, options, keys) {
|
|
16
|
+
return (0, route_1.embedWithModel)(input, options, keys);
|
|
17
|
+
}
|
|
18
|
+
static async embedDocuments(texts, options, keys) {
|
|
19
|
+
const taskType = options.taskType ??
|
|
20
|
+
(options.model.startsWith("gemini-embedding-")
|
|
21
|
+
? "RETRIEVAL_DOCUMENT"
|
|
22
|
+
: undefined);
|
|
23
|
+
const result = await (0, route_1.embedWithModel)(texts, { ...options, taskType }, keys);
|
|
24
|
+
return result.embeddings;
|
|
25
|
+
}
|
|
26
|
+
static async embedQuery(text, options, keys) {
|
|
27
|
+
const taskType = options.taskType ??
|
|
28
|
+
(options.model.startsWith("gemini-embedding-")
|
|
29
|
+
? "RETRIEVAL_QUERY"
|
|
30
|
+
: undefined);
|
|
31
|
+
const result = await (0, route_1.embedWithModel)(text, { ...options, taskType }, keys);
|
|
32
|
+
return result.embeddings[0] ?? [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.AIEmbeddings = AIEmbeddings;
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":";;;AACA,iDAA6C;AAC7C,yDAAqD;AACrD,iDAA6C;AAC7C,mCAGiB;AA+BR,+FAjCP,sBAAc,OAiCO;AADvB,iCAAyD;AAAhD,uHAAA,8BAA8B,OAAA;AAGvC,MAAa,YAAY;IACvB,MAAM,CAAC,WAAW,GAAG,0BAAW,CAAC;IACjC,MAAM,CAAC,eAAe,GAAG,kCAAe,CAAC;IACzC,MAAM,CAAC,WAAW,GAAG,0BAAW,CAAC;IAEjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,KAAwB,EACxB,OAAqB,EACrB,IAAkB;QAElB,OAAO,IAAA,sBAAc,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,KAAe,EACf,OAAqB,EACrB,IAAkB;QAElB,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;YAChB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAC5C,CAAC,CAAE,oBAA8B;gBACjC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAc,EAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CACrB,IAAY,EACZ,OAAqB,EACrB,IAAkB;QAElB,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ;YAChB,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBAC5C,CAAC,CAAE,iBAA2B;gBAC9B,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAc,EAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;;AAzCH,oCA0CC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EmbedApiKeys, EmbeddingResult, GeminiEmbeddingOptions, OpenRouterEmbeddingOptions } from "./types";
|
|
2
|
+
import type { AIEmbeddingModelNames } from "../@types/embedding-model-names";
|
|
3
|
+
export type EmbedOptions = {
|
|
4
|
+
model: AIEmbeddingModelNames;
|
|
5
|
+
dimensions?: number;
|
|
6
|
+
encodingFormat?: "float" | "base64";
|
|
7
|
+
taskType?: GeminiEmbeddingOptions["taskType"];
|
|
8
|
+
openRouterProvider?: OpenRouterEmbeddingOptions["openRouterProvider"];
|
|
9
|
+
openRouterAllowAllProviders?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function embedWithModel(input: string | string[], options: EmbedOptions, keys: EmbedApiKeys): Promise<EmbeddingResult>;
|
|
12
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/embeddings/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,sBAAsB,EAEtB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAU7E,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACpC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC9C,kBAAkB,CAAC,EAAE,0BAA0B,CAAC,oBAAoB,CAAC,CAAC;IACtE,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,eAAe,CAAC,CA+B1B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.embedWithModel = embedWithModel;
|
|
4
|
+
const embed_openai_1 = require("./embed-openai");
|
|
5
|
+
const embed_openrouter_1 = require("./embed-openrouter");
|
|
6
|
+
const embed_gemini_1 = require("./embed-gemini");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
async function embedWithModel(input, options, keys) {
|
|
9
|
+
const { model } = options;
|
|
10
|
+
if ((0, utils_1.isOpenRouterEmbeddingModel)(model)) {
|
|
11
|
+
const orOptions = { model };
|
|
12
|
+
if (options.dimensions !== undefined)
|
|
13
|
+
orOptions.dimensions = options.dimensions;
|
|
14
|
+
if (options.encodingFormat)
|
|
15
|
+
orOptions.encodingFormat = options.encodingFormat;
|
|
16
|
+
if (options.openRouterProvider) {
|
|
17
|
+
orOptions.openRouterProvider = options.openRouterProvider;
|
|
18
|
+
}
|
|
19
|
+
if (options.openRouterAllowAllProviders !== undefined) {
|
|
20
|
+
orOptions.openRouterAllowAllProviders = options.openRouterAllowAllProviders;
|
|
21
|
+
}
|
|
22
|
+
return (0, embed_openrouter_1.embedOpenRouter)(input, orOptions, keys.openRouterApiKey);
|
|
23
|
+
}
|
|
24
|
+
if ((0, utils_1.isOpenAIEmbeddingModel)(model)) {
|
|
25
|
+
const oaiOptions = { model };
|
|
26
|
+
if (options.dimensions !== undefined)
|
|
27
|
+
oaiOptions.dimensions = options.dimensions;
|
|
28
|
+
if (options.encodingFormat)
|
|
29
|
+
oaiOptions.encodingFormat = options.encodingFormat;
|
|
30
|
+
return (0, embed_openai_1.embedOpenAI)(input, oaiOptions, keys.openAIApiKey);
|
|
31
|
+
}
|
|
32
|
+
if ((0, utils_1.isGeminiEmbeddingModel)(model)) {
|
|
33
|
+
const geminiOptions = { model };
|
|
34
|
+
if (options.dimensions !== undefined)
|
|
35
|
+
geminiOptions.dimensions = options.dimensions;
|
|
36
|
+
if (options.taskType)
|
|
37
|
+
geminiOptions.taskType = options.taskType;
|
|
38
|
+
return (0, embed_gemini_1.embedGemini)(input, geminiOptions, keys.googleGeminiToken);
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`[@luanpoppe/ai] Modelo de embedding não suportado: ${model}`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/embeddings/route.ts"],"names":[],"mappings":";;AA0BA,wCAmCC;AArDD,iDAA6C;AAC7C,yDAAqD;AACrD,iDAA6C;AAC7C,mCAIiB;AAWV,KAAK,UAAU,cAAc,CAClC,KAAwB,EACxB,OAAqB,EACrB,IAAkB;IAElB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,IAAI,IAAA,kCAA0B,EAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,SAAS,GAA+B,EAAE,KAAK,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAChF,IAAI,OAAO,CAAC,cAAc;YAAE,SAAS,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9E,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,SAAS,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,CAAC,2BAA2B,KAAK,SAAS,EAAE,CAAC;YACtD,SAAS,CAAC,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC;QAC9E,CAAC;QACD,OAAO,IAAA,kCAAe,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,IAAA,8BAAsB,EAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,UAAU,GAA2B,EAAE,KAAK,EAAE,CAAC;QACrD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACjF,IAAI,OAAO,CAAC,cAAc;YAAE,UAAU,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC/E,OAAO,IAAA,0BAAW,EAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,IAAA,8BAAsB,EAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,aAAa,GAA2B,EAAE,KAAK,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACpF,IAAI,OAAO,CAAC,QAAQ;YAAE,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAChE,OAAO,IAAA,0BAAW,EAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,sDAAsD,KAAK,EAAE,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { OpenRouterProviderPreferences } from "../@types/openrouter-provider";
|
|
2
|
+
import type { AIEmbeddingModelNames } from "../@types/embedding-model-names";
|
|
3
|
+
export type GeminiEmbeddingTaskType = "RETRIEVAL_DOCUMENT" | "RETRIEVAL_QUERY" | "SEMANTIC_SIMILARITY" | "CLASSIFICATION" | "CLUSTERING" | "QUESTION_ANSWERING" | "FACT_VERIFICATION" | "CODE_RETRIEVAL_QUERY";
|
|
4
|
+
export type EmbeddingUsage = {
|
|
5
|
+
prompt_tokens?: number;
|
|
6
|
+
total_tokens?: number;
|
|
7
|
+
};
|
|
8
|
+
export type EmbeddingResult = {
|
|
9
|
+
embeddings: number[][];
|
|
10
|
+
model: string;
|
|
11
|
+
usage?: EmbeddingUsage;
|
|
12
|
+
};
|
|
13
|
+
export type OpenAIEmbeddingOptions = {
|
|
14
|
+
model: AIEmbeddingModelNames;
|
|
15
|
+
dimensions?: number;
|
|
16
|
+
encodingFormat?: "float" | "base64";
|
|
17
|
+
};
|
|
18
|
+
export type OpenRouterEmbeddingOptions = {
|
|
19
|
+
model: AIEmbeddingModelNames;
|
|
20
|
+
dimensions?: number;
|
|
21
|
+
encodingFormat?: "float" | "base64";
|
|
22
|
+
openRouterProvider?: OpenRouterProviderPreferences;
|
|
23
|
+
openRouterAllowAllProviders?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export type GeminiEmbeddingOptions = {
|
|
26
|
+
model: AIEmbeddingModelNames;
|
|
27
|
+
dimensions?: number;
|
|
28
|
+
taskType?: GeminiEmbeddingTaskType;
|
|
29
|
+
};
|
|
30
|
+
export type EmbedApiKeys = {
|
|
31
|
+
openAIApiKey?: string;
|
|
32
|
+
googleGeminiToken?: string;
|
|
33
|
+
openRouterApiKey?: string;
|
|
34
|
+
};
|
|
35
|
+
/** A API pública da Anthropic não oferece embeddings nativos (recomenda Voyage AI para RAG com Claude). */
|
|
36
|
+
export declare const ANTHROPIC_NO_NATIVE_EMBEDDINGS: "A API da Anthropic n\u00E3o suporta embeddings nativos. Use OpenAI, Gemini ou OpenRouter para vetorizar texto antes de AI.call com modelos anthropic.";
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,MAAM,uBAAuB,GAC/B,oBAAoB,GACpB,iBAAiB,GACjB,qBAAqB,GACrB,gBAAgB,GAChB,YAAY,GACZ,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACpC,kBAAkB,CAAC,EAAE,6BAA6B,CAAC;IACnD,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,2GAA2G;AAC3G,eAAO,MAAM,8BAA8B,EACzC,uJAA2J,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ANTHROPIC_NO_NATIVE_EMBEDDINGS = void 0;
|
|
4
|
+
/** A API pública da Anthropic não oferece embeddings nativos (recomenda Voyage AI para RAG com Claude). */
|
|
5
|
+
exports.ANTHROPIC_NO_NATIVE_EMBEDDINGS = "A API da Anthropic não suporta embeddings nativos. Use OpenAI, Gemini ou OpenRouter para vetorizar texto antes de AI.call com modelos anthropic.";
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":";;;AAkDA,2GAA2G;AAC9F,QAAA,8BAA8B,GACzC,kJAA2J,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function normalizeInput(input: string | string[]): string[];
|
|
2
|
+
export declare function stripOpenRouterPrefix(model: string): string;
|
|
3
|
+
export declare function isOpenAIEmbeddingModel(model: string): boolean;
|
|
4
|
+
export declare function isGeminiEmbeddingModel(model: string): boolean;
|
|
5
|
+
export declare function isOpenRouterEmbeddingModel(model: string): boolean;
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/embeddings/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeInput = normalizeInput;
|
|
4
|
+
exports.stripOpenRouterPrefix = stripOpenRouterPrefix;
|
|
5
|
+
exports.isOpenAIEmbeddingModel = isOpenAIEmbeddingModel;
|
|
6
|
+
exports.isGeminiEmbeddingModel = isGeminiEmbeddingModel;
|
|
7
|
+
exports.isOpenRouterEmbeddingModel = isOpenRouterEmbeddingModel;
|
|
8
|
+
function normalizeInput(input) {
|
|
9
|
+
return Array.isArray(input) ? input : [input];
|
|
10
|
+
}
|
|
11
|
+
function stripOpenRouterPrefix(model) {
|
|
12
|
+
return model.startsWith("openrouter/")
|
|
13
|
+
? model.slice("openrouter/".length)
|
|
14
|
+
: model;
|
|
15
|
+
}
|
|
16
|
+
function isOpenAIEmbeddingModel(model) {
|
|
17
|
+
return model.startsWith("text-embedding-");
|
|
18
|
+
}
|
|
19
|
+
function isGeminiEmbeddingModel(model) {
|
|
20
|
+
return model.startsWith("gemini-embedding-");
|
|
21
|
+
}
|
|
22
|
+
function isOpenRouterEmbeddingModel(model) {
|
|
23
|
+
return model.startsWith("openrouter/");
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/embeddings/utils.ts"],"names":[],"mappings":";;AAAA,wCAEC;AAED,sDAIC;AAED,wDAEC;AAED,wDAEC;AAED,gEAEC;AApBD,SAAgB,cAAc,CAAC,KAAwB;IACrD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAa;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QACpC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,0BAA0B,CAAC,KAAa;IACtD,OAAO,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,19 +4,29 @@ import type { AICallParams, AICallReturn, AICallStructuredOutputParams, AICallSt
|
|
|
4
4
|
export { AI };
|
|
5
5
|
export type { AIAgent } from "./@types/agent";
|
|
6
6
|
export type { AICallParams, AICallReturn, AICallStructuredOutputParams, AICallStructuredOutputReturn, } from "./@types/ai-call";
|
|
7
|
+
export type { AIModelNames } from "./@types/model-names";
|
|
7
8
|
export { AIModels } from "./langchain/models";
|
|
8
|
-
export
|
|
9
|
+
export { DEFAULT_OLLAMA_BASE_URL, DEFAULT_LOCAL_API_KEY, } from "./langchain/models";
|
|
10
|
+
export type { LLMModelConfig, OllamaModelConfig, OpenAICompatibleModelConfig, ReasoningEffort, OpenRouterMaxPrice, OpenRouterProviderPreferences, OpenRouterProviderSort, } from "./langchain/models";
|
|
11
|
+
export { resolveOpenRouterProvider } from "./langchain/models";
|
|
9
12
|
export { AIMessages } from "./langchain/messages";
|
|
10
13
|
export { AITools } from "./langchain/tools";
|
|
11
14
|
export { AIMemory } from "./langchain/memory";
|
|
12
15
|
export type { MemoryConfig, BaseCheckpointSaver, MemoryCheckpointerConfig, SqliteCheckpointerConfig, PostgresCheckpointerConfig, RedisCheckpointerConfig, MongoDBCheckpointerConfig, GraphWithStateHistory, MessageRole, HistoryMessageItem, GetHistoryResult, } from "./langchain/memory";
|
|
16
|
+
export { AIAudio } from "./audio";
|
|
17
|
+
export type { WhisperModel, OpenAITranscriptionOptions, OpenAITranscriptionResponseFormat, OpenAITranscriptionDetailed, OpenRouterTranscriptionOptions, OpenRouterTranscriptionResult, OpenAISpeechOptions, OpenAISpeechModel, OpenRouterSpeechOptions, SpeechResult, TranscriptionWord, TranscriptionSegment, DiarizedSegment, GeminiTranscriptionOptions, } from "./audio";
|
|
18
|
+
export { ANTHROPIC_NO_NATIVE_AUDIO } from "./audio";
|
|
19
|
+
export { AIEmbeddings, ANTHROPIC_NO_NATIVE_EMBEDDINGS } from "./embeddings";
|
|
20
|
+
export type { AIEmbeddingModelNames, OpenAIEmbeddingModel, GeminiEmbeddingModel, OpenRouterEmbeddingModel, OpenRouterPrefixedEmbeddingModel, EmbeddingResult, EmbeddingUsage, OpenAIEmbeddingOptions, OpenRouterEmbeddingOptions, GeminiEmbeddingOptions, GeminiEmbeddingTaskType, EmbedApiKeys, EmbedOptions, } from "./embeddings";
|
|
21
|
+
/** @deprecated Use AIAudio instead */
|
|
13
22
|
export { AIAudioTranscription } from "./langchain/audio-transcription";
|
|
14
23
|
export { AudioUtils } from "./utils/audio-utils";
|
|
15
24
|
export { ImageUtils } from "./utils/image-utils";
|
|
16
25
|
export type { AudioBuffer, AudioMimeType } from "./@types/audio";
|
|
17
26
|
export type { ImageBuffer, ImageMimeType } from "./@types/image";
|
|
18
27
|
export type { AudioContentBlock, HumanMessageWithAudioOptions, ImageContentBlock, HumanMessageWithImageOptions, } from "./langchain/messages";
|
|
19
|
-
|
|
28
|
+
/** @deprecated Use OpenAITranscriptionOptions from AIAudio */
|
|
29
|
+
export type { WhisperTranscriptionOptions } from "./langchain/audio-transcription";
|
|
20
30
|
/** @deprecated Use AI instead. Will be removed in 2.0.0 */
|
|
21
31
|
export { AI as Langchain };
|
|
22
32
|
/** @deprecated Use AICallParams instead. Will be removed in 2.0.0 */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,EAAE,EAAE,CAAC;AACd,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LangchainAudioTranscription = exports.LangchainTools = exports.LangchainMessages = exports.LangchainModels = exports.Langchain = exports.ImageUtils = exports.AudioUtils = exports.AIAudioTranscription = exports.AIMemory = exports.AITools = exports.AIMessages = exports.AIModels = exports.AI = void 0;
|
|
3
|
+
exports.LangchainAudioTranscription = exports.LangchainTools = exports.LangchainMessages = exports.LangchainModels = exports.Langchain = exports.ImageUtils = exports.AudioUtils = exports.AIAudioTranscription = exports.ANTHROPIC_NO_NATIVE_EMBEDDINGS = exports.AIEmbeddings = exports.ANTHROPIC_NO_NATIVE_AUDIO = exports.AIAudio = exports.AIMemory = exports.AITools = exports.AIMessages = exports.resolveOpenRouterProvider = exports.DEFAULT_LOCAL_API_KEY = exports.DEFAULT_OLLAMA_BASE_URL = exports.AIModels = exports.AI = void 0;
|
|
4
4
|
const ai_1 = require("./ai");
|
|
5
5
|
Object.defineProperty(exports, "AI", { enumerable: true, get: function () { return ai_1.AI; } });
|
|
6
6
|
Object.defineProperty(exports, "Langchain", { enumerable: true, get: function () { return ai_1.AI; } });
|
|
7
7
|
var models_1 = require("./langchain/models");
|
|
8
8
|
Object.defineProperty(exports, "AIModels", { enumerable: true, get: function () { return models_1.AIModels; } });
|
|
9
|
+
var models_2 = require("./langchain/models");
|
|
10
|
+
Object.defineProperty(exports, "DEFAULT_OLLAMA_BASE_URL", { enumerable: true, get: function () { return models_2.DEFAULT_OLLAMA_BASE_URL; } });
|
|
11
|
+
Object.defineProperty(exports, "DEFAULT_LOCAL_API_KEY", { enumerable: true, get: function () { return models_2.DEFAULT_LOCAL_API_KEY; } });
|
|
12
|
+
var models_3 = require("./langchain/models");
|
|
13
|
+
Object.defineProperty(exports, "resolveOpenRouterProvider", { enumerable: true, get: function () { return models_3.resolveOpenRouterProvider; } });
|
|
9
14
|
var messages_1 = require("./langchain/messages");
|
|
10
15
|
Object.defineProperty(exports, "AIMessages", { enumerable: true, get: function () { return messages_1.AIMessages; } });
|
|
11
16
|
var tools_1 = require("./langchain/tools");
|
|
12
17
|
Object.defineProperty(exports, "AITools", { enumerable: true, get: function () { return tools_1.AITools; } });
|
|
13
18
|
var memory_1 = require("./langchain/memory");
|
|
14
19
|
Object.defineProperty(exports, "AIMemory", { enumerable: true, get: function () { return memory_1.AIMemory; } });
|
|
20
|
+
var audio_1 = require("./audio");
|
|
21
|
+
Object.defineProperty(exports, "AIAudio", { enumerable: true, get: function () { return audio_1.AIAudio; } });
|
|
22
|
+
var audio_2 = require("./audio");
|
|
23
|
+
Object.defineProperty(exports, "ANTHROPIC_NO_NATIVE_AUDIO", { enumerable: true, get: function () { return audio_2.ANTHROPIC_NO_NATIVE_AUDIO; } });
|
|
24
|
+
var embeddings_1 = require("./embeddings");
|
|
25
|
+
Object.defineProperty(exports, "AIEmbeddings", { enumerable: true, get: function () { return embeddings_1.AIEmbeddings; } });
|
|
26
|
+
Object.defineProperty(exports, "ANTHROPIC_NO_NATIVE_EMBEDDINGS", { enumerable: true, get: function () { return embeddings_1.ANTHROPIC_NO_NATIVE_EMBEDDINGS; } });
|
|
27
|
+
/** @deprecated Use AIAudio instead */
|
|
15
28
|
var audio_transcription_1 = require("./langchain/audio-transcription");
|
|
16
29
|
Object.defineProperty(exports, "AIAudioTranscription", { enumerable: true, get: function () { return audio_transcription_1.AIAudioTranscription; } });
|
|
17
30
|
var audio_utils_1 = require("./utils/audio-utils");
|
|
@@ -19,8 +32,8 @@ Object.defineProperty(exports, "AudioUtils", { enumerable: true, get: function (
|
|
|
19
32
|
var image_utils_1 = require("./utils/image-utils");
|
|
20
33
|
Object.defineProperty(exports, "ImageUtils", { enumerable: true, get: function () { return image_utils_1.ImageUtils; } });
|
|
21
34
|
/** @deprecated Use AIModels instead. Will be removed in 2.0.0 */
|
|
22
|
-
var
|
|
23
|
-
Object.defineProperty(exports, "LangchainModels", { enumerable: true, get: function () { return
|
|
35
|
+
var models_4 = require("./langchain/models");
|
|
36
|
+
Object.defineProperty(exports, "LangchainModels", { enumerable: true, get: function () { return models_4.AIModels; } });
|
|
24
37
|
/** @deprecated Use AIMessages instead. Will be removed in 2.0.0 */
|
|
25
38
|
var messages_2 = require("./langchain/messages");
|
|
26
39
|
Object.defineProperty(exports, "LangchainMessages", { enumerable: true, get: function () { return messages_2.AIMessages; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,6BAA0B;AAQjB,mFARA,OAAE,OAQA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,6BAA0B;AAQjB,mFARA,OAAE,OAQA;AA4FI,0FApGN,OAAE,OAoGa;AAlFxB,6CAA8C;AAArC,kGAAA,QAAQ,OAAA;AACjB,6CAG4B;AAF1B,iHAAA,uBAAuB,OAAA;AACvB,+GAAA,qBAAqB,OAAA;AAWvB,6CAA+D;AAAtD,mHAAA,yBAAyB,OAAA;AAClC,iDAAkD;AAAzC,sGAAA,UAAU,OAAA;AACnB,2CAA4C;AAAnC,gGAAA,OAAO,OAAA;AAChB,6CAA8C;AAArC,kGAAA,QAAQ,OAAA;AAcjB,iCAAkC;AAAzB,gGAAA,OAAO,OAAA;AAiBhB,iCAAoD;AAA3C,kHAAA,yBAAyB,OAAA;AAClC,2CAA4E;AAAnE,0GAAA,YAAY,OAAA;AAAE,4HAAA,8BAA8B,OAAA;AAgBrD,sCAAsC;AACtC,uEAAuE;AAA9D,2HAAA,oBAAoB,OAAA;AAC7B,mDAAiD;AAAxC,yGAAA,UAAU,OAAA;AACnB,mDAAiD;AAAxC,yGAAA,UAAU,OAAA;AAyBnB,iEAAiE;AACjE,6CAAiE;AAAxD,yGAAA,QAAQ,OAAmB;AACpC,mEAAmE;AACnE,iDAAuE;AAA9D,6GAAA,UAAU,OAAqB;AACxC,gEAAgE;AAChE,2CAA8D;AAArD,uGAAA,OAAO,OAAkB;AAClC,6EAA6E;AAC7E,uEAAsG;AAA7F,kIAAA,oBAAoB,OAA+B"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import type { AudioBuffer, AudioMimeType } from "../@types/audio";
|
|
2
|
-
|
|
3
|
-
export type WhisperModel
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
responseFormat?: "json" | "text" | "srt" | "verbose_json" | "vtt";
|
|
10
|
-
temperature?: number;
|
|
11
|
-
timestampGranularities?: ("word" | "segment")[];
|
|
12
|
-
/** Formato do áudio: extensão ("mp3", "wav", "webm") ou MIME type ("audio/wav", "audio/webm") */
|
|
13
|
-
format?: string | AudioMimeType;
|
|
14
|
-
};
|
|
2
|
+
import type { OpenAITranscriptionOptions, WhisperModel } from "../audio/types";
|
|
3
|
+
export type { WhisperModel };
|
|
4
|
+
/** @deprecated Use OpenAITranscriptionOptions from AIAudio */
|
|
5
|
+
export type WhisperTranscriptionOptions = OpenAITranscriptionOptions;
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use {@link AIAudio.transcribeWithWhisper} instead.
|
|
8
|
+
*/
|
|
15
9
|
export declare class AIAudioTranscription {
|
|
16
10
|
static transcribeWithWhisper(audioBuffer: AudioBuffer, options?: WhisperTranscriptionOptions, openAIApiKey?: string): Promise<string>;
|
|
17
11
|
static transcribeFileWithWhisper(filePath: string, options?: WhisperTranscriptionOptions, openAIApiKey?: string): Promise<string>;
|
|
18
12
|
}
|
|
13
|
+
export type { AudioBuffer, AudioMimeType };
|
|
19
14
|
//# sourceMappingURL=audio-transcription.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-transcription.d.ts","sourceRoot":"","sources":["../../src/langchain/audio-transcription.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audio-transcription.d.ts","sourceRoot":"","sources":["../../src/langchain/audio-transcription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EACV,0BAA0B,EAC1B,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,8DAA8D;AAC9D,MAAM,MAAM,2BAA2B,GAAG,0BAA0B,CAAC;AAErE;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,qBAAqB,CAC1B,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,2BAAgC,EACzC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC;IAIlB,MAAM,CAAC,yBAAyB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,2BAAgC,EACzC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC;CAGnB;AAED,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -1,100 +1,16 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
3
|
exports.AIAudioTranscription = void 0;
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const audio_1 = require("../@types/audio");
|
|
45
|
-
function getExtension(format) {
|
|
46
|
-
if (!format)
|
|
47
|
-
return "mp3";
|
|
48
|
-
if (format.startsWith("audio/")) {
|
|
49
|
-
return audio_1.MIME_TO_EXTENSION[format] ?? "mp3";
|
|
50
|
-
}
|
|
51
|
-
return format.replace(/^\./, "");
|
|
52
|
-
}
|
|
53
|
-
function toBuffer(audioBuffer) {
|
|
54
|
-
if (audioBuffer instanceof Buffer)
|
|
55
|
-
return audioBuffer;
|
|
56
|
-
if (audioBuffer instanceof ArrayBuffer)
|
|
57
|
-
return Buffer.from(audioBuffer);
|
|
58
|
-
return Buffer.from(audioBuffer);
|
|
59
|
-
}
|
|
4
|
+
const audio_1 = require("../audio");
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Use {@link AIAudio.transcribeWithWhisper} instead.
|
|
7
|
+
*/
|
|
60
8
|
class AIAudioTranscription {
|
|
61
|
-
static
|
|
62
|
-
|
|
63
|
-
process.env.OPENAI_API_KEY = openAIApiKey;
|
|
64
|
-
}
|
|
65
|
-
const buffer = toBuffer(audioBuffer);
|
|
66
|
-
const extension = getExtension(options.format);
|
|
67
|
-
const fileName = `whisper-${Date.now()}.${extension}`;
|
|
68
|
-
const file = await (0, openai_2.toFile)(buffer, fileName);
|
|
69
|
-
const openai = new openai_1.default();
|
|
70
|
-
const transcriptionParams = {
|
|
71
|
-
file,
|
|
72
|
-
model: options.model ?? "whisper-1",
|
|
73
|
-
response_format: options.responseFormat ?? "text",
|
|
74
|
-
};
|
|
75
|
-
if (options.languageIn2Digits) {
|
|
76
|
-
transcriptionParams.language = options.languageIn2Digits;
|
|
77
|
-
}
|
|
78
|
-
if (options.prompt) {
|
|
79
|
-
transcriptionParams.prompt = options.prompt;
|
|
80
|
-
}
|
|
81
|
-
if (options.temperature !== undefined) {
|
|
82
|
-
transcriptionParams.temperature = options.temperature;
|
|
83
|
-
}
|
|
84
|
-
if (options.timestampGranularities) {
|
|
85
|
-
transcriptionParams.timestamp_granularities =
|
|
86
|
-
options.timestampGranularities;
|
|
87
|
-
}
|
|
88
|
-
const response = await openai.audio.transcriptions.create(transcriptionParams);
|
|
89
|
-
return typeof response === "string" ? response : response.text;
|
|
9
|
+
static transcribeWithWhisper(audioBuffer, options = {}, openAIApiKey) {
|
|
10
|
+
return audio_1.AIAudio.transcribeWithWhisper(audioBuffer, options, openAIApiKey);
|
|
90
11
|
}
|
|
91
|
-
static
|
|
92
|
-
|
|
93
|
-
throw new Error(`Arquivo não encontrado: ${filePath}`);
|
|
94
|
-
}
|
|
95
|
-
const audioBuffer = fs.readFileSync(filePath);
|
|
96
|
-
const format = options.format ?? (path.extname(filePath).replace(/^\./, "") || "mp3");
|
|
97
|
-
return this.transcribeWithWhisper(audioBuffer, { ...options, format }, openAIApiKey);
|
|
12
|
+
static transcribeFileWithWhisper(filePath, options = {}, openAIApiKey) {
|
|
13
|
+
return audio_1.AIAudio.transcribeFileWithWhisper(filePath, options, openAIApiKey);
|
|
98
14
|
}
|
|
99
15
|
}
|
|
100
16
|
exports.AIAudioTranscription = AIAudioTranscription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-transcription.js","sourceRoot":"","sources":["../../src/langchain/audio-transcription.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audio-transcription.js","sourceRoot":"","sources":["../../src/langchain/audio-transcription.ts"],"names":[],"mappings":";;;AACA,oCAAmC;AAWnC;;GAEG;AACH,MAAa,oBAAoB;IAC/B,MAAM,CAAC,qBAAqB,CAC1B,WAAwB,EACxB,UAAuC,EAAE,EACzC,YAAqB;QAErB,OAAO,eAAO,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,yBAAyB,CAC9B,QAAgB,EAChB,UAAuC,EAAE,EACzC,YAAqB;QAErB,OAAO,eAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5E,CAAC;CACF;AAhBD,oDAgBC"}
|
|
@@ -31,8 +31,11 @@ export type HumanMessageWithAudioOptions = {
|
|
|
31
31
|
filename?: string;
|
|
32
32
|
};
|
|
33
33
|
text?: string;
|
|
34
|
-
provider?: "openai" | "gemini" | "auto";
|
|
34
|
+
provider?: "openai" | "gemini" | "openrouter" | "auto";
|
|
35
35
|
openAIApiKey?: string;
|
|
36
|
+
openRouterApiKey?: string;
|
|
37
|
+
/** Modelo OpenRouter STT (ex.: openai/whisper-1) quando provider é openrouter ou auto com OR */
|
|
38
|
+
openRouterTranscriptionModel?: string;
|
|
36
39
|
};
|
|
37
40
|
export declare class AIMessages {
|
|
38
41
|
static system(message: string): SystemMessage;
|
|
@@ -40,7 +43,9 @@ export declare class AIMessages {
|
|
|
40
43
|
static humanImage(options: HumanMessageWithImageOptions): HumanMessage;
|
|
41
44
|
static humanAudio(options: HumanMessageWithAudioOptions): Promise<HumanMessage>;
|
|
42
45
|
static ai(message: string): AIMessage;
|
|
46
|
+
private static resolveAudioProvider;
|
|
43
47
|
private static createHumanMessageWithAudio;
|
|
44
48
|
private static processAudioOpenAi;
|
|
49
|
+
private static processAudioOpenRouter;
|
|
45
50
|
}
|
|
46
51
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/langchain/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,QAAQ,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,QAAQ,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/langchain/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,QAAQ,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,QAAQ,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE;QACL,MAAM,EAAE,WAAW,CAAC;QACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gGAAgG;IAChG,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF,qBAAa,UAAU;IACrB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa;IAI7C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IAI3C,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,4BAA4B,GAAG,YAAY;WA4BzD,UAAU,CACrB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,YAAY,CAAC;IA6BxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAIrC,OAAO,CAAC,MAAM,CAAC,oBAAoB;mBAWd,2BAA2B;mBA8D3B,kBAAkB;mBA2ClB,sBAAsB;CA8B5C"}
|
|
@@ -4,7 +4,7 @@ exports.AIMessages = void 0;
|
|
|
4
4
|
const langchain_1 = require("langchain");
|
|
5
5
|
const audio_utils_1 = require("../utils/audio-utils");
|
|
6
6
|
const image_utils_1 = require("../utils/image-utils");
|
|
7
|
-
const
|
|
7
|
+
const audio_1 = require("../audio");
|
|
8
8
|
class AIMessages {
|
|
9
9
|
static system(message) {
|
|
10
10
|
return new langchain_1.SystemMessage(message);
|
|
@@ -33,17 +33,30 @@ class AIMessages {
|
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
static async humanAudio(options) {
|
|
36
|
-
const { audio, text, provider = "auto", openAIApiKey } = options;
|
|
36
|
+
const { audio, text, provider = "auto", openAIApiKey, openRouterApiKey, openRouterTranscriptionModel, } = options;
|
|
37
37
|
const { buffer, mimeType, filename } = audio;
|
|
38
|
-
|
|
38
|
+
const resolvedProvider = this.resolveAudioProvider(provider, openAIApiKey, openRouterApiKey);
|
|
39
|
+
return this.createHumanMessageWithAudio(buffer, text, mimeType, filename, resolvedProvider, openAIApiKey, openRouterApiKey, openRouterTranscriptionModel);
|
|
39
40
|
}
|
|
40
41
|
static ai(message) {
|
|
41
42
|
return new langchain_1.AIMessage(message);
|
|
42
43
|
}
|
|
43
|
-
static
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
static resolveAudioProvider(provider, openAIApiKey, openRouterApiKey) {
|
|
45
|
+
if (provider !== "auto")
|
|
46
|
+
return provider;
|
|
47
|
+
if (openAIApiKey)
|
|
48
|
+
return "openai";
|
|
49
|
+
if (openRouterApiKey)
|
|
50
|
+
return "openrouter";
|
|
51
|
+
return "gemini";
|
|
52
|
+
}
|
|
53
|
+
static async createHumanMessageWithAudio(audioBuffer, text, mimeType, filename, provider = "gemini", openAIApiKey, openRouterApiKey, openRouterTranscriptionModel = "openai/whisper-1") {
|
|
54
|
+
if (provider === "openai") {
|
|
46
55
|
return await this.processAudioOpenAi(audioBuffer, mimeType, text, openAIApiKey);
|
|
56
|
+
}
|
|
57
|
+
if (provider === "openrouter") {
|
|
58
|
+
return await this.processAudioOpenRouter(audioBuffer, mimeType, text, openRouterApiKey, openRouterTranscriptionModel);
|
|
59
|
+
}
|
|
47
60
|
// Para Gemini e outros, usa multimodal direto (trabalho síncrono, mas retorna Promise para compatibilidade)
|
|
48
61
|
const base64Data = audio_utils_1.AudioUtils.bufferToBase64(audioBuffer);
|
|
49
62
|
const detectedMimeType = mimeType || audio_utils_1.AudioUtils.detectAudioMimeType(audioBuffer, filename);
|
|
@@ -80,7 +93,7 @@ class AIMessages {
|
|
|
80
93
|
const transcriptionOptions = mimeType
|
|
81
94
|
? { format: mimeType }
|
|
82
95
|
: { language: "pt" };
|
|
83
|
-
const transcribedText = await
|
|
96
|
+
const transcribedText = await audio_1.AIAudio.transcribeWithWhisper(audioBuffer, transcriptionOptions, openAIApiKey);
|
|
84
97
|
// Combina o texto original (se fornecido) com a transcrição
|
|
85
98
|
const finalText = text
|
|
86
99
|
? `${text}\n\nÁudio transcrito: ${transcribedText}`
|
|
@@ -95,6 +108,21 @@ class AIMessages {
|
|
|
95
108
|
"Certifique-se de que o arquivo de áudio é válido e está em um formato suportado (mp3, wav, etc.).");
|
|
96
109
|
}
|
|
97
110
|
}
|
|
111
|
+
static async processAudioOpenRouter(audioBuffer, mimeType, text, openRouterApiKey, openRouterTranscriptionModel = "openai/whisper-1") {
|
|
112
|
+
if (!openRouterApiKey) {
|
|
113
|
+
throw new Error("openRouterApiKey é necessária quando provider é 'openrouter'.");
|
|
114
|
+
}
|
|
115
|
+
const format = mimeType ?? audio_utils_1.AudioUtils.detectAudioMimeType(audioBuffer);
|
|
116
|
+
const { text: transcribedText } = await audio_1.AIAudio.transcribeOpenRouter(audioBuffer, {
|
|
117
|
+
model: openRouterTranscriptionModel,
|
|
118
|
+
format,
|
|
119
|
+
...(text ? {} : { language: "pt" }),
|
|
120
|
+
}, openRouterApiKey);
|
|
121
|
+
const finalText = text
|
|
122
|
+
? `${text}\n\nÁudio transcrito: ${transcribedText}`
|
|
123
|
+
: `Áudio transcrito: ${transcribedText}`;
|
|
124
|
+
return new langchain_1.HumanMessage(finalText);
|
|
125
|
+
}
|
|
98
126
|
}
|
|
99
127
|
exports.AIMessages = AIMessages;
|
|
100
128
|
//# sourceMappingURL=messages.js.map
|