Bases: BaseEmbeddingDriver
TwelveLabs Marengo Embedding Driver.
Generates multimodal embeddings with TwelveLabs' Marengo model. Marengo maps
text, images, and video into the same 512-dimensional vector space, so text
queries can be matched against visual content stored in a vector store.
Attributes:
| Name |
Type |
Description |
model |
str
|
TwelveLabs Marengo model name. Defaults to marengo3.0.
|
api_key |
str | None
|
TwelveLabs API key. Defaults to the TWELVELABS_API_KEY environment variable.
|
client |
TwelveLabs
|
Optionally provide a custom twelvelabs.TwelveLabs client.
|
Source code in griptape/drivers/embedding/twelvelabs_embedding_driver.py
| @define
class TwelveLabsEmbeddingDriver(BaseEmbeddingDriver):
"""TwelveLabs Marengo Embedding Driver.
Generates multimodal embeddings with TwelveLabs' Marengo model. Marengo maps
text, images, and video into the same 512-dimensional vector space, so text
queries can be matched against visual content stored in a vector store.
Attributes:
model: TwelveLabs Marengo model name. Defaults to `marengo3.0`.
api_key: TwelveLabs API key. Defaults to the `TWELVELABS_API_KEY` environment variable.
client: Optionally provide a custom `twelvelabs.TwelveLabs` client.
"""
DEFAULT_MODEL = "marengo3.0"
model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True})
api_key: str | None = field(default=None, kw_only=True, metadata={"serializable": False})
_client: TwelveLabs | None = field(default=None, kw_only=True, alias="client", metadata={"serializable": False})
@lazy_property()
def client(self) -> TwelveLabs:
return import_optional_dependency("twelvelabs").TwelveLabs(api_key=self.api_key)
def try_embed_artifact(self, artifact: TextArtifact | ImageArtifact, **kwargs) -> list[float]:
if isinstance(artifact, TextArtifact):
return self.try_embed_chunk(artifact.value, **kwargs)
response = self.client.embed.create(
model_name=self.model,
image_file=(artifact.name, artifact.value, artifact.mime_type),
)
return self._extract_vector(response.image_embedding)
def try_embed_chunk(self, chunk: str, **kwargs) -> list[float]:
response = self.client.embed.create(model_name=self.model, text=chunk)
return self._extract_vector(response.text_embedding)
def _extract_vector(self, result: Any) -> list[float]:
if result is None or not result.segments:
raise ValueError("TwelveLabs returned no embedding segments.")
vector = result.segments[0].float_
if vector is None:
raise ValueError("TwelveLabs returned an empty embedding.")
return vector
|
DEFAULT_MODEL = 'marengo3.0'
class-attribute
instance-attribute
_client = field(default=None, kw_only=True, alias='client', metadata={'serializable': False})
class-attribute
instance-attribute
api_key = field(default=None, kw_only=True, metadata={'serializable': False})
class-attribute
instance-attribute
model = field(default=DEFAULT_MODEL, kw_only=True, metadata={'serializable': True})
class-attribute
instance-attribute
Source code in griptape/drivers/embedding/twelvelabs_embedding_driver.py
| def _extract_vector(self, result: Any) -> list[float]:
if result is None or not result.segments:
raise ValueError("TwelveLabs returned no embedding segments.")
vector = result.segments[0].float_
if vector is None:
raise ValueError("TwelveLabs returned an empty embedding.")
return vector
|
client()
Source code in griptape/drivers/embedding/twelvelabs_embedding_driver.py
| @lazy_property()
def client(self) -> TwelveLabs:
return import_optional_dependency("twelvelabs").TwelveLabs(api_key=self.api_key)
|
try_embed_artifact(artifact, **kwargs)
Source code in griptape/drivers/embedding/twelvelabs_embedding_driver.py
| def try_embed_artifact(self, artifact: TextArtifact | ImageArtifact, **kwargs) -> list[float]:
if isinstance(artifact, TextArtifact):
return self.try_embed_chunk(artifact.value, **kwargs)
response = self.client.embed.create(
model_name=self.model,
image_file=(artifact.name, artifact.value, artifact.mime_type),
)
return self._extract_vector(response.image_embedding)
|
try_embed_chunk(chunk, **kwargs)
Source code in griptape/drivers/embedding/twelvelabs_embedding_driver.py
| def try_embed_chunk(self, chunk: str, **kwargs) -> list[float]:
response = self.client.embed.create(model_name=self.model, text=chunk)
return self._extract_vector(response.text_embedding)
|