diff --git a/src/collections/config/types/vectorizer.ts b/src/collections/config/types/vectorizer.ts index 1308f167..b9ac4dec 100644 --- a/src/collections/config/types/vectorizer.ts +++ b/src/collections/config/types/vectorizer.ts @@ -295,15 +295,17 @@ export type Multi2VecJinaAIConfig = { /** The configuration for multi-media vectorization using the VoyageAI module. * - * See the [documentation](https://weaviate.io/developers/weaviate/model-providers/transformers/embeddings-multimodal) for detailed usage. + * See the [documentation](https://weaviate.io/developers/weaviate/model-providers/voyageai/embeddings-multimodal) for detailed usage. */ export type Multi2VecVoyageAIConfig = { /** The base URL to use where API requests should go. */ baseURL?: string; + /** The dimensionality of the vector once embedded. Supported values: 256, 512, 1024 (default), 2048. */ + dimensions?: number; /** The image fields used when vectorizing. */ imageFields?: string[]; /** The model to use. */ - model?: string; + model?: 'voyage-multimodal-3' | 'voyage-multimodal-3.5' | string; /** How the output from the model should be encoded on return. */ outputEncoding?: string; /** The text fields used when vectorizing. */ @@ -312,12 +314,16 @@ export type Multi2VecVoyageAIConfig = { truncate?: boolean; /** Whether the collection name is vectorized. */ vectorizeCollectionName?: boolean; + /** The video fields used when vectorizing. */ + videoFields?: string[]; /** The weights of the fields used for vectorization. */ weights?: { /** The weights of the image fields. */ imageFields?: number[]; /** The weights of the text fields. */ textFields?: number[]; + /** The weights of the video fields. */ + videoFields?: number[]; }; }; diff --git a/src/collections/configure/types/vectorizer.ts b/src/collections/configure/types/vectorizer.ts index a0d776a7..17521f86 100644 --- a/src/collections/configure/types/vectorizer.ts +++ b/src/collections/configure/types/vectorizer.ts @@ -227,6 +227,8 @@ export type Multi2VecVoyageAIConfigCreate = Omit { }); }); + it('should create the correct Multi2VecVoyageAIConfig type with voyage-multimodal-3.5 model', () => { + const config = configure.vectors.multi2VecVoyageAI({ + name: 'test', + model: 'voyage-multimodal-3.5', + dimensions: 1024, + imageFields: ['image'], + textFields: ['text'], + videoFields: ['video'], + }); + expect(config).toEqual>({ + name: 'test', + vectorIndex: { + name: 'hnsw', + config: undefined, + }, + vectorizer: { + name: 'multi2vec-voyageai', + config: { + model: 'voyage-multimodal-3.5', + dimensions: 1024, + imageFields: ['image'], + textFields: ['text'], + videoFields: ['video'], + }, + }, + }); + }); + it('should create the correct Text2VecAWSConfig type with defaults', () => { const config = configure.vectors.text2VecAWS({ region: 'region', diff --git a/src/collections/configure/vectorizer.ts b/src/collections/configure/vectorizer.ts index e9c863cf..a608eb38 100644 --- a/src/collections/configure/vectorizer.ts +++ b/src/collections/configure/vectorizer.ts @@ -400,9 +400,11 @@ const legacyVectors = { const { name, quantizer, vectorIndexConfig, ...config } = opts || {}; const imageFields = config.imageFields?.map(mapMulti2VecField); const textFields = config.textFields?.map(mapMulti2VecField); + const videoFields = config.videoFields?.map(mapMulti2VecField); let weights: Multi2VecVoyageAIConfig['weights'] = {}; weights = formatMulti2VecFields(weights, 'imageFields', imageFields); weights = formatMulti2VecFields(weights, 'textFields', textFields); + weights = formatMulti2VecFields(weights, 'videoFields', videoFields); return makeVectorizer(name, { quantizer, vectorIndexConfig, @@ -415,6 +417,7 @@ const legacyVectors = { ...config, imageFields: imageFields?.map((f) => f.name), textFields: textFields?.map((f) => f.name), + videoFields: videoFields?.map((f) => f.name), weights: Object.keys(weights).length === 0 ? undefined : weights, }, },