@llumiverse/drivers 1.2.0 → 1.4.0-dev.20260629.090753Z
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/lib/{types/adobe → adobe}/firefly.d.ts +2 -1
- package/lib/adobe/firefly.d.ts.map +1 -0
- package/lib/adobe/firefly.js +120 -0
- package/lib/adobe/firefly.js.map +1 -0
- package/lib/anthropic/index.d.ts +23 -0
- package/lib/anthropic/index.d.ts.map +1 -0
- package/lib/anthropic/index.js +68 -0
- package/lib/anthropic/index.js.map +1 -0
- package/lib/{types/azure → azure}/azure_foundry.d.ts +9 -7
- package/lib/azure/azure_foundry.d.ts.map +1 -0
- package/lib/{esm/azure → azure}/azure_foundry.js +138 -124
- package/lib/azure/azure_foundry.js.map +1 -0
- package/lib/{types/bedrock → bedrock}/converse.d.ts +2 -2
- package/lib/bedrock/converse.d.ts.map +1 -0
- package/lib/{esm/bedrock → bedrock}/converse.js +86 -79
- package/lib/bedrock/converse.js.map +1 -0
- package/lib/bedrock/embeddings.d.ts +4 -0
- package/lib/bedrock/embeddings.d.ts.map +1 -0
- package/lib/bedrock/embeddings.js +359 -0
- package/lib/bedrock/embeddings.js.map +1 -0
- package/lib/{types/bedrock → bedrock}/index.d.ts +33 -9
- package/lib/bedrock/index.d.ts.map +1 -0
- package/lib/{esm/bedrock → bedrock}/index.js +599 -324
- package/lib/bedrock/index.js.map +1 -0
- package/lib/{types/bedrock → bedrock}/nova-image-payload.d.ts +5 -5
- package/lib/bedrock/nova-image-payload.d.ts.map +1 -0
- package/lib/{esm/bedrock → bedrock}/nova-image-payload.js +31 -36
- package/lib/bedrock/nova-image-payload.js.map +1 -0
- package/lib/{types/bedrock → bedrock}/payloads.d.ts +1 -1
- package/lib/bedrock/payloads.d.ts.map +1 -0
- package/lib/{cjs/bedrock → bedrock}/payloads.js.map +1 -1
- package/lib/{types/bedrock → bedrock}/s3.d.ts +3 -2
- package/lib/bedrock/s3.d.ts.map +1 -0
- package/lib/{esm/bedrock → bedrock}/s3.js +27 -23
- package/lib/bedrock/s3.js.map +1 -0
- package/lib/{types/bedrock → bedrock}/twelvelabs.d.ts +8 -9
- package/lib/bedrock/twelvelabs.d.ts.map +1 -0
- package/lib/{esm/bedrock → bedrock}/twelvelabs.js +17 -21
- package/lib/bedrock/twelvelabs.js.map +1 -0
- package/lib/{types/groq → groq}/index.d.ts +6 -4
- package/lib/groq/index.d.ts.map +1 -0
- package/lib/{esm/groq → groq}/index.js +72 -39
- package/lib/groq/index.js.map +1 -0
- package/lib/{types/huggingface_ie.d.ts → huggingface_ie.d.ts} +4 -3
- package/lib/huggingface_ie.d.ts.map +1 -0
- package/lib/{esm/huggingface_ie.js → huggingface_ie.js} +32 -31
- package/lib/huggingface_ie.js.map +1 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +16 -0
- package/lib/index.js.map +1 -0
- package/lib/{types/mistral → mistral}/index.d.ts +6 -5
- package/lib/mistral/index.d.ts.map +1 -0
- package/lib/{esm/mistral → mistral}/index.js +66 -38
- package/lib/mistral/index.js.map +1 -0
- package/lib/{types/mistral → mistral}/types.d.ts +1 -0
- package/lib/mistral/types.d.ts.map +1 -0
- package/lib/mistral/types.js.map +1 -0
- package/lib/{types/openai → openai}/azure_openai.d.ts +5 -4
- package/lib/openai/azure_openai.d.ts.map +1 -0
- package/lib/{esm/openai → openai}/azure_openai.js +17 -14
- package/lib/openai/azure_openai.js.map +1 -0
- package/lib/openai/drivers.d.ts +4 -0
- package/lib/openai/drivers.d.ts.map +1 -0
- package/lib/openai/drivers.js +9 -0
- package/lib/openai/drivers.js.map +1 -0
- package/lib/{types/openai → openai}/index.d.ts +17 -5
- package/lib/openai/index.d.ts.map +1 -0
- package/lib/{esm/openai → openai}/index.js +254 -148
- package/lib/openai/index.js.map +1 -0
- package/lib/{types/openai → openai}/openai.d.ts +3 -3
- package/lib/openai/openai.d.ts.map +1 -0
- package/lib/openai/openai.js +15 -0
- package/lib/openai/openai.js.map +1 -0
- package/lib/{types/openai → openai}/openai_compatible.d.ts +3 -3
- package/lib/openai/openai_compatible.d.ts.map +1 -0
- package/lib/{esm/openai → openai}/openai_compatible.js +14 -11
- package/lib/openai/openai_compatible.js.map +1 -0
- package/lib/{types/openai → openai}/openai_format.d.ts +3 -2
- package/lib/openai/openai_format.d.ts.map +1 -0
- package/lib/{esm/openai → openai}/openai_format.js +66 -24
- package/lib/openai/openai_format.js.map +1 -0
- package/lib/{types/replicate.d.ts → replicate.d.ts} +3 -2
- package/lib/replicate.d.ts.map +1 -0
- package/lib/{esm/replicate.js → replicate.js} +59 -49
- package/lib/replicate.js.map +1 -0
- package/lib/shared/claude-messages.d.ts +99 -0
- package/lib/shared/claude-messages.d.ts.map +1 -0
- package/lib/shared/claude-messages.js +869 -0
- package/lib/shared/claude-messages.js.map +1 -0
- package/lib/{types/shared → shared}/claude-thinking.d.ts +1 -1
- package/lib/shared/claude-thinking.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/claude-thinking.js +5 -7
- package/lib/shared/claude-thinking.js.map +1 -0
- package/lib/shared/debug-prompt.d.ts +5 -0
- package/lib/shared/debug-prompt.d.ts.map +1 -0
- package/lib/shared/debug-prompt.js +25 -0
- package/lib/shared/debug-prompt.js.map +1 -0
- package/lib/{types/test-driver → test-driver}/TestErrorCompletionStream.d.ts +1 -1
- package/lib/test-driver/TestErrorCompletionStream.d.ts.map +1 -0
- package/lib/test-driver/TestErrorCompletionStream.js +16 -0
- package/lib/test-driver/TestErrorCompletionStream.js.map +1 -0
- package/lib/{types/test-driver → test-driver}/TestValidationErrorCompletionStream.d.ts +1 -1
- package/lib/test-driver/TestValidationErrorCompletionStream.d.ts.map +1 -0
- package/lib/{esm/test-driver → test-driver}/TestValidationErrorCompletionStream.js +4 -4
- package/lib/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
- package/lib/{types/test-driver → test-driver}/index.d.ts +3 -3
- package/lib/test-driver/index.d.ts.map +1 -0
- package/lib/{esm/test-driver → test-driver}/index.js +20 -20
- package/lib/test-driver/index.js.map +1 -0
- package/lib/{types/test-driver → test-driver}/utils.d.ts +1 -1
- package/lib/test-driver/utils.d.ts.map +1 -0
- package/lib/{esm/test-driver → test-driver}/utils.js +4 -4
- package/lib/test-driver/utils.js.map +1 -0
- package/lib/togetherai/index.d.ts +15 -0
- package/lib/togetherai/index.d.ts.map +1 -0
- package/lib/togetherai/index.js +54 -0
- package/lib/togetherai/index.js.map +1 -0
- package/lib/{types/togetherai → togetherai}/interfaces.d.ts +1 -1
- package/lib/togetherai/interfaces.d.ts.map +1 -0
- package/lib/{cjs/watsonx → togetherai}/interfaces.js.map +1 -1
- package/lib/vertexai/debug.d.ts +2 -0
- package/lib/vertexai/debug.d.ts.map +1 -0
- package/lib/{esm/vertexai → vertexai}/debug.js +1 -1
- package/lib/vertexai/debug.js.map +1 -0
- package/lib/vertexai/embeddings/embed-legacy-multimodal.d.ts +9 -0
- package/lib/vertexai/embeddings/embed-legacy-multimodal.d.ts.map +1 -0
- package/lib/vertexai/embeddings/embed-legacy-multimodal.js +141 -0
- package/lib/vertexai/embeddings/embed-legacy-multimodal.js.map +1 -0
- package/lib/vertexai/embeddings/embed.d.ts +13 -0
- package/lib/vertexai/embeddings/embed.d.ts.map +1 -0
- package/lib/vertexai/embeddings/embed.js +162 -0
- package/lib/vertexai/embeddings/embed.js.map +1 -0
- package/lib/vertexai/embeddings/source-utils.d.ts +9 -0
- package/lib/vertexai/embeddings/source-utils.d.ts.map +1 -0
- package/lib/vertexai/embeddings/source-utils.js +18 -0
- package/lib/vertexai/embeddings/source-utils.js.map +1 -0
- package/lib/{types/vertexai → vertexai}/index.d.ts +31 -19
- package/lib/vertexai/index.d.ts.map +1 -0
- package/lib/{esm/vertexai → vertexai}/index.js +221 -159
- package/lib/vertexai/index.js.map +1 -0
- package/lib/vertexai/models/claude.d.ts +16 -0
- package/lib/vertexai/models/claude.d.ts.map +1 -0
- package/lib/vertexai/models/claude.js +65 -0
- package/lib/vertexai/models/claude.js.map +1 -0
- package/lib/{types/vertexai → vertexai}/models/gemini.d.ts +29 -5
- package/lib/vertexai/models/gemini.d.ts.map +1 -0
- package/lib/{esm/vertexai → vertexai}/models/gemini.js +255 -127
- package/lib/vertexai/models/gemini.js.map +1 -0
- package/lib/{types/vertexai → vertexai}/models/imagen.d.ts +12 -11
- package/lib/vertexai/models/imagen.d.ts.map +1 -0
- package/lib/{esm/vertexai → vertexai}/models/imagen.js +74 -47
- package/lib/vertexai/models/imagen.js.map +1 -0
- package/lib/{types/vertexai → vertexai}/models/llama.d.ts +4 -4
- package/lib/vertexai/models/llama.d.ts.map +1 -0
- package/lib/{esm/vertexai → vertexai}/models/llama.js +37 -33
- package/lib/vertexai/models/llama.js.map +1 -0
- package/lib/vertexai/models.d.ts +21 -0
- package/lib/vertexai/models.d.ts.map +1 -0
- package/lib/{esm/vertexai → vertexai}/models.js +12 -9
- package/lib/vertexai/models.js.map +1 -0
- package/lib/{types/watsonx → watsonx}/index.d.ts +4 -3
- package/lib/watsonx/index.d.ts.map +1 -0
- package/lib/{esm/watsonx → watsonx}/index.js +69 -41
- package/lib/watsonx/index.js.map +1 -0
- package/lib/watsonx/interfaces.d.ts.map +1 -0
- package/lib/{esm/watsonx → watsonx}/interfaces.js.map +1 -1
- package/lib/{types/xai → xai}/index.d.ts +4 -4
- package/lib/xai/index.d.ts.map +1 -0
- package/lib/{esm/xai → xai}/index.js +22 -18
- package/lib/xai/index.js.map +1 -0
- package/package.json +88 -36
- package/src/adobe/firefly.ts +60 -43
- package/src/anthropic/index.ts +121 -0
- package/src/azure/azure_foundry.ts +210 -165
- package/src/bedrock/converse.ts +124 -101
- package/src/bedrock/embeddings.test.ts +508 -0
- package/src/bedrock/embeddings.ts +517 -0
- package/src/bedrock/error-handling.test.ts +62 -14
- package/src/bedrock/index.ts +832 -466
- package/src/bedrock/nova-image-payload.ts +98 -91
- package/src/bedrock/payloads.ts +9 -9
- package/src/bedrock/s3.test.ts +39 -0
- package/src/bedrock/s3.ts +57 -38
- package/src/bedrock/streaming-tool-use.test.ts +86 -69
- package/src/bedrock/twelvelabs.ts +35 -32
- package/src/groq/index.ts +143 -60
- package/src/http-timeout-wiring.test.ts +263 -0
- package/src/huggingface_ie.ts +45 -61
- package/src/index.ts +15 -15
- package/src/mistral/index.ts +97 -48
- package/src/mistral/types.ts +13 -12
- package/src/openai/azure_openai.ts +35 -27
- package/src/openai/drivers.ts +9 -0
- package/src/openai/error-handling.test.ts +308 -113
- package/src/openai/index.ts +389 -254
- package/src/openai/openai.ts +6 -13
- package/src/openai/openai_compatible.ts +35 -25
- package/src/openai/openai_format.ts +90 -40
- package/src/replicate.ts +108 -86
- package/src/shared/claude-messages.test.ts +37 -0
- package/src/shared/claude-messages.ts +1085 -0
- package/src/shared/claude-thinking.ts +6 -12
- package/src/shared/debug-prompt.ts +28 -0
- package/src/test-driver/TestErrorCompletionStream.ts +9 -10
- package/src/test-driver/TestValidationErrorCompletionStream.ts +9 -10
- package/src/test-driver/index.ts +43 -27
- package/src/test-driver/utils.ts +8 -8
- package/src/togetherai/index.test.ts +32 -0
- package/src/togetherai/index.ts +64 -128
- package/src/togetherai/interfaces.ts +5 -5
- package/src/vertexai/debug.ts +3 -3
- package/src/vertexai/embeddings/embed-legacy-multimodal.ts +211 -0
- package/src/vertexai/embeddings/embed.ts +206 -0
- package/src/vertexai/embeddings/embeddings.test.ts +497 -0
- package/src/vertexai/embeddings/source-utils.test.ts +54 -0
- package/src/vertexai/embeddings/source-utils.ts +29 -0
- package/src/vertexai/index.ts +339 -253
- package/src/vertexai/models/claude-error-handling.test.ts +86 -39
- package/src/vertexai/models/claude-streaming-spacing.test.ts +82 -75
- package/src/vertexai/models/claude.ts +84 -1041
- package/src/vertexai/models/gemini-conversation-mutation.test.ts +65 -23
- package/src/vertexai/models/gemini-error-handling.test.ts +126 -10
- package/src/vertexai/models/gemini-orphaned-tool-result.test.ts +118 -0
- package/src/vertexai/models/gemini.ts +372 -182
- package/src/vertexai/models/imagen.ts +164 -100
- package/src/vertexai/models/llama.ts +70 -48
- package/src/vertexai/models.ts +36 -16
- package/src/watsonx/index.ts +101 -65
- package/src/watsonx/interfaces.ts +10 -15
- package/src/xai/index.ts +30 -30
- package/lib/cjs/adobe/firefly.js +0 -120
- package/lib/cjs/adobe/firefly.js.map +0 -1
- package/lib/cjs/azure/azure_foundry.js +0 -432
- package/lib/cjs/azure/azure_foundry.js.map +0 -1
- package/lib/cjs/bedrock/converse.js +0 -359
- package/lib/cjs/bedrock/converse.js.map +0 -1
- package/lib/cjs/bedrock/index.js +0 -1508
- package/lib/cjs/bedrock/index.js.map +0 -1
- package/lib/cjs/bedrock/nova-image-payload.js +0 -207
- package/lib/cjs/bedrock/nova-image-payload.js.map +0 -1
- package/lib/cjs/bedrock/payloads.js +0 -3
- package/lib/cjs/bedrock/s3.js +0 -107
- package/lib/cjs/bedrock/s3.js.map +0 -1
- package/lib/cjs/bedrock/twelvelabs.js +0 -87
- package/lib/cjs/bedrock/twelvelabs.js.map +0 -1
- package/lib/cjs/groq/index.js +0 -328
- package/lib/cjs/groq/index.js.map +0 -1
- package/lib/cjs/huggingface_ie.js +0 -201
- package/lib/cjs/huggingface_ie.js.map +0 -1
- package/lib/cjs/index.js +0 -31
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/mistral/index.js +0 -176
- package/lib/cjs/mistral/index.js.map +0 -1
- package/lib/cjs/mistral/types.js +0 -83
- package/lib/cjs/mistral/types.js.map +0 -1
- package/lib/cjs/openai/azure_openai.js +0 -72
- package/lib/cjs/openai/azure_openai.js.map +0 -1
- package/lib/cjs/openai/index.js +0 -1129
- package/lib/cjs/openai/index.js.map +0 -1
- package/lib/cjs/openai/openai.js +0 -21
- package/lib/cjs/openai/openai.js.map +0 -1
- package/lib/cjs/openai/openai_compatible.js +0 -63
- package/lib/cjs/openai/openai_compatible.js.map +0 -1
- package/lib/cjs/openai/openai_format.js +0 -131
- package/lib/cjs/openai/openai_format.js.map +0 -1
- package/lib/cjs/package.json +0 -3
- package/lib/cjs/replicate.js +0 -275
- package/lib/cjs/replicate.js.map +0 -1
- package/lib/cjs/shared/claude-thinking.js +0 -60
- package/lib/cjs/shared/claude-thinking.js.map +0 -1
- package/lib/cjs/test-driver/TestErrorCompletionStream.js +0 -20
- package/lib/cjs/test-driver/TestErrorCompletionStream.js.map +0 -1
- package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js +0 -24
- package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
- package/lib/cjs/test-driver/index.js +0 -109
- package/lib/cjs/test-driver/index.js.map +0 -1
- package/lib/cjs/test-driver/utils.js +0 -30
- package/lib/cjs/test-driver/utils.js.map +0 -1
- package/lib/cjs/togetherai/index.js +0 -126
- package/lib/cjs/togetherai/index.js.map +0 -1
- package/lib/cjs/togetherai/interfaces.js +0 -3
- package/lib/cjs/togetherai/interfaces.js.map +0 -1
- package/lib/cjs/vertexai/debug.js +0 -12
- package/lib/cjs/vertexai/debug.js.map +0 -1
- package/lib/cjs/vertexai/embeddings/embeddings-image.js +0 -27
- package/lib/cjs/vertexai/embeddings/embeddings-image.js.map +0 -1
- package/lib/cjs/vertexai/embeddings/embeddings-text.js +0 -23
- package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +0 -1
- package/lib/cjs/vertexai/index.js +0 -644
- package/lib/cjs/vertexai/index.js.map +0 -1
- package/lib/cjs/vertexai/models/claude.js +0 -917
- package/lib/cjs/vertexai/models/claude.js.map +0 -1
- package/lib/cjs/vertexai/models/gemini.js +0 -858
- package/lib/cjs/vertexai/models/gemini.js.map +0 -1
- package/lib/cjs/vertexai/models/imagen.js +0 -303
- package/lib/cjs/vertexai/models/imagen.js.map +0 -1
- package/lib/cjs/vertexai/models/llama.js +0 -183
- package/lib/cjs/vertexai/models/llama.js.map +0 -1
- package/lib/cjs/vertexai/models.js +0 -35
- package/lib/cjs/vertexai/models.js.map +0 -1
- package/lib/cjs/watsonx/index.js +0 -161
- package/lib/cjs/watsonx/index.js.map +0 -1
- package/lib/cjs/watsonx/interfaces.js +0 -3
- package/lib/cjs/xai/index.js +0 -65
- package/lib/cjs/xai/index.js.map +0 -1
- package/lib/esm/adobe/firefly.js +0 -116
- package/lib/esm/adobe/firefly.js.map +0 -1
- package/lib/esm/azure/azure_foundry.js.map +0 -1
- package/lib/esm/bedrock/converse.js.map +0 -1
- package/lib/esm/bedrock/index.js.map +0 -1
- package/lib/esm/bedrock/nova-image-payload.js.map +0 -1
- package/lib/esm/bedrock/payloads.js.map +0 -1
- package/lib/esm/bedrock/s3.js.map +0 -1
- package/lib/esm/bedrock/twelvelabs.js.map +0 -1
- package/lib/esm/groq/index.js.map +0 -1
- package/lib/esm/huggingface_ie.js.map +0 -1
- package/lib/esm/index.js +0 -15
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/mistral/index.js.map +0 -1
- package/lib/esm/mistral/types.js.map +0 -1
- package/lib/esm/openai/azure_openai.js.map +0 -1
- package/lib/esm/openai/index.js.map +0 -1
- package/lib/esm/openai/openai.js +0 -14
- package/lib/esm/openai/openai.js.map +0 -1
- package/lib/esm/openai/openai_compatible.js.map +0 -1
- package/lib/esm/openai/openai_format.js.map +0 -1
- package/lib/esm/replicate.js.map +0 -1
- package/lib/esm/shared/claude-thinking.js.map +0 -1
- package/lib/esm/test-driver/TestErrorCompletionStream.js +0 -16
- package/lib/esm/test-driver/TestErrorCompletionStream.js.map +0 -1
- package/lib/esm/test-driver/TestValidationErrorCompletionStream.js.map +0 -1
- package/lib/esm/test-driver/index.js.map +0 -1
- package/lib/esm/test-driver/utils.js.map +0 -1
- package/lib/esm/togetherai/index.js +0 -122
- package/lib/esm/togetherai/index.js.map +0 -1
- package/lib/esm/togetherai/interfaces.js.map +0 -1
- package/lib/esm/vertexai/debug.js.map +0 -1
- package/lib/esm/vertexai/embeddings/embeddings-image.js +0 -24
- package/lib/esm/vertexai/embeddings/embeddings-image.js.map +0 -1
- package/lib/esm/vertexai/embeddings/embeddings-text.js +0 -20
- package/lib/esm/vertexai/embeddings/embeddings-text.js.map +0 -1
- package/lib/esm/vertexai/index.js.map +0 -1
- package/lib/esm/vertexai/models/claude.js +0 -906
- package/lib/esm/vertexai/models/claude.js.map +0 -1
- package/lib/esm/vertexai/models/gemini.js.map +0 -1
- package/lib/esm/vertexai/models/imagen.js.map +0 -1
- package/lib/esm/vertexai/models/llama.js.map +0 -1
- package/lib/esm/vertexai/models.js.map +0 -1
- package/lib/esm/watsonx/index.js.map +0 -1
- package/lib/esm/xai/index.js.map +0 -1
- package/lib/types/adobe/firefly.d.ts.map +0 -1
- package/lib/types/azure/azure_foundry.d.ts.map +0 -1
- package/lib/types/bedrock/converse.d.ts.map +0 -1
- package/lib/types/bedrock/index.d.ts.map +0 -1
- package/lib/types/bedrock/nova-image-payload.d.ts.map +0 -1
- package/lib/types/bedrock/payloads.d.ts.map +0 -1
- package/lib/types/bedrock/s3.d.ts.map +0 -1
- package/lib/types/bedrock/twelvelabs.d.ts.map +0 -1
- package/lib/types/groq/index.d.ts.map +0 -1
- package/lib/types/huggingface_ie.d.ts.map +0 -1
- package/lib/types/index.d.ts +0 -15
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/mistral/index.d.ts.map +0 -1
- package/lib/types/mistral/types.d.ts.map +0 -1
- package/lib/types/openai/azure_openai.d.ts.map +0 -1
- package/lib/types/openai/index.d.ts.map +0 -1
- package/lib/types/openai/openai.d.ts.map +0 -1
- package/lib/types/openai/openai_compatible.d.ts.map +0 -1
- package/lib/types/openai/openai_format.d.ts.map +0 -1
- package/lib/types/replicate.d.ts.map +0 -1
- package/lib/types/shared/claude-thinking.d.ts.map +0 -1
- package/lib/types/test-driver/TestErrorCompletionStream.d.ts.map +0 -1
- package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts.map +0 -1
- package/lib/types/test-driver/index.d.ts.map +0 -1
- package/lib/types/test-driver/utils.d.ts.map +0 -1
- package/lib/types/togetherai/index.d.ts +0 -23
- package/lib/types/togetherai/index.d.ts.map +0 -1
- package/lib/types/togetherai/interfaces.d.ts.map +0 -1
- package/lib/types/vertexai/debug.d.ts +0 -2
- package/lib/types/vertexai/debug.d.ts.map +0 -1
- package/lib/types/vertexai/embeddings/embeddings-image.d.ts +0 -11
- package/lib/types/vertexai/embeddings/embeddings-image.d.ts.map +0 -1
- package/lib/types/vertexai/embeddings/embeddings-text.d.ts +0 -10
- package/lib/types/vertexai/embeddings/embeddings-text.d.ts.map +0 -1
- package/lib/types/vertexai/index.d.ts.map +0 -1
- package/lib/types/vertexai/models/claude.d.ts +0 -119
- package/lib/types/vertexai/models/claude.d.ts.map +0 -1
- package/lib/types/vertexai/models/gemini.d.ts.map +0 -1
- package/lib/types/vertexai/models/imagen.d.ts.map +0 -1
- package/lib/types/vertexai/models/llama.d.ts.map +0 -1
- package/lib/types/vertexai/models.d.ts +0 -20
- package/lib/types/vertexai/models.d.ts.map +0 -1
- package/lib/types/watsonx/index.d.ts.map +0 -1
- package/lib/types/watsonx/interfaces.d.ts.map +0 -1
- package/lib/types/xai/index.d.ts.map +0 -1
- package/src/vertexai/embeddings/embeddings-image.ts +0 -52
- package/src/vertexai/embeddings/embeddings-text.ts +0 -54
- /package/lib/{esm/bedrock → bedrock}/payloads.js +0 -0
- /package/lib/{esm/mistral → mistral}/types.js +0 -0
- /package/lib/{esm/togetherai → togetherai}/interfaces.js +0 -0
- /package/lib/{types/watsonx → watsonx}/interfaces.d.ts +0 -0
- /package/lib/{esm/watsonx → watsonx}/interfaces.js +0 -0
package/src/huggingface_ie.ts
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
|
+
import { InferenceClient, type TextGenerationStreamOutput } from '@huggingface/inference';
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
TextGenerationStreamOutput,
|
|
4
|
-
} from "@huggingface/inference";
|
|
5
|
-
import {
|
|
6
|
-
AbstractDriver,
|
|
7
|
-
AIModel,
|
|
3
|
+
type AIModel,
|
|
8
4
|
AIModelStatus,
|
|
9
|
-
CompletionChunkObject,
|
|
10
|
-
DriverOptions,
|
|
11
|
-
EmbeddingsResult,
|
|
12
|
-
ExecutionOptions,
|
|
13
|
-
TextFallbackOptions,
|
|
14
|
-
} from
|
|
15
|
-
import { transformAsyncIterator } from
|
|
16
|
-
import {
|
|
5
|
+
type CompletionChunkObject,
|
|
6
|
+
type DriverOptions,
|
|
7
|
+
type EmbeddingsResult,
|
|
8
|
+
type ExecutionOptions,
|
|
9
|
+
type TextFallbackOptions,
|
|
10
|
+
} from '@llumiverse/core';
|
|
11
|
+
import { transformAsyncIterator } from '@llumiverse/core/async';
|
|
12
|
+
import { AbstractDriver } from '@llumiverse/core/driver';
|
|
13
|
+
import { FetchClient } from '@vertesia/api-fetch-client';
|
|
17
14
|
|
|
18
15
|
export interface HuggingFaceIEDriverOptions extends DriverOptions {
|
|
19
16
|
apiKey: string;
|
|
@@ -21,25 +18,21 @@ export interface HuggingFaceIEDriverOptions extends DriverOptions {
|
|
|
21
18
|
}
|
|
22
19
|
|
|
23
20
|
export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptions, string> {
|
|
24
|
-
static PROVIDER =
|
|
21
|
+
static PROVIDER = 'huggingface_ie';
|
|
25
22
|
provider = HuggingFaceIEDriver.PROVIDER;
|
|
26
23
|
service: FetchClient;
|
|
27
24
|
_executor?: InferenceClient;
|
|
28
25
|
|
|
29
|
-
constructor(
|
|
30
|
-
options: HuggingFaceIEDriverOptions
|
|
31
|
-
) {
|
|
26
|
+
constructor(options: HuggingFaceIEDriverOptions) {
|
|
32
27
|
super(options);
|
|
33
28
|
if (!options.endpoint_url) {
|
|
34
29
|
throw new Error(`Endpoint URL is required for ${this.provider}`);
|
|
35
30
|
}
|
|
36
|
-
this.service = new FetchClient(this.options.endpoint_url);
|
|
37
|
-
this.service.headers
|
|
31
|
+
this.service = new FetchClient(this.options.endpoint_url, this.getDriverFetch());
|
|
32
|
+
this.service.headers.Authorization = `Bearer ${this.options.apiKey}`;
|
|
38
33
|
}
|
|
39
34
|
|
|
40
|
-
async getModelURLEndpoint(
|
|
41
|
-
modelId: string
|
|
42
|
-
): Promise<{ url: string; status: string; }> {
|
|
35
|
+
async getModelURLEndpoint(modelId: string): Promise<{ url: string; status: string }> {
|
|
43
36
|
const res = (await this.service.get(`/${modelId}`)) as HuggingFaceIEModel;
|
|
44
37
|
return {
|
|
45
38
|
url: res.status.url,
|
|
@@ -50,26 +43,19 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
50
43
|
async getExecutor(model: string) {
|
|
51
44
|
if (!this._executor) {
|
|
52
45
|
const endpoint = await this.getModelURLEndpoint(model);
|
|
53
|
-
if (!endpoint.url)
|
|
54
|
-
throw new Error(
|
|
55
|
-
`Endpoint URL not found for model ${model}`
|
|
56
|
-
);
|
|
46
|
+
if (!endpoint.url) throw new Error(`Endpoint URL not found for model ${model}`);
|
|
57
47
|
if (endpoint.status !== AIModelStatus.Available)
|
|
58
|
-
throw new Error(
|
|
59
|
-
`Endpoint ${model} is not running - current status: ${endpoint.status}`
|
|
60
|
-
);
|
|
48
|
+
throw new Error(`Endpoint ${model} is not running - current status: ${endpoint.status}`);
|
|
61
49
|
|
|
62
50
|
// Use the new InferenceClient and bind it to the endpoint URL
|
|
63
|
-
this._executor = new InferenceClient(this.options.apiKey).endpoint(
|
|
64
|
-
endpoint.url
|
|
65
|
-
);
|
|
51
|
+
this._executor = new InferenceClient(this.options.apiKey).endpoint(endpoint.url);
|
|
66
52
|
}
|
|
67
53
|
return this._executor;
|
|
68
54
|
}
|
|
69
55
|
|
|
70
56
|
async requestTextCompletionStream(prompt: string, options: ExecutionOptions) {
|
|
71
|
-
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !==
|
|
72
|
-
this.logger.debug({ options: options.model_options },
|
|
57
|
+
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
|
|
58
|
+
this.logger.debug({ options: options.model_options }, 'Unexpected option id');
|
|
73
59
|
}
|
|
74
60
|
options.model_options = options.model_options as TextFallbackOptions;
|
|
75
61
|
|
|
@@ -86,22 +72,22 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
86
72
|
//special like <s> are not part of the result
|
|
87
73
|
if (val.token.special) return { result: [] };
|
|
88
74
|
let finish_reason = val.details?.finish_reason as string;
|
|
89
|
-
if (finish_reason ===
|
|
90
|
-
finish_reason =
|
|
75
|
+
if (finish_reason === 'eos_token') {
|
|
76
|
+
finish_reason = 'stop';
|
|
91
77
|
}
|
|
92
78
|
return {
|
|
93
|
-
result: val.token.text ? [{ type:
|
|
79
|
+
result: val.token.text ? [{ type: 'text' as const, value: val.token.text }] : [],
|
|
94
80
|
finish_reason: finish_reason,
|
|
95
81
|
token_usage: {
|
|
96
82
|
result: val.details?.generated_tokens ?? 0,
|
|
97
|
-
}
|
|
83
|
+
},
|
|
98
84
|
};
|
|
99
85
|
});
|
|
100
86
|
}
|
|
101
87
|
|
|
102
88
|
async requestTextCompletion(prompt: string, options: ExecutionOptions) {
|
|
103
|
-
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !==
|
|
104
|
-
this.logger.debug({ options: options.model_options },
|
|
89
|
+
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
|
|
90
|
+
this.logger.debug({ options: options.model_options }, 'Unexpected option id');
|
|
105
91
|
}
|
|
106
92
|
options.model_options = options.model_options as TextFallbackOptions;
|
|
107
93
|
|
|
@@ -115,26 +101,25 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
115
101
|
});
|
|
116
102
|
|
|
117
103
|
let finish_reason = res.details?.finish_reason as string;
|
|
118
|
-
if (finish_reason ===
|
|
119
|
-
finish_reason =
|
|
104
|
+
if (finish_reason === 'eos_token') {
|
|
105
|
+
finish_reason = 'stop';
|
|
120
106
|
}
|
|
121
107
|
return {
|
|
122
|
-
result: [{ type:
|
|
108
|
+
result: [{ type: 'text' as const, value: res.generated_text }],
|
|
123
109
|
finish_reason: finish_reason,
|
|
124
110
|
token_usage: {
|
|
125
|
-
result: res.details?.generated_tokens
|
|
111
|
+
result: res.details?.generated_tokens,
|
|
126
112
|
},
|
|
127
113
|
original_response: options.include_original_response ? res : undefined,
|
|
128
114
|
};
|
|
129
|
-
|
|
130
115
|
}
|
|
131
116
|
|
|
132
117
|
// ============== management API ==============
|
|
133
118
|
|
|
134
119
|
async listModels(): Promise<AIModel[]> {
|
|
135
|
-
const res = await this.service.get(
|
|
136
|
-
const hfModels = res.items
|
|
137
|
-
if (!hfModels
|
|
120
|
+
const res = (await this.service.get('/')) as { items: HuggingFaceIEModel[] };
|
|
121
|
+
const hfModels = res.items;
|
|
122
|
+
if (!hfModels?.length) return [];
|
|
138
123
|
|
|
139
124
|
const models: AIModel[] = hfModels.map((model: HuggingFaceIEModel) => ({
|
|
140
125
|
id: model.name,
|
|
@@ -149,36 +134,35 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
149
134
|
|
|
150
135
|
async validateConnection(): Promise<boolean> {
|
|
151
136
|
try {
|
|
152
|
-
await this.service.get(
|
|
137
|
+
await this.service.get('/models');
|
|
153
138
|
return true;
|
|
154
|
-
} catch
|
|
139
|
+
} catch {
|
|
155
140
|
return false;
|
|
156
141
|
}
|
|
157
142
|
}
|
|
158
143
|
|
|
159
144
|
async generateEmbeddings(): Promise<EmbeddingsResult> {
|
|
160
|
-
throw new Error(
|
|
145
|
+
throw new Error('Method not implemented.');
|
|
161
146
|
}
|
|
162
|
-
|
|
163
147
|
}
|
|
164
148
|
|
|
165
149
|
//get status from HF status
|
|
166
150
|
function getStatus(hfModel: HuggingFaceIEModel): AIModelStatus {
|
|
167
151
|
//[ pending, initializing, updating, updateFailed, running, paused, failed, scaledToZero ]
|
|
168
152
|
switch (hfModel.status.state) {
|
|
169
|
-
case
|
|
153
|
+
case 'running':
|
|
170
154
|
return AIModelStatus.Available;
|
|
171
|
-
case
|
|
155
|
+
case 'initializing':
|
|
172
156
|
return AIModelStatus.Pending;
|
|
173
|
-
case
|
|
157
|
+
case 'updating':
|
|
174
158
|
return AIModelStatus.Pending;
|
|
175
|
-
case
|
|
159
|
+
case 'updateFailed':
|
|
176
160
|
return AIModelStatus.Unavailable;
|
|
177
|
-
case
|
|
161
|
+
case 'paused':
|
|
178
162
|
return AIModelStatus.Stopped;
|
|
179
|
-
case
|
|
163
|
+
case 'failed':
|
|
180
164
|
return AIModelStatus.Unavailable;
|
|
181
|
-
case
|
|
165
|
+
case 'scaledToZero':
|
|
182
166
|
return AIModelStatus.Available;
|
|
183
167
|
default:
|
|
184
168
|
return AIModelStatus.Unknown;
|
|
@@ -199,7 +183,7 @@ interface HuggingFaceIEModel {
|
|
|
199
183
|
model: {
|
|
200
184
|
framework: string;
|
|
201
185
|
image: {
|
|
202
|
-
huggingface:
|
|
186
|
+
huggingface: Record<string, never>;
|
|
203
187
|
};
|
|
204
188
|
repository: string;
|
|
205
189
|
revision: string;
|
package/src/index.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
export * from
|
|
11
|
-
export * from
|
|
12
|
-
export * from
|
|
13
|
-
export * from
|
|
14
|
-
export * from
|
|
15
|
-
|
|
1
|
+
export * from './anthropic/index.js';
|
|
2
|
+
export * from './azure/azure_foundry.js';
|
|
3
|
+
export * from './bedrock/index.js';
|
|
4
|
+
export * from './groq/index.js';
|
|
5
|
+
export * from './huggingface_ie.js';
|
|
6
|
+
export * from './mistral/index.js';
|
|
7
|
+
export * from './openai/azure_openai.js';
|
|
8
|
+
export * from './openai/openai.js';
|
|
9
|
+
export * from './openai/openai_compatible.js';
|
|
10
|
+
export * from './replicate.js';
|
|
11
|
+
export * from './test-driver/index.js';
|
|
12
|
+
export * from './togetherai/index.js';
|
|
13
|
+
export * from './vertexai/index.js';
|
|
14
|
+
export * from './watsonx/index.js';
|
|
15
|
+
export * from './xai/index.js';
|
package/src/mistral/index.ts
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import {
|
|
2
|
+
type AIModel,
|
|
3
|
+
type Completion,
|
|
4
|
+
type CompletionChunkObject,
|
|
5
|
+
type DriverOptions,
|
|
6
|
+
type EmbeddingsOptions,
|
|
7
|
+
type EmbeddingsResult,
|
|
8
|
+
type ExecutionOptions,
|
|
9
|
+
LlumiverseError,
|
|
10
|
+
MISTRAL_DEFAULT_EMBEDDING_MODEL,
|
|
11
|
+
normalizeEmbeddingsOptions,
|
|
12
|
+
type PromptSegment,
|
|
13
|
+
type TextFallbackOptions,
|
|
14
|
+
} from '@llumiverse/core';
|
|
15
|
+
import { transformSSEStream } from '@llumiverse/core/async';
|
|
16
|
+
import { AbstractDriver } from '@llumiverse/core/driver';
|
|
17
|
+
import { getJSONSafetyNotice } from '@llumiverse/core/formatters';
|
|
18
|
+
import { FetchClient, type ServerSentEvent } from '@vertesia/api-fetch-client';
|
|
19
|
+
import { formatOpenAILikeTextPrompt, type OpenAITextMessage } from '../openai/openai_format.js';
|
|
20
|
+
import type {
|
|
21
|
+
ChatCompletionResponse,
|
|
22
|
+
CompletionRequestParams,
|
|
23
|
+
EmbeddingResponse,
|
|
24
|
+
ListModelsResponse,
|
|
25
|
+
ResponseFormat,
|
|
26
|
+
} from './types.js';
|
|
7
27
|
|
|
8
28
|
//TODO retry on 429
|
|
9
29
|
//const RETRY_STATUS_CODES = [429, 500, 502, 503, 504];
|
|
@@ -16,7 +36,7 @@ interface MistralAIDriverOptions extends DriverOptions {
|
|
|
16
36
|
}
|
|
17
37
|
|
|
18
38
|
export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, OpenAITextMessage[]> {
|
|
19
|
-
static PROVIDER =
|
|
39
|
+
static PROVIDER = 'mistralai';
|
|
20
40
|
|
|
21
41
|
provider = MistralAIDriver.PROVIDER;
|
|
22
42
|
apiKey: string;
|
|
@@ -27,13 +47,12 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
|
|
|
27
47
|
super(options);
|
|
28
48
|
this.apiKey = options.apiKey;
|
|
29
49
|
//this.client = new MistralClient(options.apiKey, options.endpointUrl);
|
|
30
|
-
this.client = new FetchClient(options.endpoint_url || ENDPOINT).withHeaders({
|
|
31
|
-
authorization: `Bearer ${this.apiKey}
|
|
50
|
+
this.client = new FetchClient(options.endpoint_url || ENDPOINT, this.getDriverFetch()).withHeaders({
|
|
51
|
+
authorization: `Bearer ${this.apiKey}`,
|
|
32
52
|
});
|
|
33
53
|
}
|
|
34
54
|
|
|
35
55
|
getResponseFormat = (_options: ExecutionOptions): ResponseFormat | undefined => {
|
|
36
|
-
|
|
37
56
|
// const responseFormatJson: ResponseFormat = {
|
|
38
57
|
// type: "json_object",
|
|
39
58
|
// } as ResponseFormat
|
|
@@ -42,29 +61,28 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
|
|
|
42
61
|
// type: "text",
|
|
43
62
|
// } as ResponseFormat;
|
|
44
63
|
|
|
45
|
-
|
|
46
64
|
// return _options.result_schema ? responseFormatJson : responseFormatText;
|
|
47
65
|
|
|
48
66
|
//TODO remove this when Mistral properly supports the parameters - it makes an error for now
|
|
49
67
|
// some models like mixtral mistral tiny or medium are throwing an error when using the response_format parameter
|
|
50
|
-
return undefined
|
|
51
|
-
}
|
|
68
|
+
return undefined;
|
|
69
|
+
};
|
|
52
70
|
|
|
53
71
|
protected async formatPrompt(segments: PromptSegment[], opts: ExecutionOptions): Promise<OpenAITextMessage[]> {
|
|
54
72
|
const messages = formatOpenAILikeTextPrompt(segments);
|
|
55
73
|
//Add JSON instruction is schema is provided
|
|
56
74
|
if (opts.result_schema) {
|
|
57
75
|
messages.push({
|
|
58
|
-
role:
|
|
59
|
-
content:
|
|
76
|
+
role: 'user',
|
|
77
|
+
content: `IMPORTANT: ${getJSONSafetyNotice(opts.result_schema)}`,
|
|
60
78
|
});
|
|
61
79
|
}
|
|
62
80
|
return messages;
|
|
63
81
|
}
|
|
64
82
|
|
|
65
83
|
async requestTextCompletion(messages: OpenAITextMessage[], options: ExecutionOptions): Promise<Completion> {
|
|
66
|
-
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !==
|
|
67
|
-
this.logger.debug({ options: options.model_options },
|
|
84
|
+
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
|
|
85
|
+
this.logger.debug({ options: options.model_options }, 'Unexpected option id');
|
|
68
86
|
}
|
|
69
87
|
options.model_options = options.model_options as TextFallbackOptions;
|
|
70
88
|
|
|
@@ -75,30 +93,33 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
|
|
|
75
93
|
temperature: options.model_options?.temperature,
|
|
76
94
|
responseFormat: this.getResponseFormat(options),
|
|
77
95
|
});
|
|
78
|
-
this.logger.debug({ payload: JSON.stringify(requestPayload) },
|
|
96
|
+
this.logger.debug({ payload: JSON.stringify(requestPayload) }, 'Mistral request payload');
|
|
79
97
|
|
|
80
|
-
const res = await this.client.post('/v1/chat/completions', {
|
|
98
|
+
const res = (await this.client.post('/v1/chat/completions', {
|
|
81
99
|
payload: requestPayload,
|
|
82
|
-
}) as ChatCompletionResponse;
|
|
100
|
+
})) as ChatCompletionResponse;
|
|
83
101
|
|
|
84
102
|
const choice = res.choices[0];
|
|
85
103
|
const result = choice.message.content;
|
|
86
104
|
|
|
87
105
|
return {
|
|
88
|
-
result: result ? [{ type:
|
|
106
|
+
result: result ? [{ type: 'text', value: result }] : [],
|
|
89
107
|
token_usage: {
|
|
90
108
|
prompt: res.usage.prompt_tokens,
|
|
91
109
|
result: res.usage.completion_tokens,
|
|
92
110
|
total: res.usage.total_tokens,
|
|
93
111
|
},
|
|
94
|
-
finish_reason: choice.finish_reason,
|
|
112
|
+
finish_reason: choice.finish_reason, //Uses expected "stop" , "length" format
|
|
95
113
|
original_response: options.include_original_response ? res : undefined,
|
|
96
114
|
};
|
|
97
115
|
}
|
|
98
116
|
|
|
99
|
-
async requestTextCompletionStream(
|
|
100
|
-
|
|
101
|
-
|
|
117
|
+
async requestTextCompletionStream(
|
|
118
|
+
messages: OpenAITextMessage[],
|
|
119
|
+
options: ExecutionOptions,
|
|
120
|
+
): Promise<AsyncIterable<CompletionChunkObject>> {
|
|
121
|
+
if (options.model_options?._option_id !== undefined && options.model_options?._option_id !== 'text-fallback') {
|
|
122
|
+
this.logger.debug({ options: options.model_options }, 'Unexpected option id');
|
|
102
123
|
}
|
|
103
124
|
options.model_options = options.model_options as TextFallbackOptions;
|
|
104
125
|
|
|
@@ -112,19 +133,19 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
|
|
|
112
133
|
stream: true,
|
|
113
134
|
stopSequences: options.model_options?.stop_sequence,
|
|
114
135
|
});
|
|
115
|
-
this.logger.debug({ payload: JSON.stringify(streamPayload) },
|
|
136
|
+
this.logger.debug({ payload: JSON.stringify(streamPayload) }, 'Mistral stream request payload');
|
|
116
137
|
|
|
117
|
-
const stream = await this.client.post('/v1/chat/completions', {
|
|
138
|
+
const stream = (await this.client.post('/v1/chat/completions', {
|
|
118
139
|
payload: streamPayload,
|
|
119
|
-
reader: 'sse'
|
|
120
|
-
})
|
|
140
|
+
reader: 'sse',
|
|
141
|
+
})) as ReadableStream<ServerSentEvent>;
|
|
121
142
|
|
|
122
143
|
return transformSSEStream(stream, (data: string) => {
|
|
123
144
|
const json = JSON.parse(data);
|
|
124
145
|
const content = json.choices[0]?.delta.content;
|
|
125
146
|
return {
|
|
126
|
-
result: content ? [{ type:
|
|
127
|
-
finish_reason: json.choices[0]?.finish_reason,
|
|
147
|
+
result: content ? [{ type: 'text', value: content }] : [],
|
|
148
|
+
finish_reason: json.choices[0]?.finish_reason, //Uses expected "stop" , "length" format
|
|
128
149
|
token_usage: {
|
|
129
150
|
prompt: json.usage?.prompt_tokens,
|
|
130
151
|
result: json.usage?.completion_tokens,
|
|
@@ -132,44 +153,72 @@ export class MistralAIDriver extends AbstractDriver<MistralAIDriverOptions, Open
|
|
|
132
153
|
},
|
|
133
154
|
};
|
|
134
155
|
});
|
|
135
|
-
|
|
136
156
|
}
|
|
137
157
|
|
|
138
158
|
async listModels(): Promise<AIModel<string>[]> {
|
|
139
159
|
const models: ListModelsResponse = await this.client.get('v1/models');
|
|
140
160
|
|
|
141
|
-
const aiModels = models.data.map(m => {
|
|
161
|
+
const aiModels = models.data.map((m) => {
|
|
142
162
|
return {
|
|
143
163
|
id: m.id,
|
|
144
164
|
name: m.id,
|
|
145
165
|
description: undefined,
|
|
146
166
|
provider: this.provider,
|
|
147
167
|
owner: m.owned_by,
|
|
148
|
-
}
|
|
168
|
+
};
|
|
149
169
|
});
|
|
150
170
|
|
|
151
171
|
return aiModels;
|
|
152
172
|
}
|
|
153
173
|
|
|
154
174
|
validateConnection(): Promise<boolean> {
|
|
155
|
-
throw new Error(
|
|
175
|
+
throw new Error('Method not implemented.');
|
|
156
176
|
}
|
|
157
177
|
|
|
158
|
-
async generateEmbeddings(
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
178
|
+
async generateEmbeddings(options: EmbeddingsOptions): Promise<EmbeddingsResult> {
|
|
179
|
+
const normalized = normalizeEmbeddingsOptions(options);
|
|
180
|
+
const model = normalized.model ?? MISTRAL_DEFAULT_EMBEDDING_MODEL;
|
|
181
|
+
const texts = normalized.inputs.map((input) => {
|
|
182
|
+
if (input.type !== 'text') {
|
|
183
|
+
throw new Error(
|
|
184
|
+
`Provider 'mistralai' does not support '${input.type}' embeddings; only 'text' is supported.`,
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
return input.text;
|
|
165
188
|
});
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
189
|
+
|
|
190
|
+
try {
|
|
191
|
+
const r = (await this.client.post('/v1/embeddings', {
|
|
192
|
+
payload: {
|
|
193
|
+
model,
|
|
194
|
+
input: texts,
|
|
195
|
+
encoding_format: 'float',
|
|
196
|
+
},
|
|
197
|
+
})) as EmbeddingResponse;
|
|
198
|
+
const ordered: { index: number; embedding: number[] }[] = [...r.data].sort((a, b) => a.index - b.index);
|
|
199
|
+
const promptTokens: number | undefined =
|
|
200
|
+
r.usage?.total_tokens ??
|
|
201
|
+
(r.usage ? (r.usage.prompt_tokens ?? 0) + (r.usage.completion_tokens ?? 0) : undefined);
|
|
202
|
+
|
|
203
|
+
return {
|
|
204
|
+
model,
|
|
205
|
+
results: ordered.map((entry) => ({
|
|
206
|
+
outputs: [{ values: entry.embedding, modality: 'text' }],
|
|
207
|
+
})),
|
|
208
|
+
...(typeof promptTokens === 'number'
|
|
209
|
+
? { usage: { input_tokens: promptTokens, input_text_tokens: promptTokens } }
|
|
210
|
+
: {}),
|
|
211
|
+
};
|
|
212
|
+
} catch (error) {
|
|
213
|
+
if (LlumiverseError.isLlumiverseError(error)) throw error;
|
|
214
|
+
if (error instanceof Error && typeof (error as { status?: unknown }).status !== 'number') throw error;
|
|
215
|
+
throw this.formatLlumiverseError(error, {
|
|
216
|
+
provider: this.provider,
|
|
217
|
+
model,
|
|
218
|
+
operation: 'execute',
|
|
219
|
+
});
|
|
170
220
|
}
|
|
171
221
|
}
|
|
172
|
-
|
|
173
222
|
}
|
|
174
223
|
|
|
175
224
|
/**
|
|
@@ -214,4 +263,4 @@ function _makeChatCompletionRequest({
|
|
|
214
263
|
response_format: responseFormat ?? undefined,
|
|
215
264
|
stop: stopSequences ?? undefined,
|
|
216
265
|
};
|
|
217
|
-
}
|
|
266
|
+
}
|
package/src/mistral/types.ts
CHANGED
|
@@ -112,6 +112,7 @@ export interface ChatCompletionResponseChunk {
|
|
|
112
112
|
export interface Embedding {
|
|
113
113
|
id: string;
|
|
114
114
|
object: 'embedding';
|
|
115
|
+
index: number;
|
|
115
116
|
embedding: number[];
|
|
116
117
|
}
|
|
117
118
|
|
|
@@ -124,17 +125,17 @@ export interface EmbeddingResponse {
|
|
|
124
125
|
}
|
|
125
126
|
|
|
126
127
|
export interface CompletionRequestParams {
|
|
127
|
-
model: string
|
|
128
|
-
messages: Array<{ role: string; name?: string
|
|
129
|
-
tools?: Array<{ type: string; function: Function
|
|
130
|
-
temperature?: number
|
|
131
|
-
maxTokens?: number
|
|
132
|
-
topP?: number
|
|
133
|
-
randomSeed?: number
|
|
134
|
-
stream?: boolean
|
|
135
|
-
toolChoice?: ToolChoice
|
|
136
|
-
responseFormat?: ResponseFormat
|
|
137
|
-
stopSequences?: string[]
|
|
128
|
+
model: string;
|
|
129
|
+
messages: Array<{ role: string; name?: string; content: string | string[]; tool_calls?: ToolCalls[] }>;
|
|
130
|
+
tools?: Array<{ type: string; function: Function }>;
|
|
131
|
+
temperature?: number;
|
|
132
|
+
maxTokens?: number;
|
|
133
|
+
topP?: number;
|
|
134
|
+
randomSeed?: number;
|
|
135
|
+
stream?: boolean;
|
|
136
|
+
toolChoice?: ToolChoice;
|
|
137
|
+
responseFormat?: ResponseFormat;
|
|
138
|
+
stopSequences?: string[];
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
// class MistralClient {
|
|
@@ -204,4 +205,4 @@ export interface CompletionRequestParams {
|
|
|
204
205
|
// model: string;
|
|
205
206
|
// input: string | string[];
|
|
206
207
|
// }): Promise<EmbeddingResponse>;
|
|
207
|
-
// }
|
|
208
|
+
// }
|
|
@@ -1,28 +1,31 @@
|
|
|
1
|
-
import { DefaultAzureCredential, getBearerTokenProvider } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { DefaultAzureCredential, getBearerTokenProvider } from '@azure/identity';
|
|
2
|
+
import {
|
|
3
|
+
type AIModel,
|
|
4
|
+
type DriverOptions,
|
|
5
|
+
getModelCapabilities,
|
|
6
|
+
modelModalitiesToArray,
|
|
7
|
+
Providers,
|
|
8
|
+
} from '@llumiverse/core';
|
|
9
|
+
import type OpenAI from 'openai';
|
|
10
|
+
import { AzureOpenAI } from 'openai';
|
|
11
|
+
import { BaseOpenAIDriver } from './index.js';
|
|
5
12
|
|
|
6
13
|
export interface AzureOpenAIDriverOptions extends DriverOptions {
|
|
7
|
-
|
|
8
14
|
/**
|
|
9
15
|
* The credentials to use to access Azure OpenAI
|
|
10
16
|
*/
|
|
11
|
-
azureADTokenProvider?:
|
|
17
|
+
azureADTokenProvider?: (options?: unknown) => Promise<string>;
|
|
12
18
|
|
|
13
19
|
apiKey?: string;
|
|
14
20
|
|
|
15
21
|
endpoint?: string;
|
|
16
22
|
|
|
17
|
-
apiVersion?: string
|
|
23
|
+
apiVersion?: string;
|
|
18
24
|
|
|
19
25
|
deployment?: string;
|
|
20
|
-
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
export class AzureOpenAIDriver extends BaseOpenAIDriver {
|
|
24
|
-
|
|
25
|
-
|
|
26
29
|
service: AzureOpenAI;
|
|
27
30
|
readonly provider = Providers.azure_openai;
|
|
28
31
|
|
|
@@ -43,8 +46,9 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
|
|
|
43
46
|
apiKey: opts.apiKey,
|
|
44
47
|
azureADTokenProvider: opts.azureADTokenProvider,
|
|
45
48
|
endpoint: opts.endpoint,
|
|
46
|
-
apiVersion: opts.apiVersion ??
|
|
47
|
-
deployment: opts.deployment
|
|
49
|
+
apiVersion: opts.apiVersion ?? '2024-10-21',
|
|
50
|
+
deployment: opts.deployment,
|
|
51
|
+
fetch: this.getDriverFetch(),
|
|
48
52
|
});
|
|
49
53
|
}
|
|
50
54
|
|
|
@@ -52,7 +56,7 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
|
|
|
52
56
|
* Get default authentication for Azure Cognitive Services API
|
|
53
57
|
*/
|
|
54
58
|
getDefaultCognitiveServicesAuth() {
|
|
55
|
-
const scope =
|
|
59
|
+
const scope = 'https://cognitiveservices.azure.com/.default';
|
|
56
60
|
const azureADTokenProvider = getBearerTokenProvider(new DefaultAzureCredential(), scope);
|
|
57
61
|
return azureADTokenProvider;
|
|
58
62
|
}
|
|
@@ -63,7 +67,9 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
|
|
|
63
67
|
|
|
64
68
|
async _listModels(_filter?: (m: OpenAI.Models.Model) => boolean): Promise<AIModel[]> {
|
|
65
69
|
if (!this.service.deploymentName) {
|
|
66
|
-
throw new Error(
|
|
70
|
+
throw new Error(
|
|
71
|
+
'A specific deployment is not set. Azure OpenAI cannot list deployments. Update your endpoint URL to include the deployment name, e.g., https://your-resource.openai.azure.com/openai/deployments/your-deployment/chat/completions',
|
|
72
|
+
);
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
//Do a test execution to check if the model works and to get the model ID.
|
|
@@ -71,22 +77,24 @@ export class AzureOpenAIDriver extends BaseOpenAIDriver {
|
|
|
71
77
|
try {
|
|
72
78
|
const testResponse = await this.service.chat.completions.create({
|
|
73
79
|
model: this.service.deploymentName,
|
|
74
|
-
messages: [{ role:
|
|
80
|
+
messages: [{ role: 'user', content: 'Hi' }],
|
|
75
81
|
max_tokens: 1,
|
|
76
82
|
});
|
|
77
83
|
modelID = testResponse.model;
|
|
78
84
|
} catch (error) {
|
|
79
|
-
this.logger.error({ error },
|
|
85
|
+
this.logger.error({ error }, 'Failed to test model for Azure OpenAI listing :');
|
|
80
86
|
}
|
|
81
|
-
const modelCapability = getModelCapabilities(modelID,
|
|
82
|
-
return [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
const modelCapability = getModelCapabilities(modelID, 'openai');
|
|
88
|
+
return [
|
|
89
|
+
{
|
|
90
|
+
id: modelID,
|
|
91
|
+
name: this.service.deploymentName,
|
|
92
|
+
provider: this.provider,
|
|
93
|
+
owner: 'openai',
|
|
94
|
+
input_modalities: modelModalitiesToArray(modelCapability.input),
|
|
95
|
+
output_modalities: modelModalitiesToArray(modelCapability.output),
|
|
96
|
+
tool_support: modelCapability.tool_support,
|
|
97
|
+
} satisfies AIModel<string>,
|
|
98
|
+
];
|
|
91
99
|
}
|
|
92
|
-
}
|
|
100
|
+
}
|