@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,11 @@
1
+ export type OpenAIEmbeddingModel = "text-embedding-3-small" | "text-embedding-3-large" | "text-embedding-ada-002";
2
+ export type GeminiEmbeddingModel = "gemini-embedding-001" | "gemini-embedding-2-preview";
3
+ type OpenRouterOpenAIEmbeddingModel = `openai/${OpenAIEmbeddingModel}`;
4
+ type OpenRouterGoogleEmbeddingModel = `google/${GeminiEmbeddingModel}`;
5
+ type OpenRouterQwenEmbeddingModel = "qwen/qwen3-embedding-8b" | "qwen/qwen3-embedding-4b" | "qwen/qwen3-embedding-0.6b";
6
+ type OpenRouterOtherEmbeddingModel = "BAAI/bge-m3" | "perplexity/pplx-embed-v1-4b" | "perplexity/pplx-embed-v1-0.6b";
7
+ export type OpenRouterEmbeddingModel = OpenRouterOpenAIEmbeddingModel | OpenRouterGoogleEmbeddingModel | OpenRouterQwenEmbeddingModel | OpenRouterOtherEmbeddingModel;
8
+ export type OpenRouterPrefixedEmbeddingModel = `openrouter/${OpenRouterEmbeddingModel}`;
9
+ export type AIEmbeddingModelNames = OpenAIEmbeddingModel | GeminiEmbeddingModel | OpenRouterPrefixedEmbeddingModel;
10
+ export {};
11
+ //# sourceMappingURL=embedding-model-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-model-names.d.ts","sourceRoot":"","sources":["../../src/@types/embedding-model-names.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,wBAAwB,GACxB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,oBAAoB,GAC5B,sBAAsB,GACtB,4BAA4B,CAAC;AAEjC,KAAK,8BAA8B,GAAG,UAAU,oBAAoB,EAAE,CAAC;AAEvE,KAAK,8BAA8B,GAAG,UAAU,oBAAoB,EAAE,CAAC;AAEvE,KAAK,4BAA4B,GAC7B,yBAAyB,GACzB,yBAAyB,GACzB,2BAA2B,CAAC;AAEhC,KAAK,6BAA6B,GAC9B,aAAa,GACb,6BAA6B,GAC7B,+BAA+B,CAAC;AAEpC,MAAM,MAAM,wBAAwB,GAChC,8BAA8B,GAC9B,8BAA8B,GAC9B,4BAA4B,GAC5B,6BAA6B,CAAC;AAElC,MAAM,MAAM,gCAAgC,GAC1C,cAAc,wBAAwB,EAAE,CAAC;AAE3C,MAAM,MAAM,qBAAqB,GAC7B,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=embedding-model-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-model-names.js","sourceRoot":"","sources":["../../src/@types/embedding-model-names.ts"],"names":[],"mappings":""}
@@ -1,8 +1,24 @@
1
- type ChatGPTModels = "gpt-4" | "gpt-4o" | "gpt-4.1" | "gpt-5" | "gpt-5.1" | "gpt-5-mini" | "gpt-5-nano";
2
- type GeminiModels = "gemini-2.5-flash" | "gemini-2.5-pro" | "gemini-3-flash" | "gemini-3-pro";
3
- type AnthropicModels = "claude-opus-4.5" | "claude-haiku-4.5" | "claude-sonnet-4.5" | "claude-opus-4.1" | "claude-opus-4" | "claude-sonnet-4";
4
- type OpenRouterProvidersModels = `google/${GeminiModels}` | `openai/${ChatGPTModels}` | `anthropic/${AnthropicModels}`;
1
+ type ChatGPTModels = "gpt-4" | "gpt-4o" | "gpt-4o-mini" | "gpt-4.1" | "gpt-4.1-mini" | "gpt-4.1-nano" | "gpt-5" | "gpt-5.1" | "gpt-5-mini" | "gpt-5-nano" | "gpt-5.2" | "gpt-5.2-chat-latest" | "gpt-5.2-chat" | "gpt-5.3-chat-latest" | "gpt-5.3-chat" | "gpt-5.4" | "gpt-5.4-pro" | "gpt-5.4-mini" | "gpt-5.4-nano" | "gpt-5.5" | "gpt-5.5-pro" | "gpt-chat-latest" | "o3" | "o4-mini";
2
+ type GeminiModels = "gemini-2.5-flash" | "gemini-2.5-flash-lite" | "gemini-2.5-pro" | "gemini-3-flash" | "gemini-3-pro" | "gemini-3-flash-preview" | "gemini-3.5-flash" | "gemini-3.1-pro-preview" | "gemini-3.1-flash-lite";
3
+ type AnthropicModels = "claude-opus-4.7" | "claude-opus-4.7-fast" | "claude-opus-4.6" | "claude-opus-4.6-fast" | "claude-opus-4.5" | "claude-sonnet-4.6" | "claude-sonnet-4.5" | "claude-haiku-4.5" | "claude-opus-4.1" | "claude-opus-4" | "claude-sonnet-4" | "claude-3.5-haiku" | "claude-3-haiku";
4
+ /** Modelos DeepSeek via OpenRouter (prefixo `openrouter/deepseek/`) */
5
+ type DeepSeekModels = "deepseek-v4-pro" | "deepseek-v4-flash" | "deepseek-v4-flash:free" | "deepseek-chat" | "deepseek-chat-v3.1" | "deepseek-r1" | "deepseek-r1-0528" | "deepseek-v3.2" | "deepseek-v3.2-speciale" | "deepseek-v3.1-terminus";
6
+ /** Modelos Qwen via OpenRouter (prefixo `openrouter/qwen/`) */
7
+ type QwenModels = "qwen3.7-max" | "qwen3.6-plus" | "qwen3.6-flash" | "qwen3.6-max-preview" | "qwen3-max" | "qwen3-max-thinking" | "qwen3-coder" | "qwen3-coder-plus" | "qwen3-coder-next" | "qwen3-coder:free" | "qwen3-235b-a22b" | "qwen3.5-plus-20260420" | "qwen3.5-397b-a17b" | "qwen3-vl-235b-a22b-instruct" | "qwen3-next-80b-a3b-instruct";
8
+ /** Modelos Kimi (Moonshot) via OpenRouter (prefixo `openrouter/moonshotai/`) */
9
+ type MoonshotModels = "kimi-k2.6" | "kimi-k2.6:free" | "kimi-k2.5" | "kimi-k2-thinking";
10
+ /** Modelos MiMo (Xiaomi) via OpenRouter (prefixo `openrouter/xiaomi/`) */
11
+ type XiaomiModels = "mimo-v2.5-pro" | "mimo-v2.5" | "mimo-v2-flash" | "mimo-v2-omni";
12
+ /** Modelos GLM (Zhipu) via OpenRouter (prefixo `openrouter/z-ai/`) */
13
+ type ZAiModels = "glm-5" | "glm-4.7" | "glm-4.7-flash";
14
+ /** Modelos MiniMax via OpenRouter (prefixo `openrouter/minimax/`) */
15
+ type MiniMaxModels = "minimax-m2.7" | "minimax-m2.5:free";
16
+ type OpenRouterProvidersModels = `google/${GeminiModels}` | `openai/${ChatGPTModels}` | `anthropic/${AnthropicModels}` | `deepseek/${DeepSeekModels}` | `qwen/${QwenModels}` | `moonshotai/${MoonshotModels}` | `xiaomi/${XiaomiModels}` | `z-ai/${ZAiModels}` | `minimax/${MiniMaxModels}`;
5
17
  type OpenRouterModels = `openrouter/${OpenRouterProvidersModels}`;
