mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-14 05:16:00 +08:00
Improve MIME type detection for image URLs (#6531)
Co-authored-by: seayon <zhaoxuyang@shouqianba.com>
This commit is contained in:
parent
47919983bf
commit
561a61e7fe
@ -1,6 +1,6 @@
|
|||||||
import base64
|
import base64
|
||||||
|
import io
|
||||||
import json
|
import json
|
||||||
import mimetypes
|
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
from typing import Optional, Union, cast
|
from typing import Optional, Union, cast
|
||||||
|
|
||||||
@ -18,6 +18,7 @@ from anthropic.types import (
|
|||||||
)
|
)
|
||||||
from anthropic.types.beta.tools import ToolsBetaMessage
|
from anthropic.types.beta.tools import ToolsBetaMessage
|
||||||
from httpx import Timeout
|
from httpx import Timeout
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
from core.model_runtime.callbacks.base_callback import Callback
|
from core.model_runtime.callbacks.base_callback import Callback
|
||||||
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta
|
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta
|
||||||
@ -462,7 +463,8 @@ class AnthropicLargeLanguageModel(LargeLanguageModel):
|
|||||||
# fetch image data from url
|
# fetch image data from url
|
||||||
try:
|
try:
|
||||||
image_content = requests.get(message_content.data).content
|
image_content = requests.get(message_content.data).content
|
||||||
mime_type, _ = mimetypes.guess_type(message_content.data)
|
with Image.open(io.BytesIO(image_content)) as img:
|
||||||
|
mime_type = f"image/{img.format.lower()}"
|
||||||
base64_data = base64.b64encode(image_content).decode('utf-8')
|
base64_data = base64.b64encode(image_content).decode('utf-8')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# standard import
|
# standard import
|
||||||
import base64
|
import base64
|
||||||
|
import io
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import mimetypes
|
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
from typing import Optional, Union, cast
|
from typing import Optional, Union, cast
|
||||||
|
|
||||||
@ -17,6 +17,7 @@ from botocore.exceptions import (
|
|||||||
ServiceNotInRegionError,
|
ServiceNotInRegionError,
|
||||||
UnknownServiceError,
|
UnknownServiceError,
|
||||||
)
|
)
|
||||||
|
from PIL.Image import Image
|
||||||
|
|
||||||
# local import
|
# local import
|
||||||
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta
|
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta
|
||||||
@ -381,9 +382,8 @@ class BedrockLargeLanguageModel(LargeLanguageModel):
|
|||||||
try:
|
try:
|
||||||
url = message_content.data
|
url = message_content.data
|
||||||
image_content = requests.get(url).content
|
image_content = requests.get(url).content
|
||||||
if '?' in url:
|
with Image.open(io.BytesIO(image_content)) as img:
|
||||||
url = url.split('?')[0]
|
mime_type = f"image/{img.format.lower()}"
|
||||||
mime_type, _ = mimetypes.guess_type(url)
|
|
||||||
base64_data = base64.b64encode(image_content).decode('utf-8')
|
base64_data = base64.b64encode(image_content).decode('utf-8')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import base64
|
import base64
|
||||||
|
import io
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import mimetypes
|
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
from typing import Optional, Union, cast
|
from typing import Optional, Union, cast
|
||||||
|
|
||||||
@ -12,6 +12,7 @@ import google.generativeai.client as client
|
|||||||
import requests
|
import requests
|
||||||
from google.generativeai.types import ContentType, GenerateContentResponse, HarmBlockThreshold, HarmCategory
|
from google.generativeai.types import ContentType, GenerateContentResponse, HarmBlockThreshold, HarmCategory
|
||||||
from google.generativeai.types.content_types import to_part
|
from google.generativeai.types.content_types import to_part
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta
|
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta
|
||||||
from core.model_runtime.entities.message_entities import (
|
from core.model_runtime.entities.message_entities import (
|
||||||
@ -371,7 +372,8 @@ class GoogleLargeLanguageModel(LargeLanguageModel):
|
|||||||
# fetch image data from url
|
# fetch image data from url
|
||||||
try:
|
try:
|
||||||
image_content = requests.get(message_content.data).content
|
image_content = requests.get(message_content.data).content
|
||||||
mime_type, _ = mimetypes.guess_type(message_content.data)
|
with Image.open(io.BytesIO(image_content)) as img:
|
||||||
|
mime_type = f"image/{img.format.lower()}"
|
||||||
base64_data = base64.b64encode(image_content).decode('utf-8')
|
base64_data = base64.b64encode(image_content).decode('utf-8')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import base64
|
import base64
|
||||||
|
import io
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
@ -18,6 +19,7 @@ from anthropic.types import (
|
|||||||
)
|
)
|
||||||
from google.cloud import aiplatform
|
from google.cloud import aiplatform
|
||||||
from google.oauth2 import service_account
|
from google.oauth2 import service_account
|
||||||
|
from PIL import Image
|
||||||
from vertexai.generative_models import HarmBlockThreshold, HarmCategory
|
from vertexai.generative_models import HarmBlockThreshold, HarmCategory
|
||||||
|
|
||||||
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta, LLMUsage
|
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta, LLMUsage
|
||||||
@ -332,7 +334,8 @@ class VertexAiLargeLanguageModel(LargeLanguageModel):
|
|||||||
# fetch image data from url
|
# fetch image data from url
|
||||||
try:
|
try:
|
||||||
image_content = requests.get(message_content.data).content
|
image_content = requests.get(message_content.data).content
|
||||||
mime_type, _ = mimetypes.guess_type(message_content.data)
|
with Image.open(io.BytesIO(image_content)) as img:
|
||||||
|
mime_type = f"image/{img.format.lower()}"
|
||||||
base64_data = base64.b64encode(image_content).decode('utf-8')
|
base64_data = base64.b64encode(image_content).decode('utf-8')
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
raise ValueError(f"Failed to fetch image data from url {message_content.data}, {ex}")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user