mirror of
https://github.com/langgenius/dify.git
synced 2026-09-24 23:22:26 +08:00
feat: pass image file to llm (#39848)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
autofix-ci[bot]
parent
982c0667e1
commit
dc8dd09450
@@ -16,6 +16,7 @@ from graphon.model_runtime.entities.llm_entities import LLMUsage
|
||||
from graphon.model_runtime.entities.message_entities import (
|
||||
DocumentPromptMessageContent,
|
||||
ImagePromptMessageContent,
|
||||
PromptMessageContentType,
|
||||
TextPromptMessageContent,
|
||||
UserPromptMessage,
|
||||
)
|
||||
@@ -133,6 +134,7 @@ def runner(mocker: MockerFixture, sqlite_engine: Engine) -> Iterator[FunctionCal
|
||||
runner.history_prompt_messages = []
|
||||
runner._current_thoughts = []
|
||||
runner.files = []
|
||||
runner.vision_enabled = False
|
||||
runner.agent_callback = MagicMock()
|
||||
runner.session = Session(sqlite_engine)
|
||||
|
||||
@@ -290,6 +292,82 @@ class TestClearUserPromptImageMessages:
|
||||
|
||||
assert result[0].content == "hello\n[image]\n[file]"
|
||||
|
||||
def test_keeps_knowledge_retrieval_image_message(self, runner: FunctionCallAgentRunner):
|
||||
text = TextPromptMessageContent(data="query")
|
||||
image = ImagePromptMessageContent(format="url", mime_type="image/png")
|
||||
user_msg = UserPromptMessage(name="knowledge_retrieval", content=[image, text])
|
||||
|
||||
result = runner._clear_user_prompt_image_messages([user_msg])
|
||||
|
||||
assert result[0].content == [image, text]
|
||||
|
||||
|
||||
# ==============================
|
||||
# Dataset Tool Image Content
|
||||
# ==============================
|
||||
|
||||
|
||||
class TestBuildDatasetToolImageContents:
|
||||
def test_returns_empty_when_vision_disabled(self, runner: FunctionCallAgentRunner):
|
||||
tool = MagicMock()
|
||||
tool.__class__.__name__ = "DatasetRetrieverTool"
|
||||
response = ""
|
||||
|
||||
assert runner._build_dataset_tool_image_contents(runner.session, response, tool) == []
|
||||
|
||||
def test_builds_image_contents_from_dataset_tool_preview_links(
|
||||
self, runner: FunctionCallAgentRunner, mocker: MockerFixture
|
||||
):
|
||||
from core.tools.utils.dataset_retriever_tool import DatasetRetrieverTool
|
||||
|
||||
runner.vision_enabled = True
|
||||
image_content = ImagePromptMessageContent(format="url", mime_type="image/png")
|
||||
to_prompt_content = mocker.patch(
|
||||
"core.agent.fc_agent_runner.file_manager.to_prompt_message_content",
|
||||
return_value=image_content,
|
||||
)
|
||||
grant_access = mocker.patch("core.agent.fc_agent_runner.grant_upload_file_access")
|
||||
sign_preview = mocker.patch(
|
||||
"core.agent.fc_agent_runner.sign_upload_file_preview_url",
|
||||
return_value="http://localhost:5001/files/file-id/file-preview?sign=1",
|
||||
)
|
||||
build_reference = mocker.patch("core.agent.fc_agent_runner.build_file_reference", return_value="file-ref")
|
||||
|
||||
upload_file = MagicMock()
|
||||
upload_file.id = "890985e9-c2f1-484e-bc7b-62010a337e6d"
|
||||
upload_file.name = "chart.png"
|
||||
upload_file.extension = "png"
|
||||
upload_file.mime_type = "image/png"
|
||||
upload_file.source_url = ""
|
||||
upload_file.size = 123
|
||||
upload_file.key = "image_files/chart.png"
|
||||
|
||||
non_image_file = MagicMock()
|
||||
non_image_file.id = "11111111-1111-1111-1111-111111111111"
|
||||
non_image_file.mime_type = "application/pdf"
|
||||
|
||||
scalars_result = MagicMock()
|
||||
scalars_result.all.return_value = [upload_file, non_image_file]
|
||||
session = MagicMock()
|
||||
session.scalars.return_value = scalars_result
|
||||
|
||||
response = (
|
||||
"\n"
|
||||
"duplicate \n"
|
||||
"file "
|
||||
)
|
||||
|
||||
tool = MagicMock(spec=DatasetRetrieverTool)
|
||||
contents = runner._build_dataset_tool_image_contents(session, response, tool)
|
||||
|
||||
assert contents == [image_content]
|
||||
assert contents[0].type == PromptMessageContentType.IMAGE
|
||||
grant_access.assert_called_once()
|
||||
assert list(grant_access.call_args.args[0]) == ["890985e9-c2f1-484e-bc7b-62010a337e6d"]
|
||||
sign_preview.assert_called_once_with(upload_file.id, upload_file.extension)
|
||||
build_reference.assert_called_once_with(record_id=str(upload_file.id))
|
||||
to_prompt_content.assert_called_once()
|
||||
|
||||
|
||||
# ==============================
|
||||
# Run Method Tests
|
||||
|
||||
Reference in New Issue
Block a user