6
- export type AIModelNames = ChatGPTModels | GeminiModels | OpenRouterModels;
18
+ /** Modelos via API nativa do Ollama (prefixo `ollama/`) */
19
+ type OllamaModels = `ollama/${string}`;
20
+ /** Modelos via API compatível com OpenAI — LM Studio, Ollama `/v1`, vLLM, etc. (prefixo `local/`) */
21
+ type LocalModels = `local/${string}`;
22
+ export type AIModelNames = ChatGPTModels | GeminiModels | OpenRouterModels | OllamaModels | LocalModels;
7
23
  export {};
8
24
  //# sourceMappingURL=model-names.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-names.d.ts","sourceRoot":"","sources":["../../src/@types/model-names.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GACd,OAAO,GACP,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,KAAK,YAAY,GACb,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,CAAC;AAEnB,KAAK,eAAe,GAAG,iBAAiB,GACpC,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,iBAAiB,CAAC;AAEtB,KAAK,yBAAyB,GAC1B,UAAU,YAAY,EAAE,GACxB,UAAU,aAAa,EAAE,GACzB,aAAa,eAAe,EAAE,CAAA;AAElC,KAAK,gBAAgB,GAAG,cAAc,yBAAyB,EAAE,CAAC;AAElE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,CAAC"}
