Files
dify-plugin-sdks/python/dify_plugin/invocations/model/rerank.py
Yeuoly f902504af0 feat: support multimodal embeddings (#237)
* Inline multimodal entities into existing models

* apply ruff

* bump to 0.7.0b1

* fix: remove tenant_id from invoke_multimodal_embedding

* tests: add rerank

* apply ruff

* fix

* fix: typing
2025-12-08 19:40:56 +08:00

50 lines
1.5 KiB
Python

from dify_plugin.core.entities.invocation import InvokeType
from dify_plugin.core.runtime import BackwardsInvocation
from dify_plugin.entities.model.rerank import (
MultiModalRerankModelConfig,
MultiModalRerankResult,
RerankModelConfig,
RerankResult,
)
from dify_plugin.entities.model.text_embedding import MultiModalContent
class RerankInvocation(BackwardsInvocation[RerankResult]):
def invoke(self, model_config: RerankModelConfig, docs: list[str], query: str) -> RerankResult:
"""
Invoke rerank
"""
for data in self._backwards_invoke(
InvokeType.Rerank,
RerankResult,
{
**model_config.model_dump(),
"docs": docs,
"query": query,
},
):
return data
raise Exception("No response from rerank")
def invoke_multimodal(
self,
model_config: MultiModalRerankModelConfig,
query: MultiModalContent,
docs: list[MultiModalContent],
) -> MultiModalRerankResult:
payload = {
**model_config.model_dump(),
"query": query.model_dump() if isinstance(query, MultiModalContent) else query,
"docs": [doc.model_dump() if isinstance(doc, MultiModalContent) else doc for doc in docs],
}
for data in self._backwards_invoke(
InvokeType.MultimodalRerank,
MultiModalRerankResult,
payload,
):
return data
raise Exception("No response from multimodal rerank")