modelfusion 0.110.0 → 0.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +41 -65
- package/core/FunctionEvent.d.ts +3 -3
- package/core/api/ApiFacade.cjs +20 -0
- package/core/api/ApiFacade.d.ts +4 -0
- package/core/api/ApiFacade.js +4 -0
- package/core/api/BaseUrlApiConfiguration.cjs +47 -5
- package/core/api/BaseUrlApiConfiguration.d.ts +23 -6
- package/core/api/BaseUrlApiConfiguration.js +45 -4
- package/core/api/BaseUrlApiConfiguration.test.cjs +11 -0
- package/core/api/BaseUrlApiConfiguration.test.js +9 -0
- package/core/api/callWithRetryAndThrottle.cjs +3 -3
- package/core/api/callWithRetryAndThrottle.js +3 -3
- package/core/api/index.cjs +15 -2
- package/core/api/index.d.ts +2 -2
- package/core/api/index.js +2 -2
- package/core/api/postToApi.cjs +28 -5
- package/core/api/postToApi.d.ts +5 -4
- package/core/api/postToApi.js +26 -4
- package/core/api/throttleOff.cjs +8 -0
- package/core/api/throttleOff.d.ts +5 -0
- package/core/api/throttleOff.js +4 -0
- package/internal/index.cjs +2 -8
- package/internal/index.d.ts +1 -1
- package/internal/index.js +1 -1
- package/model-function/ModelCallEvent.d.ts +3 -3
- package/model-function/generate-structure/generateStructure.d.ts +1 -1
- package/model-function/generate-text/PromptTemplateFullTextModel.cjs +2 -2
- package/model-function/generate-text/PromptTemplateFullTextModel.d.ts +3 -3
- package/model-function/generate-text/PromptTemplateFullTextModel.js +2 -2
- package/model-function/generate-text/PromptTemplateTextGenerationModel.cjs +2 -2
- package/model-function/generate-text/PromptTemplateTextGenerationModel.d.ts +3 -3
- package/model-function/generate-text/PromptTemplateTextGenerationModel.js +2 -2
- package/model-provider/anthropic/AnthropicApiConfiguration.cjs +14 -6
- package/model-provider/anthropic/AnthropicApiConfiguration.d.ts +7 -8
- package/model-provider/anthropic/AnthropicApiConfiguration.js +15 -7
- package/model-provider/anthropic/AnthropicError.cjs +7 -27
- package/model-provider/anthropic/AnthropicError.d.ts +21 -16
- package/model-provider/anthropic/AnthropicError.js +7 -25
- package/model-provider/anthropic/AnthropicFacade.cjs +10 -1
- package/model-provider/anthropic/AnthropicFacade.d.ts +9 -0
- package/model-provider/anthropic/AnthropicFacade.js +8 -0
- package/model-provider/anthropic/AnthropicTextGenerationModel.cjs +22 -24
- package/model-provider/anthropic/AnthropicTextGenerationModel.js +23 -25
- package/model-provider/anthropic/index.cjs +1 -4
- package/model-provider/anthropic/index.d.ts +1 -1
- package/model-provider/anthropic/index.js +0 -1
- package/model-provider/automatic1111/Automatic1111ApiConfiguration.cjs +12 -4
- package/model-provider/automatic1111/Automatic1111ApiConfiguration.d.ts +3 -3
- package/model-provider/automatic1111/Automatic1111ApiConfiguration.js +12 -4
- package/model-provider/automatic1111/Automatic1111Error.cjs +3 -3
- package/model-provider/automatic1111/Automatic1111Error.d.ts +13 -3
- package/model-provider/automatic1111/Automatic1111Error.js +4 -4
- package/model-provider/automatic1111/Automatic1111Facade.cjs +9 -9
- package/model-provider/automatic1111/Automatic1111Facade.d.ts +6 -6
- package/model-provider/automatic1111/Automatic1111Facade.js +7 -7
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +11 -7
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +11 -7
- package/model-provider/cohere/CohereApiConfiguration.cjs +14 -6
- package/model-provider/cohere/CohereApiConfiguration.d.ts +7 -8
- package/model-provider/cohere/CohereApiConfiguration.js +15 -7
- package/model-provider/cohere/CohereError.cjs +8 -43
- package/model-provider/cohere/CohereError.d.ts +9 -16
- package/model-provider/cohere/CohereError.js +8 -41
- package/model-provider/cohere/CohereFacade.cjs +12 -3
- package/model-provider/cohere/CohereFacade.d.ts +11 -2
- package/model-provider/cohere/CohereFacade.js +10 -2
- package/model-provider/cohere/CohereTextEmbeddingModel.cjs +18 -22
- package/model-provider/cohere/CohereTextEmbeddingModel.js +18 -22
- package/model-provider/cohere/CohereTextGenerationModel.cjs +31 -39
- package/model-provider/cohere/CohereTextGenerationModel.d.ts +110 -8
- package/model-provider/cohere/CohereTextGenerationModel.js +31 -39
- package/model-provider/cohere/CohereTokenizer.cjs +32 -41
- package/model-provider/cohere/CohereTokenizer.d.ts +2 -2
- package/model-provider/cohere/CohereTokenizer.js +32 -41
- package/model-provider/cohere/index.cjs +1 -3
- package/model-provider/cohere/index.d.ts +1 -1
- package/model-provider/cohere/index.js +0 -1
- package/model-provider/elevenlabs/ElevenLabsApiConfiguration.cjs +14 -6
- package/model-provider/elevenlabs/ElevenLabsApiConfiguration.d.ts +7 -8
- package/model-provider/elevenlabs/ElevenLabsApiConfiguration.js +15 -7
- package/model-provider/elevenlabs/ElevenLabsFacade.cjs +10 -1
- package/model-provider/elevenlabs/ElevenLabsFacade.d.ts +9 -0
- package/model-provider/elevenlabs/ElevenLabsFacade.js +8 -0
- package/model-provider/elevenlabs/ElevenLabsSpeechModel.cjs +42 -53
- package/model-provider/elevenlabs/ElevenLabsSpeechModel.js +44 -55
- package/model-provider/huggingface/HuggingFaceApiConfiguration.cjs +14 -6
- package/model-provider/huggingface/HuggingFaceApiConfiguration.d.ts +7 -8
- package/model-provider/huggingface/HuggingFaceApiConfiguration.js +15 -7
- package/model-provider/huggingface/HuggingFaceError.cjs +7 -29
- package/model-provider/huggingface/HuggingFaceError.d.ts +9 -16
- package/model-provider/huggingface/HuggingFaceError.js +7 -27
- package/model-provider/huggingface/HuggingFaceFacade.cjs +10 -1
- package/model-provider/huggingface/HuggingFaceFacade.d.ts +9 -0
- package/model-provider/huggingface/HuggingFaceFacade.js +8 -0
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +17 -27
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +17 -27
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +22 -23
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +22 -23
- package/model-provider/huggingface/index.cjs +1 -3
- package/model-provider/huggingface/index.d.ts +1 -1
- package/model-provider/huggingface/index.js +0 -1
- package/model-provider/llamacpp/LlamaCppApiConfiguration.cjs +13 -6
- package/model-provider/llamacpp/LlamaCppApiConfiguration.d.ts +7 -9
- package/model-provider/llamacpp/LlamaCppApiConfiguration.js +14 -7
- package/model-provider/llamacpp/LlamaCppCompletionModel.cjs +4 -4
- package/model-provider/llamacpp/LlamaCppCompletionModel.d.ts +173 -5
- package/model-provider/llamacpp/LlamaCppCompletionModel.js +4 -4
- package/model-provider/llamacpp/LlamaCppError.cjs +7 -27
- package/model-provider/llamacpp/LlamaCppError.d.ts +9 -16
- package/model-provider/llamacpp/LlamaCppError.js +7 -25
- package/model-provider/llamacpp/LlamaCppFacade.cjs +10 -2
- package/model-provider/llamacpp/LlamaCppFacade.d.ts +8 -1
- package/model-provider/llamacpp/LlamaCppFacade.js +8 -1
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +10 -14
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +10 -14
- package/model-provider/llamacpp/LlamaCppTokenizer.cjs +14 -18
- package/model-provider/llamacpp/LlamaCppTokenizer.js +14 -18
- package/model-provider/llamacpp/index.cjs +1 -3
- package/model-provider/llamacpp/index.d.ts +1 -1
- package/model-provider/llamacpp/index.js +0 -1
- package/model-provider/lmnt/LmntApiConfiguration.cjs +14 -6
- package/model-provider/lmnt/LmntApiConfiguration.d.ts +7 -8
- package/model-provider/lmnt/LmntApiConfiguration.js +15 -7
- package/model-provider/lmnt/LmntFacade.cjs +11 -2
- package/model-provider/lmnt/LmntFacade.d.ts +10 -1
- package/model-provider/lmnt/LmntFacade.js +9 -1
- package/model-provider/lmnt/LmntSpeechModel.cjs +53 -41
- package/model-provider/lmnt/LmntSpeechModel.d.ts +51 -3
- package/model-provider/lmnt/LmntSpeechModel.js +54 -42
- package/model-provider/mistral/MistralApiConfiguration.cjs +14 -6
- package/model-provider/mistral/MistralApiConfiguration.d.ts +9 -11
- package/model-provider/mistral/MistralApiConfiguration.js +15 -7
- package/model-provider/mistral/MistralChatModel.cjs +4 -4
- package/model-provider/mistral/MistralChatModel.d.ts +52 -7
- package/model-provider/mistral/MistralChatModel.js +5 -5
- package/model-provider/mistral/MistralError.cjs +3 -3
- package/model-provider/mistral/MistralError.d.ts +15 -3
- package/model-provider/mistral/MistralError.js +4 -4
- package/model-provider/mistral/MistralFacade.cjs +5 -1
- package/model-provider/mistral/MistralFacade.d.ts +10 -3
- package/model-provider/mistral/MistralFacade.js +6 -2
- package/model-provider/mistral/MistralTextEmbeddingModel.cjs +2 -1
- package/model-provider/mistral/MistralTextEmbeddingModel.d.ts +3 -3
- package/model-provider/mistral/MistralTextEmbeddingModel.js +2 -1
- package/model-provider/ollama/OllamaApiConfiguration.cjs +13 -6
- package/model-provider/ollama/OllamaApiConfiguration.d.ts +7 -10
- package/model-provider/ollama/OllamaApiConfiguration.js +14 -7
- package/model-provider/ollama/OllamaChatModel.cjs +6 -6
- package/model-provider/ollama/OllamaChatModel.d.ts +49 -8
- package/model-provider/ollama/OllamaChatModel.js +7 -7
- package/model-provider/ollama/OllamaCompletionModel.cjs +6 -6
- package/model-provider/ollama/OllamaCompletionModel.d.ts +43 -8
- package/model-provider/ollama/OllamaCompletionModel.js +7 -7
- package/model-provider/ollama/OllamaError.cjs +3 -3
- package/model-provider/ollama/OllamaError.d.ts +7 -3
- package/model-provider/ollama/OllamaError.js +4 -4
- package/model-provider/ollama/OllamaFacade.cjs +6 -2
- package/model-provider/ollama/OllamaFacade.d.ts +8 -3
- package/model-provider/ollama/OllamaFacade.js +6 -2
- package/model-provider/ollama/OllamaTextEmbeddingModel.cjs +15 -16
- package/model-provider/ollama/OllamaTextEmbeddingModel.js +15 -16
- package/model-provider/openai/AbstractOpenAIChatModel.cjs +5 -5
- package/model-provider/openai/AbstractOpenAIChatModel.d.ts +155 -9
- package/model-provider/openai/AbstractOpenAIChatModel.js +5 -5
- package/model-provider/openai/AbstractOpenAICompletionModel.cjs +30 -32
- package/model-provider/openai/AbstractOpenAICompletionModel.d.ts +4 -4
- package/model-provider/openai/AbstractOpenAICompletionModel.js +30 -32
- package/model-provider/openai/AzureOpenAIApiConfiguration.d.ts +9 -8
- package/model-provider/openai/OpenAIApiConfiguration.cjs +14 -6
- package/model-provider/openai/OpenAIApiConfiguration.d.ts +7 -8
- package/model-provider/openai/OpenAIApiConfiguration.js +15 -7
- package/model-provider/openai/OpenAIChatFunctionCallStructureGenerationModel.d.ts +1 -1
- package/model-provider/openai/OpenAIChatModel.d.ts +2 -2
- package/model-provider/openai/OpenAIError.cjs +8 -8
- package/model-provider/openai/OpenAIError.d.ts +27 -3
- package/model-provider/openai/OpenAIError.js +9 -9
- package/model-provider/openai/OpenAIFacade.cjs +23 -2
- package/model-provider/openai/OpenAIFacade.d.ts +20 -2
- package/model-provider/openai/OpenAIFacade.js +20 -1
- package/model-provider/openai/OpenAIImageGenerationModel.cjs +20 -21
- package/model-provider/openai/OpenAIImageGenerationModel.js +20 -21
- package/model-provider/openai/OpenAISpeechModel.cjs +17 -22
- package/model-provider/openai/OpenAISpeechModel.js +17 -22
- package/model-provider/openai/OpenAITextEmbeddingModel.cjs +18 -23
- package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +3 -3
- package/model-provider/openai/OpenAITextEmbeddingModel.js +18 -23
- package/model-provider/openai/OpenAITranscriptionModel.cjs +42 -48
- package/model-provider/openai/OpenAITranscriptionModel.d.ts +14 -10
- package/model-provider/openai/OpenAITranscriptionModel.js +42 -48
- package/model-provider/openai-compatible/FireworksAIApiConfiguration.cjs +11 -7
- package/model-provider/openai-compatible/FireworksAIApiConfiguration.d.ts +4 -9
- package/model-provider/openai-compatible/FireworksAIApiConfiguration.js +12 -8
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.d.ts +2 -2
- package/model-provider/openai-compatible/OpenAICompatibleFacade.cjs +25 -1
- package/model-provider/openai-compatible/OpenAICompatibleFacade.d.ts +23 -0
- package/model-provider/openai-compatible/OpenAICompatibleFacade.js +22 -0
- package/model-provider/openai-compatible/TogetherAIApiConfiguration.cjs +11 -7
- package/model-provider/openai-compatible/TogetherAIApiConfiguration.d.ts +4 -9
- package/model-provider/openai-compatible/TogetherAIApiConfiguration.js +12 -8
- package/model-provider/stability/StabilityApiConfiguration.cjs +13 -12
- package/model-provider/stability/StabilityApiConfiguration.d.ts +4 -4
- package/model-provider/stability/StabilityApiConfiguration.js +13 -12
- package/model-provider/stability/StabilityError.cjs +3 -3
- package/model-provider/stability/StabilityError.d.ts +7 -3
- package/model-provider/stability/StabilityError.js +4 -4
- package/model-provider/stability/StabilityFacade.cjs +9 -9
- package/model-provider/stability/StabilityFacade.d.ts +8 -8
- package/model-provider/stability/StabilityFacade.js +7 -7
- package/model-provider/stability/StabilityImageGenerationModel.cjs +2 -1
- package/model-provider/stability/StabilityImageGenerationModel.js +2 -1
- package/model-provider/whispercpp/WhisperCppApiConfiguration.cjs +13 -6
- package/model-provider/whispercpp/WhisperCppApiConfiguration.d.ts +7 -10
- package/model-provider/whispercpp/WhisperCppApiConfiguration.js +14 -7
- package/model-provider/whispercpp/WhisperCppFacade.cjs +9 -5
- package/model-provider/whispercpp/WhisperCppFacade.d.ts +7 -2
- package/model-provider/whispercpp/WhisperCppFacade.js +8 -4
- package/model-provider/whispercpp/WhisperCppTranscriptionModel.cjs +5 -2
- package/model-provider/whispercpp/WhisperCppTranscriptionModel.js +6 -3
- package/package.json +1 -1
- package/tool/Tool.cjs +0 -10
- package/tool/Tool.d.ts +0 -1
- package/tool/Tool.js +0 -10
- package/tool/WebSearchTool.cjs +2 -2
- package/tool/WebSearchTool.d.ts +1 -2
- package/tool/WebSearchTool.js +3 -3
- package/tool/{generate-tool-calls-or-text/TextGenerationToolCallsOrGenerateTextModel.cjs → generate-tool-calls/TextGenerationToolCallsModel.cjs} +7 -7
- package/tool/{generate-tool-calls-or-text/TextGenerationToolCallsOrGenerateTextModel.d.ts → generate-tool-calls/TextGenerationToolCallsModel.d.ts} +6 -6
- package/tool/{generate-tool-calls-or-text/TextGenerationToolCallsOrGenerateTextModel.js → generate-tool-calls/TextGenerationToolCallsModel.js} +5 -5
- package/tool/generate-tool-calls/ToolCallsGenerationEvent.d.ts +23 -0
- package/tool/{generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.d.ts → generate-tool-calls/ToolCallsGenerationModel.d.ts} +3 -3
- package/tool/{generate-tool-calls-or-text/ToolCallsOrTextParseError.cjs → generate-tool-calls/ToolCallsParseError.cjs} +5 -5
- package/tool/{generate-tool-calls-or-text/ToolCallsOrTextParseError.d.ts → generate-tool-calls/ToolCallsParseError.d.ts} +1 -1
- package/tool/{generate-tool-calls-or-text/ToolCallsOrTextParseError.js → generate-tool-calls/ToolCallsParseError.js} +3 -3
- package/tool/{generate-tool-calls-or-text/ToolCallsOrGenerateTextPromptTemplate.d.ts → generate-tool-calls/ToolCallsPromptTemplate.d.ts} +1 -1
- package/tool/{generate-tool-calls-or-text/generateToolCallsOrText.cjs → generate-tool-calls/generateToolCalls.cjs} +5 -5
- package/tool/{generate-tool-calls-or-text/generateToolCallsOrText.d.ts → generate-tool-calls/generateToolCalls.d.ts} +3 -3
- package/tool/{generate-tool-calls-or-text/generateToolCallsOrText.js → generate-tool-calls/generateToolCalls.js} +3 -3
- package/tool/{generate-tool-calls-or-text → generate-tool-calls}/index.cjs +6 -6
- package/tool/generate-tool-calls/index.d.ts +6 -0
- package/tool/generate-tool-calls/index.js +6 -0
- package/tool/index.cjs +2 -3
- package/tool/index.d.ts +2 -3
- package/tool/index.js +2 -3
- package/tool/use-tools/UseToolsEvent.d.ts +7 -0
- package/tool/use-tools/UseToolsEvent.js +1 -0
- package/tool/{use-tools-or-generate-text → use-tools}/index.cjs +2 -2
- package/tool/use-tools/index.d.ts +2 -0
- package/tool/use-tools/index.js +2 -0
- package/tool/{use-tools-or-generate-text/useToolsOrGenerateText.cjs → use-tools/useTools.cjs} +6 -6
- package/tool/{use-tools-or-generate-text/useToolsOrGenerateText.d.ts → use-tools/useTools.d.ts} +2 -2
- package/tool/{use-tools-or-generate-text/useToolsOrGenerateText.js → use-tools/useTools.js} +4 -4
- package/vector-index/memory/MemoryVectorIndex.cjs +2 -2
- package/vector-index/memory/MemoryVectorIndex.js +3 -3
- package/core/api/BaseUrlPartsApiConfiguration.cjs +0 -53
- package/core/api/BaseUrlPartsApiConfiguration.d.ts +0 -26
- package/core/api/BaseUrlPartsApiConfiguration.js +0 -49
- package/core/api/throttleUnlimitedConcurrency.cjs +0 -8
- package/core/api/throttleUnlimitedConcurrency.d.ts +0 -5
- package/core/api/throttleUnlimitedConcurrency.js +0 -4
- package/model-provider/elevenlabs/ElevenLabsError.cjs +0 -30
- package/model-provider/elevenlabs/ElevenLabsError.d.ts +0 -3
- package/model-provider/elevenlabs/ElevenLabsError.js +0 -26
- package/model-provider/lmnt/LmntError.cjs +0 -30
- package/model-provider/lmnt/LmntError.d.ts +0 -3
- package/model-provider/lmnt/LmntError.js +0 -26
- package/tool/InvalidToolNameError.cjs +0 -17
- package/tool/InvalidToolNameError.d.ts +0 -7
- package/tool/InvalidToolNameError.js +0 -13
- package/tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationEvent.d.ts +0 -23
- package/tool/generate-tool-calls-or-text/index.d.ts +0 -6
- package/tool/generate-tool-calls-or-text/index.js +0 -6
- package/tool/use-tools-or-generate-text/UseToolsOrGenerateTextEvent.d.ts +0 -7
- package/tool/use-tools-or-generate-text/index.d.ts +0 -2
- package/tool/use-tools-or-generate-text/index.js +0 -2
- /package/{tool/generate-tool-calls-or-text/ToolCallsOrGenerateTextPromptTemplate.js → core/api/BaseUrlApiConfiguration.test.d.ts} +0 -0
- /package/tool/{generate-tool-calls-or-text/ToolCallsOrGenerateTextPromptTemplate.cjs → generate-tool-calls/ToolCallsGenerationEvent.cjs} +0 -0
- /package/tool/{generate-tool-calls-or-text/ToolCallsOrTextGenerationEvent.js → generate-tool-calls/ToolCallsGenerationEvent.js} +0 -0
- /package/tool/{generate-tool-calls-or-text/ToolCallsOrTextGenerationEvent.cjs → generate-tool-calls/ToolCallsGenerationModel.cjs} +0 -0
- /package/tool/{generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.js → generate-tool-calls/ToolCallsGenerationModel.js} +0 -0
- /package/tool/{generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.cjs → generate-tool-calls/ToolCallsPromptTemplate.cjs} +0 -0
- /package/tool/{use-tools-or-generate-text/UseToolsOrGenerateTextEvent.js → generate-tool-calls/ToolCallsPromptTemplate.js} +0 -0
- /package/tool/{use-tools-or-generate-text/UseToolsOrGenerateTextEvent.cjs → use-tools/UseToolsEvent.cjs} +0 -0
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,31 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v0.112.0 - 2024-01-02
|
4
|
+
|
5
|
+
### Changed
|
6
|
+
|
7
|
+
- **breaking change**: renamed `useToolsOrGenerateText` to `useTools`
|
8
|
+
- **breaking change**: renamed `generateToolCallsOrText` to `generateToolCalls`
|
9
|
+
|
10
|
+
### Removed
|
11
|
+
|
12
|
+
- Restriction on tool names. OpenAI tool calls do not have such a restriction.
|
13
|
+
|
14
|
+
## v0.111.0 - 2024-01-01
|
15
|
+
|
16
|
+
Reworked API configuration support.
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- All providers now have an `Api` function that you can call to create custom API configurations. The base URL set up is more flexible and allows you to override parts of the base URL selectively.
|
21
|
+
- `api` namespace with retry and throttle configurations
|
22
|
+
|
23
|
+
### Changed
|
24
|
+
|
25
|
+
- Updated Cohere models.
|
26
|
+
- Updated LMNT API calls to LMNT `v1` API.
|
27
|
+
- **breaking change**: Renamed `throttleUnlimitedConcurrency` to `throttleOff`.
|
28
|
+
|
3
29
|
## v0.110.0 - 2023-12-30
|
4
30
|
|
5
31
|
### Changed
|
package/README.md
CHANGED
@@ -328,67 +328,7 @@ Providers: [OpenAI](https://modelfusion.dev/integration/model-provider/openai),
|
|
328
328
|
|
329
329
|
Tools are functions that can be executed by an AI model. They are useful for building chatbots and agents.
|
330
330
|
|
331
|
-
Predefined tools: [Math.js](https://modelfusion.dev/guide/tools/predefined-tools/mathjs), [SerpAPI](https://modelfusion.dev/guide/tools/predefined-tools/serpapi), [Google Custom Search](https://modelfusion.dev/guide/tools/predefined-tools/google-custom-search)
|
332
|
-
|
333
|
-
#### [Creating Tools](https://modelfusion.dev/guide/tools/create-tools)
|
334
|
-
|
335
|
-
A tool is comprised of an async execute function, a name, a description, and a schema for the input parameters.
|
336
|
-
|
337
|
-
```ts
|
338
|
-
const calculator = new Tool({
|
339
|
-
name: "calculator",
|
340
|
-
description: "Execute a calculation",
|
341
|
-
|
342
|
-
parameters: zodSchema(
|
343
|
-
z.object({
|
344
|
-
a: z.number().describe("The first number."),
|
345
|
-
b: z.number().describe("The second number."),
|
346
|
-
operator: z
|
347
|
-
.enum(["+", "-", "*", "/"])
|
348
|
-
.describe("The operator (+, -, *, /)."),
|
349
|
-
})
|
350
|
-
),
|
351
|
-
|
352
|
-
execute: async ({ a, b, operator }) => {
|
353
|
-
switch (operator) {
|
354
|
-
case "+":
|
355
|
-
return a + b;
|
356
|
-
case "-":
|
357
|
-
return a - b;
|
358
|
-
case "*":
|
359
|
-
return a * b;
|
360
|
-
case "/":
|
361
|
-
return a / b;
|
362
|
-
default:
|
363
|
-
throw new Error(`Unknown operator: ${operator}`);
|
364
|
-
}
|
365
|
-
},
|
366
|
-
});
|
367
|
-
```
|
368
|
-
|
369
|
-
#### [generateToolCall](https://modelfusion.dev/guide/tools/generate-tool-call)
|
370
|
-
|
371
|
-
With `generateToolCall`, you can generate a tool call for a specific tool with a language model that supports tools calls (e.g. OpenAI Chat). This function does not execute the tools.
|
372
|
-
|
373
|
-
```ts
|
374
|
-
const { id, name, args } = await generateToolCall(
|
375
|
-
openai.ChatTextGenerator({ model: "gpt-3.5-turbo" }),
|
376
|
-
calculator,
|
377
|
-
[openai.ChatMessage.user("What's fourteen times twelve?")]
|
378
|
-
);
|
379
|
-
```
|
380
|
-
|
381
|
-
#### [generateToolCallsOrText](https://modelfusion.dev/guide/tools/generate-tool-calls-or-text)
|
382
|
-
|
383
|
-
With `generateToolCallsOrText`, you can ask a language model to generate several tool calls as well as text. The model will choose which tools (if any) should be called with which arguments. Both the text and the tool calls are optional. This function does not execute the tools.
|
384
|
-
|
385
|
-
```ts
|
386
|
-
const { text, toolCalls } = await generateToolCallsOrText(
|
387
|
-
openai.ChatTextGenerator({ model: "gpt-3.5-turbo" }),
|
388
|
-
[toolA, toolB, toolC],
|
389
|
-
[openai.ChatMessage.user(query)]
|
390
|
-
);
|
391
|
-
```
|
331
|
+
Predefined tools: [Math.js](https://modelfusion.dev/guide/tools/predefined-tools/mathjs), [MediaWiki Search](https://modelfusion.dev/guide/tools/predefined-tools/mediawiki-search), [SerpAPI](https://modelfusion.dev/guide/tools/predefined-tools/serpapi), [Google Custom Search](https://modelfusion.dev/guide/tools/predefined-tools/google-custom-search)
|
392
332
|
|
393
333
|
#### [executeTool](https://modelfusion.dev/guide/tools/execute-tool)
|
394
334
|
|
@@ -420,21 +360,57 @@ console.log(`Ok:`, ok);
|
|
420
360
|
console.log(`Result or Error:`, result);
|
421
361
|
```
|
422
362
|
|
423
|
-
#### [
|
363
|
+
#### [useTools](https://modelfusion.dev/guide/tools/use-tools-or-generate-text)
|
424
364
|
|
425
|
-
With `
|
365
|
+
With `useTools`, you can ask a language model to generate several tool calls as well as text. The model will choose which tools (if any) should be called with which arguments. Both the text and the tool calls are optional. This function executes the tools.
|
426
366
|
|
427
367
|
```ts
|
428
|
-
const { text, toolResults } = await
|
368
|
+
const { text, toolResults } = await useTools(
|
429
369
|
openai.ChatTextGenerator({ model: "gpt-3.5-turbo" }),
|
430
370
|
[calculator /* ... */],
|
431
371
|
[openai.ChatMessage.user("What's fourteen times twelve?")]
|
432
372
|
);
|
433
373
|
```
|
434
374
|
|
375
|
+
#### [Creating Tools](https://modelfusion.dev/guide/tools/create-tools)
|
376
|
+
|
377
|
+
A tool is comprised of an async execute function, a name, a description, and a schema for the input parameters.
|
378
|
+
|
379
|
+
```ts
|
380
|
+
const calculator = new Tool({
|
381
|
+
name: "calculator",
|
382
|
+
description: "Execute a calculation",
|
383
|
+
|
384
|
+
parameters: zodSchema(
|
385
|
+
z.object({
|
386
|
+
a: z.number().describe("The first number."),
|
387
|
+
b: z.number().describe("The second number."),
|
388
|
+
operator: z
|
389
|
+
.enum(["+", "-", "*", "/"])
|
390
|
+
.describe("The operator (+, -, *, /)."),
|
391
|
+
})
|
392
|
+
),
|
393
|
+
|
394
|
+
execute: async ({ a, b, operator }) => {
|
395
|
+
switch (operator) {
|
396
|
+
case "+":
|
397
|
+
return a + b;
|
398
|
+
case "-":
|
399
|
+
return a - b;
|
400
|
+
case "*":
|
401
|
+
return a * b;
|
402
|
+
case "/":
|
403
|
+
return a / b;
|
404
|
+
default:
|
405
|
+
throw new Error(`Unknown operator: ${operator}`);
|
406
|
+
}
|
407
|
+
},
|
408
|
+
});
|
409
|
+
```
|
410
|
+
|
435
411
|
#### [Agent Loop](https://modelfusion.dev/guide/tools/agent-loop)
|
436
412
|
|
437
|
-
You can use `
|
413
|
+
You can use `useTools` to implement an agent loop that responds to user messages and executes tools. [Learn more](https://modelfusion.dev/guide/tools/agent-loop).
|
438
414
|
|
439
415
|
### [Vector Indices](https://modelfusion.dev/guide/vector-index)
|
440
416
|
|
package/core/FunctionEvent.d.ts
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
import { ExtensionFunctionStartedEvent, ExtensionFunctionFinishedEvent } from "./ExtensionFunctionEvent.js";
|
2
1
|
import { ModelCallFinishedEvent, ModelCallStartedEvent } from "../model-function/ModelCallEvent.js";
|
3
2
|
import { RetrieveFinishedEvent, RetrieveStartedEvent } from "../retriever/RetrieveEvent.js";
|
4
3
|
import { ExecuteToolFinishedEvent, ExecuteToolStartedEvent } from "../tool/execute-tool/ExecuteToolEvent.js";
|
5
4
|
import { UseToolFinishedEvent, UseToolStartedEvent } from "../tool/use-tool/UseToolEvent.js";
|
6
|
-
import {
|
5
|
+
import { useToolsFinishedEvent, useToolsStartedEvent } from "../tool/use-tools/UseToolsEvent.js";
|
7
6
|
import { UpsertIntoVectorIndexFinishedEvent, UpsertIntoVectorIndexStartedEvent } from "../vector-index/UpsertIntoVectorIndexEvent.js";
|
8
7
|
import { ExecuteFunctionFinishedEvent, ExecuteFunctionStartedEvent } from "./ExecuteFunctionEvent.js";
|
8
|
+
import { ExtensionFunctionFinishedEvent, ExtensionFunctionStartedEvent } from "./ExtensionFunctionEvent.js";
|
9
9
|
export interface BaseFunctionEvent {
|
10
10
|
/**
|
11
11
|
* Unique identifier for the function call.
|
@@ -82,4 +82,4 @@ export interface BaseFunctionFinishedEvent extends BaseFunctionEvent {
|
|
82
82
|
*/
|
83
83
|
result: BaseFunctionFinishedEventResult;
|
84
84
|
}
|
85
|
-
export type FunctionEvent = ExecuteFunctionStartedEvent | ExecuteFunctionFinishedEvent | ExecuteToolStartedEvent | ExecuteToolFinishedEvent | ExtensionFunctionStartedEvent | ExtensionFunctionFinishedEvent | ModelCallStartedEvent | ModelCallFinishedEvent | RetrieveStartedEvent | RetrieveFinishedEvent | UpsertIntoVectorIndexStartedEvent | UpsertIntoVectorIndexFinishedEvent | UseToolStartedEvent | UseToolFinishedEvent |
|
85
|
+
export type FunctionEvent = ExecuteFunctionStartedEvent | ExecuteFunctionFinishedEvent | ExecuteToolStartedEvent | ExecuteToolFinishedEvent | ExtensionFunctionStartedEvent | ExtensionFunctionFinishedEvent | ModelCallStartedEvent | ModelCallFinishedEvent | RetrieveStartedEvent | RetrieveFinishedEvent | UpsertIntoVectorIndexStartedEvent | UpsertIntoVectorIndexFinishedEvent | UseToolStartedEvent | UseToolFinishedEvent | useToolsStartedEvent | useToolsFinishedEvent;
|
@@ -0,0 +1,20 @@
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./retryNever.cjs"), exports);
|
18
|
+
__exportStar(require("./retryWithExponentialBackoff.cjs"), exports);
|
19
|
+
__exportStar(require("./throttleMaxConcurrency.cjs"), exports);
|
20
|
+
__exportStar(require("./throttleOff.cjs"), exports);
|
@@ -1,9 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.BaseUrlApiConfiguration = void 0;
|
3
|
+
exports.BaseUrlApiConfigurationWithDefaults = exports.BaseUrlApiConfiguration = void 0;
|
4
4
|
const AbstractApiConfiguration_js_1 = require("./AbstractApiConfiguration.cjs");
|
5
5
|
/**
|
6
|
-
* An API configuration that uses
|
6
|
+
* An API configuration that uses different URL parts and a set of headers.
|
7
7
|
*
|
8
8
|
* You can use it to configure custom APIs for models, e.g. your own internal OpenAI proxy with custom headers.
|
9
9
|
*/
|
@@ -22,11 +22,53 @@ class BaseUrlApiConfiguration extends AbstractApiConfiguration_js_1.AbstractApiC
|
|
22
22
|
writable: true,
|
23
23
|
value: void 0
|
24
24
|
});
|
25
|
-
this.baseUrl = baseUrl;
|
26
|
-
this.headers = headers;
|
25
|
+
this.baseUrl = typeof baseUrl == "string" ? parseBaseUrl(baseUrl) : baseUrl;
|
26
|
+
this.headers = headers ?? {};
|
27
27
|
}
|
28
28
|
assembleUrl(path) {
|
29
|
-
|
29
|
+
let basePath = this.baseUrl.path;
|
30
|
+
// ensure base path ends without a slash
|
31
|
+
if (basePath.endsWith("/")) {
|
32
|
+
basePath = basePath.slice(0, -1);
|
33
|
+
}
|
34
|
+
// ensure path starts with a slash
|
35
|
+
if (!path.startsWith("/")) {
|
36
|
+
path = `/${path}`;
|
37
|
+
}
|
38
|
+
return `${this.baseUrl.protocol}://${this.baseUrl.host}:${this.baseUrl.port}${basePath}${path}`;
|
30
39
|
}
|
31
40
|
}
|
32
41
|
exports.BaseUrlApiConfiguration = BaseUrlApiConfiguration;
|
42
|
+
class BaseUrlApiConfigurationWithDefaults extends BaseUrlApiConfiguration {
|
43
|
+
constructor({ baseUrlDefaults, baseUrl, headers, retry, throttle, }) {
|
44
|
+
super({
|
45
|
+
baseUrl: resolveBaseUrl(baseUrl, baseUrlDefaults),
|
46
|
+
headers,
|
47
|
+
retry,
|
48
|
+
throttle,
|
49
|
+
});
|
50
|
+
}
|
51
|
+
}
|
52
|
+
exports.BaseUrlApiConfigurationWithDefaults = BaseUrlApiConfigurationWithDefaults;
|
53
|
+
function parseBaseUrl(baseUrl) {
|
54
|
+
const url = new URL(baseUrl);
|
55
|
+
return {
|
56
|
+
protocol: url.protocol.slice(0, -1), // remove trailing colon
|
57
|
+
host: url.hostname,
|
58
|
+
port: url.port,
|
59
|
+
path: url.pathname,
|
60
|
+
};
|
61
|
+
}
|
62
|
+
function resolveBaseUrl(baseUrl = {}, baseUrlDefaults) {
|
63
|
+
if (typeof baseUrl == "string") {
|
64
|
+
return baseUrl;
|
65
|
+
}
|
66
|
+
else {
|
67
|
+
return {
|
68
|
+
protocol: baseUrl.protocol ?? baseUrlDefaults.protocol,
|
69
|
+
host: baseUrl.host ?? baseUrlDefaults.host,
|
70
|
+
port: baseUrl.port ?? baseUrlDefaults.port,
|
71
|
+
path: baseUrl.path ?? baseUrlDefaults.path,
|
72
|
+
};
|
73
|
+
}
|
74
|
+
}
|
@@ -1,20 +1,37 @@
|
|
1
1
|
import { AbstractApiConfiguration } from "./AbstractApiConfiguration.js";
|
2
2
|
import { RetryFunction } from "./RetryFunction.js";
|
3
3
|
import { ThrottleFunction } from "./ThrottleFunction.js";
|
4
|
-
export type
|
5
|
-
|
6
|
-
|
4
|
+
export type UrlParts = {
|
5
|
+
protocol: string;
|
6
|
+
host: string;
|
7
|
+
port: string;
|
8
|
+
path: string;
|
9
|
+
};
|
10
|
+
export type BaseUrlPartsApiConfigurationOptions = {
|
11
|
+
baseUrl: string | UrlParts;
|
12
|
+
headers?: Record<string, string>;
|
7
13
|
retry?: RetryFunction;
|
8
14
|
throttle?: ThrottleFunction;
|
9
15
|
};
|
10
16
|
/**
|
11
|
-
* An API configuration that uses
|
17
|
+
* An API configuration that uses different URL parts and a set of headers.
|
12
18
|
*
|
13
19
|
* You can use it to configure custom APIs for models, e.g. your own internal OpenAI proxy with custom headers.
|
14
20
|
*/
|
15
21
|
export declare class BaseUrlApiConfiguration extends AbstractApiConfiguration {
|
16
|
-
readonly baseUrl:
|
22
|
+
readonly baseUrl: UrlParts;
|
17
23
|
readonly headers: Record<string, string>;
|
18
|
-
constructor({ baseUrl, headers, retry, throttle, }:
|
24
|
+
constructor({ baseUrl, headers, retry, throttle, }: BaseUrlPartsApiConfigurationOptions);
|
19
25
|
assembleUrl(path: string): string;
|
20
26
|
}
|
27
|
+
export type PartialBaseUrlPartsApiConfigurationOptions = {
|
28
|
+
baseUrl?: string | Partial<UrlParts>;
|
29
|
+
headers?: Record<string, string>;
|
30
|
+
retry?: RetryFunction;
|
31
|
+
throttle?: ThrottleFunction;
|
32
|
+
};
|
33
|
+
export declare class BaseUrlApiConfigurationWithDefaults extends BaseUrlApiConfiguration {
|
34
|
+
constructor({ baseUrlDefaults, baseUrl, headers, retry, throttle, }: {
|
35
|
+
baseUrlDefaults: UrlParts;
|
36
|
+
} & PartialBaseUrlPartsApiConfigurationOptions);
|
37
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { AbstractApiConfiguration } from "./AbstractApiConfiguration.js";
|
2
2
|
/**
|
3
|
-
* An API configuration that uses
|
3
|
+
* An API configuration that uses different URL parts and a set of headers.
|
4
4
|
*
|
5
5
|
* You can use it to configure custom APIs for models, e.g. your own internal OpenAI proxy with custom headers.
|
6
6
|
*/
|
@@ -19,10 +19,51 @@ export class BaseUrlApiConfiguration extends AbstractApiConfiguration {
|
|
19
19
|
writable: true,
|
20
20
|
value: void 0
|
21
21
|
});
|
22
|
-
this.baseUrl = baseUrl;
|
23
|
-
this.headers = headers;
|
22
|
+
this.baseUrl = typeof baseUrl == "string" ? parseBaseUrl(baseUrl) : baseUrl;
|
23
|
+
this.headers = headers ?? {};
|
24
24
|
}
|
25
25
|
assembleUrl(path) {
|
26
|
-
|
26
|
+
let basePath = this.baseUrl.path;
|
27
|
+
// ensure base path ends without a slash
|
28
|
+
if (basePath.endsWith("/")) {
|
29
|
+
basePath = basePath.slice(0, -1);
|
30
|
+
}
|
31
|
+
// ensure path starts with a slash
|
32
|
+
if (!path.startsWith("/")) {
|
33
|
+
path = `/${path}`;
|
34
|
+
}
|
35
|
+
return `${this.baseUrl.protocol}://${this.baseUrl.host}:${this.baseUrl.port}${basePath}${path}`;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
export class BaseUrlApiConfigurationWithDefaults extends BaseUrlApiConfiguration {
|
39
|
+
constructor({ baseUrlDefaults, baseUrl, headers, retry, throttle, }) {
|
40
|
+
super({
|
41
|
+
baseUrl: resolveBaseUrl(baseUrl, baseUrlDefaults),
|
42
|
+
headers,
|
43
|
+
retry,
|
44
|
+
throttle,
|
45
|
+
});
|
46
|
+
}
|
47
|
+
}
|
48
|
+
function parseBaseUrl(baseUrl) {
|
49
|
+
const url = new URL(baseUrl);
|
50
|
+
return {
|
51
|
+
protocol: url.protocol.slice(0, -1), // remove trailing colon
|
52
|
+
host: url.hostname,
|
53
|
+
port: url.port,
|
54
|
+
path: url.pathname,
|
55
|
+
};
|
56
|
+
}
|
57
|
+
function resolveBaseUrl(baseUrl = {}, baseUrlDefaults) {
|
58
|
+
if (typeof baseUrl == "string") {
|
59
|
+
return baseUrl;
|
60
|
+
}
|
61
|
+
else {
|
62
|
+
return {
|
63
|
+
protocol: baseUrl.protocol ?? baseUrlDefaults.protocol,
|
64
|
+
host: baseUrl.host ?? baseUrlDefaults.host,
|
65
|
+
port: baseUrl.port ?? baseUrlDefaults.port,
|
66
|
+
path: baseUrl.path ?? baseUrlDefaults.path,
|
67
|
+
};
|
27
68
|
}
|
28
69
|
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const BaseUrlApiConfiguration_js_1 = require("./BaseUrlApiConfiguration.cjs");
|
4
|
+
describe("with text URLs", () => {
|
5
|
+
it("should assemble the correct url", async () => {
|
6
|
+
const api = new BaseUrlApiConfiguration_js_1.BaseUrlApiConfiguration({
|
7
|
+
baseUrl: "http://localhost:8080",
|
8
|
+
});
|
9
|
+
expect(api.assembleUrl("/test")).toBe("http://localhost:8080/test");
|
10
|
+
});
|
11
|
+
});
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { BaseUrlApiConfiguration } from "./BaseUrlApiConfiguration.js";
|
2
|
+
describe("with text URLs", () => {
|
3
|
+
it("should assemble the correct url", async () => {
|
4
|
+
const api = new BaseUrlApiConfiguration({
|
5
|
+
baseUrl: "http://localhost:8080",
|
6
|
+
});
|
7
|
+
expect(api.assembleUrl("/test")).toBe("http://localhost:8080/test");
|
8
|
+
});
|
9
|
+
});
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.callWithRetryAndThrottle = void 0;
|
4
|
-
const
|
5
|
-
const
|
6
|
-
const callWithRetryAndThrottle = async ({ retry = (0,
|
4
|
+
const retryNever_js_1 = require("./retryNever.cjs");
|
5
|
+
const throttleOff_js_1 = require("./throttleOff.cjs");
|
6
|
+
const callWithRetryAndThrottle = async ({ retry = (0, retryNever_js_1.retryNever)(), throttle = (0, throttleOff_js_1.throttleOff)(), call, }) => retry(async () => throttle(call));
|
7
7
|
exports.callWithRetryAndThrottle = callWithRetryAndThrottle;
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
export const callWithRetryAndThrottle = async ({ retry =
|
1
|
+
import { retryNever } from "./retryNever.js";
|
2
|
+
import { throttleOff } from "./throttleOff.js";
|
3
|
+
export const callWithRetryAndThrottle = async ({ retry = retryNever(), throttle = throttleOff(), call, }) => retry(async () => throttle(call));
|
package/core/api/index.cjs
CHANGED
@@ -10,19 +10,32 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
11
11
|
o[k2] = m[k];
|
12
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
|
+
});
|
13
18
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
20
|
};
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
22
|
+
if (mod && mod.__esModule) return mod;
|
23
|
+
var result = {};
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
25
|
+
__setModuleDefault(result, mod);
|
26
|
+
return result;
|
27
|
+
};
|
16
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
+
exports.api = void 0;
|
17
30
|
__exportStar(require("./AbortError.cjs"), exports);
|
18
31
|
__exportStar(require("./ApiCallError.cjs"), exports);
|
19
32
|
__exportStar(require("./ApiConfiguration.cjs"), exports);
|
33
|
+
exports.api = __importStar(require("./ApiFacade.cjs"));
|
20
34
|
__exportStar(require("./BaseUrlApiConfiguration.cjs"), exports);
|
21
|
-
__exportStar(require("./BaseUrlPartsApiConfiguration.cjs"), exports);
|
22
35
|
__exportStar(require("./RetryError.cjs"), exports);
|
23
36
|
__exportStar(require("./RetryFunction.cjs"), exports);
|
24
37
|
__exportStar(require("./ThrottleFunction.cjs"), exports);
|
25
38
|
__exportStar(require("./retryNever.cjs"), exports);
|
26
39
|
__exportStar(require("./retryWithExponentialBackoff.cjs"), exports);
|
27
40
|
__exportStar(require("./throttleMaxConcurrency.cjs"), exports);
|
28
|
-
__exportStar(require("./
|
41
|
+
__exportStar(require("./throttleOff.cjs"), exports);
|
package/core/api/index.d.ts
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
export * from "./AbortError.js";
|
2
2
|
export * from "./ApiCallError.js";
|
3
3
|
export * from "./ApiConfiguration.js";
|
4
|
+
export * as api from "./ApiFacade.js";
|
4
5
|
export * from "./BaseUrlApiConfiguration.js";
|
5
|
-
export * from "./BaseUrlPartsApiConfiguration.js";
|
6
6
|
export * from "./RetryError.js";
|
7
7
|
export * from "./RetryFunction.js";
|
8
8
|
export * from "./ThrottleFunction.js";
|
9
9
|
export * from "./retryNever.js";
|
10
10
|
export * from "./retryWithExponentialBackoff.js";
|
11
11
|
export * from "./throttleMaxConcurrency.js";
|
12
|
-
export * from "./
|
12
|
+
export * from "./throttleOff.js";
|
package/core/api/index.js
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
export * from "./AbortError.js";
|
2
2
|
export * from "./ApiCallError.js";
|
3
3
|
export * from "./ApiConfiguration.js";
|
4
|
+
export * as api from "./ApiFacade.js";
|
4
5
|
export * from "./BaseUrlApiConfiguration.js";
|
5
|
-
export * from "./BaseUrlPartsApiConfiguration.js";
|
6
6
|
export * from "./RetryError.js";
|
7
7
|
export * from "./RetryFunction.js";
|
8
8
|
export * from "./ThrottleFunction.js";
|
9
9
|
export * from "./retryNever.js";
|
10
10
|
export * from "./retryWithExponentialBackoff.js";
|
11
11
|
export * from "./throttleMaxConcurrency.js";
|
12
|
-
export * from "./
|
12
|
+
export * from "./throttleOff.js";
|
package/core/api/postToApi.cjs
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.postToApi = exports.postJsonToApi = exports.createAudioMpegResponseHandler = exports.createTextResponseHandler = exports.createJsonResponseHandler = exports.createJsonErrorResponseHandler = void 0;
|
4
|
-
const ZodSchema_js_1 = require("../schema/ZodSchema.cjs");
|
3
|
+
exports.postToApi = exports.postJsonToApi = exports.createAudioMpegResponseHandler = exports.createTextResponseHandler = exports.createJsonResponseHandler = exports.createTextErrorResponseHandler = exports.createJsonErrorResponseHandler = void 0;
|
5
4
|
const parseJSON_js_1 = require("../schema/parseJSON.cjs");
|
6
5
|
const ApiCallError_js_1 = require("./ApiCallError.cjs");
|
7
6
|
const createJsonErrorResponseHandler = ({ errorSchema, errorToMessage, isRetryable, }) => async ({ response, url, requestBodyValues }) => {
|
8
7
|
const responseBody = await response.text();
|
8
|
+
// Some providers return an empty response body for some errors:
|
9
|
+
if (responseBody.trim() === "") {
|
10
|
+
return new ApiCallError_js_1.ApiCallError({
|
11
|
+
message: response.statusText,
|
12
|
+
url,
|
13
|
+
requestBodyValues,
|
14
|
+
statusCode: response.status,
|
15
|
+
responseBody,
|
16
|
+
isRetryable: isRetryable?.(response),
|
17
|
+
});
|
18
|
+
}
|
9
19
|
// resilient parsing in case the response is not JSON or does not match the schema:
|
10
20
|
try {
|
11
21
|
const parsedError = (0, parseJSON_js_1.parseJSON)({
|
@@ -19,25 +29,38 @@ const createJsonErrorResponseHandler = ({ errorSchema, errorToMessage, isRetryab
|
|
19
29
|
statusCode: response.status,
|
20
30
|
responseBody,
|
21
31
|
data: parsedError,
|
22
|
-
isRetryable: isRetryable?.(
|
32
|
+
isRetryable: isRetryable?.(response, parsedError),
|
23
33
|
});
|
24
34
|
}
|
25
35
|
catch (parseError) {
|
26
36
|
return new ApiCallError_js_1.ApiCallError({
|
27
|
-
message:
|
37
|
+
message: response.statusText,
|
28
38
|
url,
|
29
39
|
requestBodyValues,
|
30
40
|
statusCode: response.status,
|
31
41
|
responseBody,
|
42
|
+
isRetryable: isRetryable?.(response),
|
32
43
|
});
|
33
44
|
}
|
34
45
|
};
|
35
46
|
exports.createJsonErrorResponseHandler = createJsonErrorResponseHandler;
|
47
|
+
const createTextErrorResponseHandler = ({ isRetryable, } = {}) => async ({ response, url, requestBodyValues }) => {
|
48
|
+
const responseBody = await response.text();
|
49
|
+
return new ApiCallError_js_1.ApiCallError({
|
50
|
+
message: responseBody.trim() !== "" ? responseBody : response.statusText,
|
51
|
+
url,
|
52
|
+
requestBodyValues,
|
53
|
+
statusCode: response.status,
|
54
|
+
responseBody,
|
55
|
+
isRetryable: isRetryable?.(response),
|
56
|
+
});
|
57
|
+
};
|
58
|
+
exports.createTextErrorResponseHandler = createTextErrorResponseHandler;
|
36
59
|
const createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {
|
37
60
|
const responseBody = await response.text();
|
38
61
|
const parsedResult = (0, parseJSON_js_1.safeParseJSON)({
|
39
62
|
text: responseBody,
|
40
|
-
schema:
|
63
|
+
schema: responseSchema,
|
41
64
|
});
|
42
65
|
if (!parsedResult.success) {
|
43
66
|
throw new ApiCallError_js_1.ApiCallError({
|
package/core/api/postToApi.d.ts
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
/// <reference types="node" />
|
2
|
-
import { z } from "zod";
|
3
2
|
import { Schema } from "../schema/Schema.js";
|
4
|
-
import { ZodSchema } from "../schema/ZodSchema.js";
|
5
3
|
import { ApiCallError } from "./ApiCallError.js";
|
6
4
|
export type ResponseHandler<T> = (options: {
|
7
5
|
url: string;
|
@@ -11,9 +9,12 @@ export type ResponseHandler<T> = (options: {
|
|
11
9
|
export declare const createJsonErrorResponseHandler: <T>({ errorSchema, errorToMessage, isRetryable, }: {
|
12
10
|
errorSchema: Schema<T>;
|
13
11
|
errorToMessage: (error: T) => string;
|
14
|
-
isRetryable?: ((
|
12
|
+
isRetryable?: ((response: Response, error?: T | undefined) => boolean) | undefined;
|
15
13
|
}) => ResponseHandler<ApiCallError>;
|
16
|
-
export declare const
|
14
|
+
export declare const createTextErrorResponseHandler: ({ isRetryable, }?: {
|
15
|
+
isRetryable?: ((response: Response) => boolean) | undefined;
|
16
|
+
}) => ResponseHandler<ApiCallError>;
|
17
|
+
export declare const createJsonResponseHandler: <T>(responseSchema: Schema<T>) => ResponseHandler<T>;
|
17
18
|
export declare const createTextResponseHandler: () => ResponseHandler<string>;
|
18
19
|
export declare const createAudioMpegResponseHandler: () => ResponseHandler<Buffer>;
|
19
20
|
export declare const postJsonToApi: <T>({ url, headers, body, failedResponseHandler, successfulResponseHandler, abortSignal, }: {
|
package/core/api/postToApi.js
CHANGED
@@ -1,8 +1,18 @@
|
|
1
|
-
import { ZodSchema } from "../schema/ZodSchema.js";
|
2
1
|
import { parseJSON, safeParseJSON } from "../schema/parseJSON.js";
|
3
2
|
import { ApiCallError } from "./ApiCallError.js";
|
4
3
|
export const createJsonErrorResponseHandler = ({ errorSchema, errorToMessage, isRetryable, }) => async ({ response, url, requestBodyValues }) => {
|
5
4
|
const responseBody = await response.text();
|
5
|
+
// Some providers return an empty response body for some errors:
|
6
|
+
if (responseBody.trim() === "") {
|
7
|
+
return new ApiCallError({
|
8
|
+
message: response.statusText,
|
9
|
+
url,
|
10
|
+
requestBodyValues,
|
11
|
+
statusCode: response.status,
|
12
|
+
responseBody,
|
13
|
+
isRetryable: isRetryable?.(response),
|
14
|
+
});
|
15
|
+
}
|
6
16
|
// resilient parsing in case the response is not JSON or does not match the schema:
|
7
17
|
try {
|
8
18
|
const parsedError = parseJSON({
|
@@ -16,24 +26,36 @@ export const createJsonErrorResponseHandler = ({ errorSchema, errorToMessage, is
|
|
16
26
|
statusCode: response.status,
|
17
27
|
responseBody,
|
18
28
|
data: parsedError,
|
19
|
-
isRetryable: isRetryable?.(
|
29
|
+
isRetryable: isRetryable?.(response, parsedError),
|
20
30
|
});
|
21
31
|
}
|
22
32
|
catch (parseError) {
|
23
33
|
return new ApiCallError({
|
24
|
-
message:
|
34
|
+
message: response.statusText,
|
25
35
|
url,
|
26
36
|
requestBodyValues,
|
27
37
|
statusCode: response.status,
|
28
38
|
responseBody,
|
39
|
+
isRetryable: isRetryable?.(response),
|
29
40
|
});
|
30
41
|
}
|
31
42
|
};
|
43
|
+
export const createTextErrorResponseHandler = ({ isRetryable, } = {}) => async ({ response, url, requestBodyValues }) => {
|
44
|
+
const responseBody = await response.text();
|
45
|
+
return new ApiCallError({
|
46
|
+
message: responseBody.trim() !== "" ? responseBody : response.statusText,
|
47
|
+
url,
|
48
|
+
requestBodyValues,
|
49
|
+
statusCode: response.status,
|
50
|
+
responseBody,
|
51
|
+
isRetryable: isRetryable?.(response),
|
52
|
+
});
|
53
|
+
};
|
32
54
|
export const createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {
|
33
55
|
const responseBody = await response.text();
|
34
56
|
const parsedResult = safeParseJSON({
|
35
57
|
text: responseBody,
|
36
|
-
schema:
|
58
|
+
schema: responseSchema,
|
37
59
|
});
|
38
60
|
if (!parsedResult.success) {
|
39
61
|
throw new ApiCallError({
|