1
+ {"version":3,"file":"model-names.d.ts","sourceRoot":"","sources":["../../src/@types/model-names.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GACd,OAAO,GACP,QAAQ,GACR,aAAa,GACb,SAAS,GACT,cAAc,GACd,cAAc,GACd,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,qBAAqB,GACrB,cAAc,GACd,qBAAqB,GACrB,cAAc,GACd,SAAS,GACT,aAAa,GACb,cAAc,GACd,cAAc,GACd,SAAS,GACT,aAAa,GACb,iBAAiB,GACjB,IAAI,GACJ,SAAS,CAAC;AAEd,KAAK,YAAY,GACb,kBAAkB,GAClB,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,wBAAwB,GACxB,kBAAkB,GAClB,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,KAAK,eAAe,GAChB,iBAAiB,GACjB,sBAAsB,GACtB,iBAAiB,GACjB,sBAAsB,GACtB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,CAAC;AAErB,uEAAuE;AACvE,KAAK,cAAc,GACf,iBAAiB,GACjB,mBAAmB,GACnB,wBAAwB,GACxB,eAAe,GACf,oBAAoB,GACpB,aAAa,GACb,kBAAkB,GAClB,eAAe,GACf,wBAAwB,GACxB,wBAAwB,CAAC;AAE7B,+DAA+D;AAC/D,KAAK,UAAU,GACX,aAAa,GACb,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,WAAW,GACX,oBAAoB,GACpB,aAAa,GACb,kBAAkB,GAClB,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,uBAAuB,GACvB,mBAAmB,GACnB,6BAA6B,GAC7B,6BAA6B,CAAC;AAElC,gFAAgF;AAChF,KAAK,cAAc,GACf,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,kBAAkB,CAAC;AAEvB,0EAA0E;AAC1E,KAAK,YAAY,GACb,eAAe,GACf,WAAW,GACX,eAAe,GACf,cAAc,CAAC;AAEnB,sEAAsE;AACtE,KAAK,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,eAAe,CAAC;AAEvD,qEAAqE;AACrE,KAAK,aAAa,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAE1D,KAAK,yBAAyB,GAC1B,UAAU,YAAY,EAAE,GACxB,UAAU,aAAa,EAAE,GACzB,aAAa,eAAe,EAAE,GAC9B,YAAY,cAAc,EAAE,GAC5B,QAAQ,UAAU,EAAE,GACpB,cAAc,cAAc,EAAE,GAC9B,UAAU,YAAY,EAAE,GACxB,QAAQ,SAAS,EAAE,GACnB,WAAW,aAAa,EAAE,CAAC;AAE/B,KAAK,gBAAgB,GAAG,cAAc,yBAAyB,EAAE,CAAC;AAElE,2DAA2D;AAC3D,KAAK,YAAY,GAAG,UAAU,MAAM,EAAE,CAAC;AAEvC,qGAAqG;AACrG,KAAK,WAAW,GAAG,SAAS,MAAM,EAAE,CAAC;AAErC,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,WAAW,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Preferências de roteamento de providers do OpenRouter.
3
+ * @see https://openrouter.ai/docs/guides/routing/provider-selection
4
+ */
5
+ export type OpenRouterProviderSort = "price" | "latency" | "throughput" | {
6
+ by: "price" | "latency" | "throughput";
7
+ partition?: "model" | "none";
8
+ };
9
+ /** Teto de preço em USD por milhão de tokens (prompt/completion) ou por request/imagem. */
10
+ export type OpenRouterMaxPrice = {
11
+ prompt?: number;
12
+ completion?: number;
13
+ image?: number;
14
+ request?: number;
15
+ };
16
+ export type OpenRouterProviderPreferences = {
17
+ only?: string[];
18
+ order?: string[];
19
+ ignore?: string[];
20
+ allow_fallbacks?: boolean;
21
+ require_parameters?: boolean;
22
+ sort?: OpenRouterProviderSort;
23
+ max_price?: OpenRouterMaxPrice;
24
+ };
25
+ //# sourceMappingURL=openrouter-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-provider.d.ts","sourceRoot":"","sources":["../../src/@types/openrouter-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC9B,OAAO,GACP,SAAS,GACT,YAAY,GACZ;IAAE,EAAE,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,CAAC;AAE7E,2FAA2F;AAC3F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=openrouter-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-provider.js","sourceRoot":"","sources":["../../src/@types/openrouter-provider.ts"],"names":[],"mappings":""}
package/dist/ai.d.ts CHANGED
@@ -8,6 +8,12 @@ type AIConstructor = {
8
8
  googleGeminiToken?: string;
9
9
  openAIApiKey?: string;
10
10
  openRouterApiKey?: string;
11
+ /** URL base da API nativa do Ollama (modelos `ollama/*`). Padrão: http://127.0.0.1:11434 */
12
+ ollamaBaseUrl?: string;
13
+ /** URL base OpenAI-compatible para modelos `local/*` (ex.: http://localhost:1234/v1) */
14
+ localBaseUrl?: string;
15
+ /** API key enviada ao servidor local; muitos aceitam qualquer valor */
16
+ localApiKey?: string;
11
17
  /** Lista padrão de modelos de fallback (usada em call/callStructuredOutput quando não passada no método) */
12
18
  aiModelsFallback?: AIModelNames[];
13
19
  /** Configuração de persistência de histórico (memory, sqlite, postgres, redis, mongodb) ou instância AIMemory */
@@ -33,6 +39,7 @@ export declare class AI {
33
39
  private invokeWithRetryAndFallback;
34
40
  call(params: AICallParams): AICallReturn;
35
41
  callStructuredOutput<T extends z.ZodSchema>(params: AICallStructuredOutputParams<T>): AICallStructuredOutputReturn<typeof params.outputSchema>;
42
+ private withDeepSeekJsonObjectParams;
36
43
  /**
37
44
  * Normaliza schemas Zod para compatibilidade com OpenAI/OpenRouter
38
45
  * OpenAI exige que todos os campos em properties estejam no array required
package/dist/ai.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EACL,QAAQ,EACR,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,KAAK,aAAa,GAAG;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC;IAClC,iHAAiH;IACjH,MAAM,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,qBAAa,EAAE;IAqBD,OAAO,CAAC,MAAM;IApB1B,OAAO,CAAC,OAAO,CAAuB;IAEtC;;;;;OAKG;IACH,IAAI,MAAM,IAAI,QAAQ,CAOrB;IAED,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,mBAAmB,CAA2C;gBAElD,MAAM,EAAE,aAAa;YAY3B,eAAe;IAY7B,OAAO,CAAC,8BAA8B;YAWxB,0BAA0B;IAyBlC,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY;IAiCxC,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAC9C,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC,GACtC,4BAA4B,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC;IA+B3D;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAoC1B,WAAW,CACf,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,SAAS,GACrC,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAc9B,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,mBAAmB;CAU5B"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAUA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EACL,QAAQ,EACR,KAAK,mBAAmB,EACxB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAE1B,KAAK,aAAa,GAAG;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAC;IAClC,iHAAiH;IACjH,MAAM,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF,qBAAa,EAAE;IAqBD,OAAO,CAAC,MAAM;IApB1B,OAAO,CAAC,OAAO,CAAuB;IAEtC;;;;;OAKG;IACH,IAAI,MAAM,IAAI,QAAQ,CAOrB;IAED,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,mBAAmB,CAA2C;gBAElD,MAAM,EAAE,aAAa;YAY3B,eAAe;IAY7B,OAAO,CAAC,8BAA8B;YAWxB,0BAA0B;IAyBlC,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY;IAiCxC,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAC9C,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC,GACtC,4BAA4B,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC;IA8C3D,OAAO,CAAC,4BAA4B;IAiBpC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAoC1B,WAAW,CACf,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,SAAS,GACrC,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAc9B,OAAO,CAAC,QAAQ;IA4EhB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,mBAAmB;CAU5B"}
package/dist/ai.js CHANGED
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AI = void 0;
7
7
  const models_1 = require("./langchain/models");
8
+ const structured_output_1 = require("./langchain/structured-output");
8
9
  const zod_1 = __importDefault(require("zod"));
9
10
  const langchain_1 = require("langchain");
10
11
  const memory_1 = require("./langchain/memory");
@@ -101,14 +102,36 @@ class AI {
101
102
  const invokeConfig = params.threadId && checkpointer
102
103
  ? { configurable: { thread_id: params.threadId } }
103
104
  : undefined;
104
- const { result: response, agent } = await this.invokeWithRetryAndFallback(params, (paramsForModel) => (0, langchain_1.createAgent)({
105
- ...this.standardAgent(paramsForModel, checkpointer),
106
- responseFormat: this.normalizeSchemaForOpenAI(outputSchema, paramsForModel.aiModel),
107
- }), (agent) => agent.invoke({ messages }, invokeConfig));
105
+ const { result: response, agent } = await this.invokeWithRetryAndFallback(params, (paramsForModel) => {
106
+ const useJsonObject = (0, structured_output_1.isDeepSeekJsonObjectOnlyModel)(paramsForModel.aiModel);
107
+ const agentParams = useJsonObject
108
+ ? this.withDeepSeekJsonObjectParams(paramsForModel, outputSchema)
109
+ : paramsForModel;
110
+ return (0, langchain_1.createAgent)({
111
+ ...this.standardAgent(agentParams, checkpointer),
112
+ ...(useJsonObject
113
+ ? { responseFormat: undefined }
114
+ : {
115
+ responseFormat: this.normalizeSchemaForOpenAI(outputSchema, paramsForModel.aiModel),
116
+ }),
117
+ });
118
+ }, (agent) => agent.invoke({ messages }, invokeConfig));
108
119
  this._memory?.setAgent(agent);
109
- const parsedResponse = outputSchema.parse(response?.structuredResponse);
120
+ const parsedResponse = response?.structuredResponse != null
121
+ ? outputSchema.parse(response.structuredResponse)
122
+ : outputSchema.parse((0, structured_output_1.parseJsonFromAssistantMessages)(response.messages));
110
123
  return { response: parsedResponse };
111
124
  }
125
+ withDeepSeekJsonObjectParams(params, outputSchema) {
126
+ return {
127
+ ...params,
128
+ systemPrompt: (0, structured_output_1.mergeSystemPromptWithJsonSchema)(params.systemPrompt, outputSchema),
129
+ modelConfig: {
130
+ ...params.modelConfig,
131
+ openRouterForceJsonObject: true,
132
+ },
133
+ };
134
+ }
112
135
  /**
113
136
  * Normaliza schemas Zod para compatibilidade com OpenAI/OpenRouter
114
137
  * OpenAI exige que todos os campos em properties estejam no array required
@@ -178,6 +201,34 @@ class AI {
178
201
  ...config,
179
202
  model: modelName,
180
203
  apiKey: this.config.openRouterApiKey,
204
+ openRouterProvider: modelConfig?.openRouterProvider,
205
+ openRouterAllowAllProviders: modelConfig?.openRouterAllowAllProviders,
206
+ openRouterForceJsonObject: modelConfig?.openRouterForceJsonObject,
207
+ });
208
+ }
209
+ if (aiModel.startsWith("ollama/")) {
210
+ const modelName = aiModel.replace(/^ollama\//, "");
211
+ return models_1.AIModels.ollama({
212
+ model: modelName,
213
+ baseUrl: modelConfig?.baseUrl ?? this.config.ollamaBaseUrl ?? models_1.DEFAULT_OLLAMA_BASE_URL,
214
+ maxTokens: config.maxTokens,
215
+ temperature: config.temperature,
216
+ numCtx: modelConfig?.numCtx,
217
+ });
218
+ }
219
+ if (aiModel.startsWith("local/")) {
220
+ const modelName = aiModel.replace(/^local\//, "");
221
+ const baseURL = modelConfig?.baseUrl ?? this.config.localBaseUrl;
222
+ if (!baseURL) {
223
+ throw new Error('[@luanpoppe/ai] localBaseUrl é obrigatório no construtor de AI (ou modelConfig.baseUrl na chamada) para modelos "local/*". ' +
224
+ "Ex.: localBaseUrl: \"http://localhost:1234/v1\" (LM Studio) ou \"http://127.0.0.1:11434/v1\" (Ollama OpenAI-compatible).");
225
+ }
226
+ return models_1.AIModels.openaiCompatible({
227
+ model: modelName,
228
+ baseURL,
229
+ apiKey: this.config.localApiKey,
230
+ maxTokens: config.maxTokens,
231
+ temperature: config.temperature,
181
232
  });
182
233
  }
183
234
  throw new Error("Model not supported");
package/dist/ai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AudioBuffer } from "../@types/audio";
2
+ import type { GeminiTranscriptionOptions } from "./types";
3
+ export declare function transcribeWithGeminiPrompt(audioBuffer: AudioBuffer, options?: GeminiTranscriptionOptions): Promise<string>;
4
+ //# sourceMappingURL=gemini-transcription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-transcription.d.ts","sourceRoot":"","sources":["../../src/audio/gemini-transcription.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAK1D,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,CAAC,CAkCjB"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transcribeWithGeminiPrompt = transcribeWithGeminiPrompt;
4
+ const google_genai_1 = require("@langchain/google-genai");
5
+ const langchain_1 = require("langchain");
6
+ const audio_utils_1 = require("../utils/audio-utils");
7
+ const DEFAULT_GEMINI_TRANSCRIBE_PROMPT = "Transcreva o áudio a seguir em texto. Se possível, inclua timestamps aproximados no formato [mm:ss]. Responda apenas com a transcrição.";
8
+ async function transcribeWithGeminiPrompt(audioBuffer, options = {}) {
9
+ const apiKey = options.googleGeminiToken;
10
+ if (!apiKey) {
11
+ throw new Error("googleGeminiToken é obrigatório para transcribeWithGeminiPrompt.");
12
+ }
13
+ const model = new google_genai_1.ChatGoogleGenerativeAI({
14
+ model: options.model ?? "gemini-2.5-flash",
15
+ apiKey,
16
+ });
17
+ const base64Data = audio_utils_1.AudioUtils.bufferToBase64(audioBuffer);
18
+ const mimeType = audio_utils_1.AudioUtils.detectAudioMimeType(audioBuffer);
19
+ const message = new langchain_1.HumanMessage({
20
+ content: [
21
+ {
22
+ type: "text",
23
+ text: options.prompt ?? DEFAULT_GEMINI_TRANSCRIBE_PROMPT,
24
+ },
25
+ {
26
+ type: "audio",
27
+ source_type: "base64",
28
+ data: base64Data,
29
+ mime_type: mimeType,
30
+ },
31
+ ],
32
+ });
33
+ const response = await model.invoke([message]);
34
+ const content = response.content;
35
+ return typeof content === "string" ? content : JSON.stringify(content);
36
+ }
37
+ //# sourceMappingURL=gemini-transcription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-transcription.js","sourceRoot":"","sources":["../../src/audio/gemini-transcription.ts"],"names":[],"mappings":";;AASA,gEAqCC;AA9CD,0DAAiE;AACjE,yCAAyC;AAEzC,sDAAkD;AAGlD,MAAM,gCAAgC,GACpC,yIAAyI,CAAC;AAErI,KAAK,UAAU,0BAA0B,CAC9C,WAAwB,EACxB,UAAsC,EAAE;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,qCAAsB,CAAC;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,kBAAkB;QAC1C,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,wBAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,wBAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,wBAAY,CAAC;QAC/B,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,gCAAgC;aACzD;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,QAAQ;gBACrB,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,QAAQ;aACpB;SACK;KACF,CAAC,CAAC;IAEV,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { AudioBuffer } from "../@types/audio";
2
+ import type { OpenAITranscriptionDetailed, OpenAITranscriptionOptions, OpenRouterSpeechOptions, OpenRouterTranscriptionOptions, OpenRouterTranscriptionResult, OpenAISpeechOptions, SpeechResult } from "./types";
3
+ import { transcribeDetailedOpenAI, transcribeDiarizedOpenAI, transcribeFileWithWhisperOpenAI, transcribeToSrtOpenAI, transcribeToVttOpenAI, transcribeWithWhisperOpenAI, translateOpenAI } from "./transcription-openai";
4
+ import { transcribeOpenRouter } from "./transcription-openrouter";
5
+ import { speakOpenAI, speakOpenAIStream } from "./speech-openai";
6
+ import { speakOpenRouter, speakOpenRouterStream } from "./speech-openrouter";
7
+ import { transcribeWithGeminiPrompt } from "./gemini-transcription";
8
+ export type { WhisperModel, OpenAITranscriptionOptions, OpenAITranscriptionResponseFormat, OpenAITranscriptionDetailed, OpenRouterTranscriptionOptions, OpenRouterTranscriptionResult, OpenAISpeechOptions, OpenAISpeechModel, OpenRouterSpeechOptions, SpeechResult, TranscriptionWord, TranscriptionSegment, DiarizedSegment, GeminiTranscriptionOptions, } from "./types";
9
+ export { ANTHROPIC_NO_NATIVE_AUDIO } from "./types";
10
+ export declare class AIAudio {
11
+ static transcribeDetailedOpenAI: typeof transcribeDetailedOpenAI;
12
+ static transcribeWithWhisper: typeof transcribeWithWhisperOpenAI;
13
+ static transcribeFileWithWhisper: typeof transcribeFileWithWhisperOpenAI;
14
+ static transcribeToSrtOpenAI: typeof transcribeToSrtOpenAI;
15
+ static transcribeToVttOpenAI: typeof transcribeToVttOpenAI;
16
+ static transcribeDiarizedOpenAI: typeof transcribeDiarizedOpenAI;
17
+ static translateOpenAI: typeof translateOpenAI;
18
+ static transcribeOpenRouter: typeof transcribeOpenRouter;
19
+ static speakOpenAI: typeof speakOpenAI;
20
+ static speakOpenAIStream: typeof speakOpenAIStream;
21
+ static speakOpenRouter: typeof speakOpenRouter;
22
+ static speakOpenRouterStream: typeof speakOpenRouterStream;
23
+ static transcribeWithGeminiPrompt: typeof transcribeWithGeminiPrompt;
24
+ /** @deprecated Use AIAudio.transcribeWithWhisper */
25
+ static transcribeWithWhisperLegacy(audioBuffer: AudioBuffer, options?: OpenAITranscriptionOptions, openAIApiKey?: string): Promise<string>;
26
+ static transcribeFileDetailedOpenAI(filePath: string, options?: OpenAITranscriptionOptions, openAIApiKey?: string): Promise<OpenAITranscriptionDetailed>;
27
+ static transcribeDetailedOpenRouter(audioBuffer: AudioBuffer, options: OpenRouterTranscriptionOptions, openRouterApiKey?: string): Promise<OpenRouterTranscriptionResult>;
28
+ static speak(text: string, options: OpenAISpeechOptions & {
29
+ provider?: "openai";
30
+ }, openAIApiKey?: string): Promise<SpeechResult>;
31
+ static speakViaOpenRouter(text: string, options: OpenRouterSpeechOptions, openRouterApiKey?: string): Promise<SpeechResult>;
32
+ }
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAEV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,6BAA6B,EAC7B,mBAAmB,EACnB,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EAExB,+BAA+B,EAC/B,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,YAAY,EACV,YAAY,EACZ,0BAA0B,EAC1B,iCAAiC,EACjC,2BAA2B,EAC3B,8BAA8B,EAC9B,6BAA6B,EAC7B,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,0BAA0B,GAC3B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEpD,qBAAa,OAAO;IAClB,MAAM,CAAC,wBAAwB,kCAA4B;IAC3D,MAAM,CAAC,qBAAqB,qCAA+B;IAC3D,MAAM,CAAC,yBAAyB,yCAAmC;IACnE,MAAM,CAAC,qBAAqB,+BAAyB;IACrD,MAAM,CAAC,qBAAqB,+BAAyB;IACrD,MAAM,CAAC,wBAAwB,kCAA4B;IAC3D,MAAM,CAAC,eAAe,yBAAmB;IACzC,MAAM,CAAC,oBAAoB,8BAAwB;IACnD,MAAM,CAAC,WAAW,qBAAe;IACjC,MAAM,CAAC,iBAAiB,2BAAqB;IAC7C,MAAM,CAAC,eAAe,yBAAmB;IACzC,MAAM,CAAC,qBAAqB,+BAAyB;IACrD,MAAM,CAAC,0BAA0B,oCAA8B;IAE/D,oDAAoD;IACpD,MAAM,CAAC,2BAA2B,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,0BAA0B,EACpC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC;WAIL,4BAA4B,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,0BAA0B,EACpC,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,2BAA2B,CAAC;WAI1B,4BAA4B,CACvC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,8BAA8B,EACvC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,6BAA6B,CAAC;WAI5B,KAAK,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,GAAG;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,EACtD,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,YAAY,CAAC;WAIX,kBAAkB,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC;CAGzB"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AIAudio = exports.ANTHROPIC_NO_NATIVE_AUDIO = void 0;
4
+ const transcription_openai_1 = require("./transcription-openai");
5
+ const transcription_openrouter_1 = require("./transcription-openrouter");
6
+ const speech_openai_1 = require("./speech-openai");
7
+ const speech_openrouter_1 = require("./speech-openrouter");
8
+ const gemini_transcription_1 = require("./gemini-transcription");
9
+ var types_1 = require("./types");
10
+ Object.defineProperty(exports, "ANTHROPIC_NO_NATIVE_AUDIO", { enumerable: true, get: function () { return types_1.ANTHROPIC_NO_NATIVE_AUDIO; } });
11
+ class AIAudio {
12
+ static transcribeDetailedOpenAI = transcription_openai_1.transcribeDetailedOpenAI;
13
+ static transcribeWithWhisper = transcription_openai_1.transcribeWithWhisperOpenAI;
14
+ static transcribeFileWithWhisper = transcription_openai_1.transcribeFileWithWhisperOpenAI;
15
+ static transcribeToSrtOpenAI = transcription_openai_1.transcribeToSrtOpenAI;
16
+ static transcribeToVttOpenAI = transcription_openai_1.transcribeToVttOpenAI;
17
+ static transcribeDiarizedOpenAI = transcription_openai_1.transcribeDiarizedOpenAI;
18
+ static translateOpenAI = transcription_openai_1.translateOpenAI;
19
+ static transcribeOpenRouter = transcription_openrouter_1.transcribeOpenRouter;
20
+ static speakOpenAI = speech_openai_1.speakOpenAI;
21
+ static speakOpenAIStream = speech_openai_1.speakOpenAIStream;
22
+ static speakOpenRouter = speech_openrouter_1.speakOpenRouter;
23
+ static speakOpenRouterStream = speech_openrouter_1.speakOpenRouterStream;
24
+ static transcribeWithGeminiPrompt = gemini_transcription_1.transcribeWithGeminiPrompt;
25
+ /** @deprecated Use AIAudio.transcribeWithWhisper */
26
+ static transcribeWithWhisperLegacy(audioBuffer, options, openAIApiKey) {
27
+ return (0, transcription_openai_1.transcribeWithWhisperOpenAI)(audioBuffer, options, openAIApiKey);
28
+ }
29
+ static async transcribeFileDetailedOpenAI(filePath, options, openAIApiKey) {
30
+ return (0, transcription_openai_1.transcribeFileDetailedOpenAI)(filePath, options, openAIApiKey);
31
+ }
32
+ static async transcribeDetailedOpenRouter(audioBuffer, options, openRouterApiKey) {
33
+ return (0, transcription_openrouter_1.transcribeOpenRouter)(audioBuffer, options, openRouterApiKey);
34
+ }
35
+ static async speak(text, options, openAIApiKey) {
36
+ return (0, speech_openai_1.speakOpenAI)(text, options, openAIApiKey);
37
+ }
38
+ static async speakViaOpenRouter(text, options, openRouterApiKey) {
39
+ return (0, speech_openrouter_1.speakOpenRouter)(text, options, openRouterApiKey);
40
+ }
41
+ }
42
+ exports.AIAudio = AIAudio;
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":";;;AAWA,iEASgC;AAChC,yEAAkE;AAClE,mDAAiE;AACjE,2DAA6E;AAC7E,iEAAoE;AAmBpE,iCAAoD;AAA3C,kHAAA,yBAAyB,OAAA;AAElC,MAAa,OAAO;IAClB,MAAM,CAAC,wBAAwB,GAAG,+CAAwB,CAAC;IAC3D,MAAM,CAAC,qBAAqB,GAAG,kDAA2B,CAAC;IAC3D,MAAM,CAAC,yBAAyB,GAAG,sDAA+B,CAAC;IACnE,MAAM,CAAC,qBAAqB,GAAG,4CAAqB,CAAC;IACrD,MAAM,CAAC,qBAAqB,GAAG,4CAAqB,CAAC;IACrD,MAAM,CAAC,wBAAwB,GAAG,+CAAwB,CAAC;IAC3D,MAAM,CAAC,eAAe,GAAG,sCAAe,CAAC;IACzC,MAAM,CAAC,oBAAoB,GAAG,+CAAoB,CAAC;IACnD,MAAM,CAAC,WAAW,GAAG,2BAAW,CAAC;IACjC,MAAM,CAAC,iBAAiB,GAAG,iCAAiB,CAAC;IAC7C,MAAM,CAAC,eAAe,GAAG,mCAAe,CAAC;IACzC,MAAM,CAAC,qBAAqB,GAAG,yCAAqB,CAAC;IACrD,MAAM,CAAC,0BAA0B,GAAG,iDAA0B,CAAC;IAE/D,oDAAoD;IACpD,MAAM,CAAC,2BAA2B,CAChC,WAAwB,EACxB,OAAoC,EACpC,YAAqB;QAErB,OAAO,IAAA,kDAA2B,EAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,4BAA4B,CACvC,QAAgB,EAChB,OAAoC,EACpC,YAAqB;QAErB,OAAO,IAAA,mDAA4B,EAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,4BAA4B,CACvC,WAAwB,EACxB,OAAuC,EACvC,gBAAyB;QAEzB,OAAO,IAAA,+CAAoB,EAAC,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,IAAY,EACZ,OAAsD,EACtD,YAAqB;QAErB,OAAO,IAAA,2BAAW,EAAC,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAC7B,IAAY,EACZ,OAAgC,EAChC,gBAAyB;QAEzB,OAAO,IAAA,mCAAe,EAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC1D,CAAC;;AAtDH,0BAuDC"}
@@ -0,0 +1,2 @@
1
+ export { OPENROUTER_API_BASE, createOpenRouterOpenAIClient, } from "../utils/openrouter-client";
2
+ //# sourceMappingURL=openrouter-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-client.d.ts","sourceRoot":"","sources":["../../src/audio/openrouter-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOpenRouterOpenAIClient = exports.OPENROUTER_API_BASE = void 0;
4
+ var openrouter_client_1 = require("../utils/openrouter-client");
5
+ Object.defineProperty(exports, "OPENROUTER_API_BASE", { enumerable: true, get: function () { return openrouter_client_1.OPENROUTER_API_BASE; } });
6
+ Object.defineProperty(exports, "createOpenRouterOpenAIClient", { enumerable: true, get: function () { return openrouter_client_1.createOpenRouterOpenAIClient; } });
7
+ //# sourceMappingURL=openrouter-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-client.js","sourceRoot":"","sources":["../../src/audio/openrouter-client.ts"],"names":[],"mappings":";;;AAAA,gEAGoC;AAFlC,wHAAA,mBAAmB,OAAA;AACnB,iIAAA,4BAA4B,OAAA"}
@@ -0,0 +1,4 @@
1
+ import type { OpenAISpeechOptions, SpeechResult } from "./types";
2
+ export declare function speakOpenAI(text: string, options: OpenAISpeechOptions, openAIApiKey?: string): Promise<SpeechResult>;
3
+ export declare function speakOpenAIStream(text: string, options: OpenAISpeechOptions, openAIApiKey?: string): Promise<ReadableStream<Uint8Array>>;
4
+ //# sourceMappingURL=speech-openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-openai.d.ts","sourceRoot":"","sources":["../../src/audio/speech-openai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA+BjE,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAgBrC"}
@@ -0,0 +1,65 @@
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.speakOpenAI = speakOpenAI;
7
+ exports.speakOpenAIStream = speakOpenAIStream;
8
+ const openai_1 = __importDefault(require("openai"));
9
+ const CONTENT_TYPE_BY_FORMAT = {
10
+ mp3: "audio/mpeg",
11
+ opus: "audio/opus",
12
+ aac: "audio/aac",
13
+ flac: "audio/flac",
14
+ wav: "audio/wav",
15
+ pcm: "audio/pcm",
16
+ };
17
+ function validateSpeechOptions(options) {
18
+ const model = options.model ?? "gpt-4o-mini-tts";
19
+ if (options.instructions &&
20
+ model !== "gpt-4o-mini-tts" &&
21
+ model !== "gpt-4o-mini-tts-2025-12-15") {
22
+ throw new Error("[@luanpoppe/ai] instructions em TTS só é suportado por modelos gpt-4o-mini-tts.");
23
+ }
24
+ }
25
+ function createOpenAIClient(apiKey) {
26
+ if (!apiKey) {
27
+ throw new Error("OpenAI API key is not passed in the speech parameters");
28
+ }
29
+ return new openai_1.default({ apiKey });
30
+ }
31
+ async function speakOpenAI(text, options, openAIApiKey) {
32
+ validateSpeechOptions(options);
33
+ const openai = createOpenAIClient(openAIApiKey);
34
+ const responseFormat = options.responseFormat ?? "mp3";
35
+ const model = options.model ?? "gpt-4o-mini-tts";
36
+ const response = await openai.audio.speech.create({
37
+ model,
38
+ voice: options.voice,
39
+ input: text,
40
+ response_format: responseFormat,
41
+ ...(options.speed !== undefined ? { speed: options.speed } : {}),
42
+ ...(options.instructions ? { instructions: options.instructions } : {}),
43
+ });
44
+ const arrayBuffer = await response.arrayBuffer();
45
+ return {
46
+ audio: Buffer.from(arrayBuffer),
47
+ contentType: CONTENT_TYPE_BY_FORMAT[responseFormat] ?? "application/octet-stream",
48
+ };
49
+ }
50
+ async function speakOpenAIStream(text, options, openAIApiKey) {
51
+ validateSpeechOptions(options);
52
+ const openai = createOpenAIClient(openAIApiKey);
53
+ const responseFormat = options.responseFormat ?? "mp3";
54
+ const model = options.model ?? "gpt-4o-mini-tts";
55
+ const stream = await openai.audio.speech.create({
56
+ model,
57
+ voice: options.voice,
58
+ input: text,
59
+ response_format: responseFormat,
60
+ ...(options.speed !== undefined ? { speed: options.speed } : {}),
61
+ ...(options.instructions ? { instructions: options.instructions } : {}),
62
+ });
63
+ return stream.body;
64
+ }
65
+ //# sourceMappingURL=speech-openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-openai.js","sourceRoot":"","sources":["../../src/audio/speech-openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { OpenRouterSpeechOptions, SpeechResult } from "./types";
2
+ export declare function speakOpenRouter(text: string, options: OpenRouterSpeechOptions, openRouterApiKey?: string): Promise<SpeechResult>;
3
+ export declare function speakOpenRouterStream(text: string, options: OpenRouterSpeechOptions, openRouterApiKey?: string): Promise<ReadableStream<Uint8Array>>;
4
+ //# sourceMappingURL=speech-openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-openrouter.d.ts","sourceRoot":"","sources":["../../src/audio/speech-openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgCrE,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,CA6CvB;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,uBAAuB,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAiCrC"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.speakOpenRouter = speakOpenRouter;
4
+ exports.speakOpenRouterStream = speakOpenRouterStream;
5
+ const openrouter_client_1 = require("./openrouter-client");
6
+ const models_1 = require("../langchain/models");
7
+ const CONTENT_TYPE_BY_FORMAT = {
8
+ mp3: "audio/mpeg",
9
+ pcm: "audio/pcm",
10
+ };
11
+ function isGeminiTtsModel(model) {
12
+ return /gemini/i.test(model) && /tts/i.test(model);
13
+ }
14
+ function resolveOpenRouterSpeechFormat(model, responseFormat) {
15
+ if (responseFormat)
16
+ return responseFormat;
17
+ // Gemini TTS no OpenRouter aceita apenas pcm (ver docs OR /audio/speech)
18
+ if (isGeminiTtsModel(model))
19
+ return "pcm";
20
+ return "mp3";
21
+ }
22
+ function validateOpenRouterSpeechOptions(options) {
23
+ if (!options.model) {
24
+ throw new Error("[@luanpoppe/ai] model é obrigatório para speakOpenRouter.");
25
+ }
26
+ if (!options.voice) {
27
+ throw new Error("[@luanpoppe/ai] voice é obrigatório para speakOpenRouter.");
28
+ }
29
+ }
30
+ async function speakOpenRouter(text, options, openRouterApiKey) {
31
+ validateOpenRouterSpeechOptions(options);
32
+ if (!openRouterApiKey) {
33
+ throw new Error("OpenRouter API key is not passed in the speech parameters");
34
+ }
35
+ const client = (0, openrouter_client_1.createOpenRouterOpenAIClient)(openRouterApiKey);
36
+ const responseFormat = resolveOpenRouterSpeechFormat(options.model, options.responseFormat);
37
+ const provider = (0, models_1.resolveOpenRouterProvider)(options.model, {
38
+ openRouterProvider: options.openRouterProvider,
39
+ openRouterAllowAllProviders: options.openRouterAllowAllProviders,
40
+ });
41
+ const body = {
42
+ model: options.model,
43
+ input: text,
44
+ voice: options.voice,
45
+ response_format: responseFormat,
46
+ };
47
+ if (options.speed !== undefined)
48
+ body.speed = options.speed;
49
+ if (provider || options.instructions) {
50
+ const mergedProvider = { ...(provider ?? {}) };
51
+ if (options.instructions) {
52
+ mergedProvider.options = {
53
+ openai: { instructions: options.instructions },
54
+ };
55
+ }
56
+ body.provider = mergedProvider;
57
+ }
58
+ const response = await client.audio.speech.create(body);
59
+ const arrayBuffer = await response.arrayBuffer();
60
+ return {
61
+ audio: Buffer.from(arrayBuffer),
62
+ contentType: CONTENT_TYPE_BY_FORMAT[responseFormat] ?? "application/octet-stream",
63
+ };
64
+ }
65
+ async function speakOpenRouterStream(text, options, openRouterApiKey) {
66
+ validateOpenRouterSpeechOptions(options);
67
+ if (!openRouterApiKey) {
68
+ throw new Error("OpenRouter API key is not passed in the speech parameters");
69
+ }
70
+ const client = (0, openrouter_client_1.createOpenRouterOpenAIClient)(openRouterApiKey);
71
+ const responseFormat = resolveOpenRouterSpeechFormat(options.model, options.responseFormat);
72
+ const provider = (0, models_1.resolveOpenRouterProvider)(options.model, {
73
+ openRouterProvider: options.openRouterProvider,
74
+ openRouterAllowAllProviders: options.openRouterAllowAllProviders,
75
+ });
76
+ const body = {
77
+ model: options.model,
78
+ input: text,
79
+ voice: options.voice,
80
+ response_format: responseFormat,
81
+ };
82
+ if (options.speed !== undefined)
83
+ body.speed = options.speed;
84
+ if (provider)
85
+ body.provider = provider;
86
+ const stream = await client.audio.speech.create(body);
87
+ return stream.body;
88
+ }
89
+ //# sourceMappingURL=speech-openrouter.js.map