浏览代码

chore: improve gemini models (#11745)

tags/0.14.1
非法操作 10 个月前
父节点
当前提交
9048832a9a
没有帐户链接到提交者的电子邮件

+ 3
- 0
api/core/model_runtime/model_providers/google/llm/_position.yaml 查看文件

- gemini-2.0-flash-exp
- gemini-1.5-pro - gemini-1.5-pro
- gemini-1.5-pro-latest - gemini-1.5-pro-latest
- gemini-1.5-pro-001 - gemini-1.5-pro-001
- gemini-1.5-flash-exp-0827 - gemini-1.5-flash-exp-0827
- gemini-1.5-flash-8b-exp-0827 - gemini-1.5-flash-8b-exp-0827
- gemini-1.5-flash-8b-exp-0924 - gemini-1.5-flash-8b-exp-0924
- gemini-exp-1206
- gemini-exp-1121
- gemini-exp-1114 - gemini-exp-1114
- gemini-pro - gemini-pro
- gemini-pro-vision - gemini-pro-vision

+ 2
- 0
api/core/model_runtime/model_providers/google/llm/gemini-2.0-flash-exp.yaml 查看文件

- tool-call - tool-call
- stream-tool-call - stream-tool-call
- document - document
- video
- audio
model_properties: model_properties:
mode: chat mode: chat
context_size: 1048576 context_size: 1048576

+ 3
- 0
api/core/model_runtime/model_providers/google/llm/gemini-exp-1206.yaml 查看文件

- vision - vision
- tool-call - tool-call
- stream-tool-call - stream-tool-call
- document
- video
- audio
model_properties: model_properties:
mode: chat mode: chat
context_size: 2097152 context_size: 2097152

+ 3
- 0
api/core/model_runtime/model_providers/google/llm/learnlm-1.5-pro-experimental.yaml 查看文件

- vision - vision
- tool-call - tool-call
- stream-tool-call - stream-tool-call
- document
- video
- audio
model_properties: model_properties:
mode: chat mode: chat
context_size: 32767 context_size: 32767

+ 16
- 22
api/core/model_runtime/model_providers/google/llm/llm.py 查看文件

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 (
AssistantPromptMessage, AssistantPromptMessage,
ImagePromptMessageContent,
PromptMessage, PromptMessage,
PromptMessageContent, PromptMessageContent,
PromptMessageContentType, PromptMessageContentType,
SystemPromptMessage, SystemPromptMessage,
ToolPromptMessage, ToolPromptMessage,
UserPromptMessage, UserPromptMessage,
VideoPromptMessageContent,
) )
from core.model_runtime.errors.invoke import ( from core.model_runtime.errors.invoke import (
InvokeAuthorizationError, InvokeAuthorizationError,
except: except:
pass pass
with tempfile.NamedTemporaryFile(delete=False) as temp_file: 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) temp_file.write(file_content)
else: else:
# only ImagePromptMessageContent and VideoPromptMessageContent has url
try: try:
response = requests.get(message_content.data)
response = requests.get(message_content.url)
response.raise_for_status() 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) temp_file.write(response.content)
except Exception as ex: 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() 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: 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) 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: def _format_message_to_glm_content(self, message: PromptMessage) -> ContentType:
""" """

正在加载...
取消
保存