feat: Gemini

This commit is contained in:
fit2cloud-chenyw
2025-08-05 14:48:57 +08:00
parent 5654c732ce
commit 7df8d49d48
5 changed files with 64 additions and 9 deletions
+9 -3
View File
@@ -10,6 +10,7 @@ from sqlmodel import Session, select
from apps.ai_model.openai.llm import BaseChatOpenAI
from apps.system.models.system_model import AiModelDetail
from common.core.db import engine
from common.utils.utils import prepare_model_arg
# from langchain_community.llms import Tongyi, VLLM
@@ -26,13 +27,19 @@ class LLMConfig(BaseModel):
frozen = True
def __hash__(self):
if hasattr(self, 'additional_params') and isinstance(self.additional_params, dict):
hashable_params = frozenset((k, tuple(v) if isinstance(v, (list, dict)) else v)
for k, v in self.additional_params.items())
else:
hashable_params = None
return hash((
self.model_id,
self.model_type,
self.model_name,
self.api_key,
self.api_base_url,
frozenset(self.additional_params.items())
hashable_params
))
@@ -62,7 +69,6 @@ class OpenAILLM(BaseLLM):
base_url=self.config.api_base_url,
stream_usage=True,
**self.config.additional_params,
extra_body={"enable_thinking": True},
)
def generate(self, prompt: str) -> str:
@@ -116,7 +122,7 @@ def get_default_config() -> LLMConfig:
if db_model.config:
try:
config_raw = json.loads(db_model.config)
additional_params = {item["key"]: item["val"] for item in config_raw if "key" in item and "val" in item}
additional_params = {item["key"]: prepare_model_arg(item.get('val')) for item in config_raw if "key" in item and "val" in item}
except Exception:
pass
+2 -2
View File
@@ -10,7 +10,7 @@ from sqlmodel import func, select, update
from apps.system.models.system_model import AiModelDetail
from common.core.deps import SessionDep, Trans
from common.utils.time import get_timestamp
from common.utils.utils import SQLBotLogUtil
from common.utils.utils import SQLBotLogUtil, prepare_model_arg
router = APIRouter(tags=["system/aimodel"], prefix="/system/aimodel")
@@ -18,7 +18,7 @@ router = APIRouter(tags=["system/aimodel"], prefix="/system/aimodel")
async def check_llm(info: AiModelCreator, trans: Trans):
async def generate():
try:
additional_params = {item.key: item.val for item in info.config_list}
additional_params = {item.key: prepare_model_arg(item.val) for item in info.config_list if item.key and item.val}
config = LLMConfig(
model_type="openai",
model_name=info.base_model,
+10 -2
View File
@@ -1,6 +1,7 @@
import base64
import hashlib
import inspect
import json
import logging
from datetime import datetime, timedelta, timezone
from logging.handlers import RotatingFileHandler
@@ -230,6 +231,13 @@ def prepare_for_orjson(data):
return data
def prepare_model_arg(origin_arg: str):
if not isinstance(origin_arg, str):
return origin_arg
if not origin_arg.strip()[0] in {'{', '['}:
return origin_arg
try:
return json.loads(origin_arg)
except:
return origin_arg