|
|
|
@@ -16,7 +16,6 @@ from google.generativeai.types.content_types import to_part |
|
|
|
from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, LLMResultChunkDelta |
|
|
|
from core.model_runtime.entities.message_entities import ( |
|
|
|
AssistantPromptMessage, |
|
|
|
ImagePromptMessageContent, |
|
|
|
PromptMessage, |
|
|
|
PromptMessageContent, |
|
|
|
PromptMessageContentType, |
|
|
|
@@ -24,7 +23,6 @@ from core.model_runtime.entities.message_entities import ( |
|
|
|
SystemPromptMessage, |
|
|
|
ToolPromptMessage, |
|
|
|
UserPromptMessage, |
|
|
|
VideoPromptMessageContent, |
|
|
|
) |
|
|
|
from core.model_runtime.errors.invoke import ( |
|
|
|
InvokeAuthorizationError, |
|
|
|
@@ -346,35 +344,31 @@ class GoogleLargeLanguageModel(LargeLanguageModel): |
|
|
|
except: |
|
|
|
pass |
|
|
|
with tempfile.NamedTemporaryFile(delete=False) as temp_file: |
|
|
|
if message_content.data.startswith("data:"): |
|
|
|
metadata, base64_data = message_content.data.split(",", 1) |
|
|
|
file_content = base64.b64decode(base64_data) |
|
|
|
mime_type = metadata.split(";", 1)[0].split(":")[1] |
|
|
|
if message_content.base64_data: |
|
|
|
file_content = base64.b64decode(message_content.base64_data) |
|
|
|
temp_file.write(file_content) |
|
|
|
else: |
|
|
|
# only ImagePromptMessageContent and VideoPromptMessageContent has url |
|
|
|
try: |
|
|
|
response = requests.get(message_content.data) |
|
|
|
response = requests.get(message_content.url) |
|
|
|
response.raise_for_status() |
|
|
|
if message_content.type is ImagePromptMessageContent: |
|
|
|
prefix = "image/" |
|
|
|
elif message_content.type is VideoPromptMessageContent: |
|
|
|
prefix = "video/" |
|
|
|
mime_type = prefix + message_content.format |
|
|
|
temp_file.write(response.content) |
|
|
|
except Exception as ex: |
|
|
|
raise ValueError(f"Failed to fetch data from url {message_content.data}, {ex}") |
|
|
|
raise ValueError(f"Failed to fetch data from url {message_content.url}, {ex}") |
|
|
|
temp_file.flush() |
|
|
|
|
|
|
|
file = genai.upload_file(path=temp_file.name, mime_type=message_content.mime_type) |
|
|
|
while file.state.name == "PROCESSING": |
|
|
|
time.sleep(5) |
|
|
|
file = genai.get_file(file.name) |
|
|
|
# google will delete your upload files in 2 days. |
|
|
|
redis_client.setex(key, 47 * 60 * 60, file.name) |
|
|
|
|
|
|
|
try: |
|
|
|
file = genai.upload_file(path=temp_file.name, mime_type=mime_type) |
|
|
|
while file.state.name == "PROCESSING": |
|
|
|
time.sleep(5) |
|
|
|
file = genai.get_file(file.name) |
|
|
|
# google will delete your upload files in 2 days. |
|
|
|
redis_client.setex(key, 47 * 60 * 60, file.name) |
|
|
|
return file |
|
|
|
finally: |
|
|
|
os.unlink(temp_file.name) |
|
|
|
except PermissionError: |
|
|
|
# windows may raise permission error |
|
|
|
pass |
|
|
|
return file |
|
|
|
|
|
|
|
def _format_message_to_glm_content(self, message: PromptMessage) -> ContentType: |
|
|
|
""" |