mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-08 17:08:35 +08:00
feat: support llm temperature override
This commit is contained in:
+26
-16
@@ -952,6 +952,7 @@ class LLMHelper:
|
|||||||
base_url: str | None = None,
|
base_url: str | None = None,
|
||||||
base_url_preset: str | None = None,
|
base_url_preset: str | None = None,
|
||||||
user_agent: str | None = None,
|
user_agent: str | None = None,
|
||||||
|
temperature: Optional[float] = None,
|
||||||
use_proxy: bool | None = None,
|
use_proxy: bool | None = None,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
@@ -967,6 +968,7 @@ class LLMHelper:
|
|||||||
:param base_url: API Base URL。未显式传入时使用当前配置项 LLM_BASE_URL。
|
:param base_url: API Base URL。未显式传入时使用当前配置项 LLM_BASE_URL。
|
||||||
:param base_url_preset: Base URL 预设。未显式传入时使用当前配置项 LLM_BASE_URL_PRESET。
|
:param base_url_preset: Base URL 预设。未显式传入时使用当前配置项 LLM_BASE_URL_PRESET。
|
||||||
:param user_agent: OpenAI兼容接口请求 User-Agent。未显式传入时使用配置项 LLM_USER_AGENT。
|
:param user_agent: OpenAI兼容接口请求 User-Agent。未显式传入时使用配置项 LLM_USER_AGENT。
|
||||||
|
:param temperature: LLM 温度参数。未显式传入时使用配置项 LLM_TEMPERATURE。
|
||||||
:param use_proxy: 是否为本次 LLM 调用使用系统代理。未显式传入时使用配置项 LLM_USE_PROXY。
|
:param use_proxy: 是否为本次 LLM 调用使用系统代理。未显式传入时使用配置项 LLM_USE_PROXY。
|
||||||
:return: LLM实例
|
:return: LLM实例
|
||||||
"""
|
"""
|
||||||
@@ -978,6 +980,7 @@ class LLMHelper:
|
|||||||
base_url_preset if base_url_preset is not None else settings.LLM_BASE_URL_PRESET
|
base_url_preset if base_url_preset is not None else settings.LLM_BASE_URL_PRESET
|
||||||
)
|
)
|
||||||
user_agent_value = user_agent if user_agent is not None else settings.LLM_USER_AGENT
|
user_agent_value = user_agent if user_agent is not None else settings.LLM_USER_AGENT
|
||||||
|
temperature_value = temperature if temperature is not None else settings.LLM_TEMPERATURE
|
||||||
normalized_thinking_level = cls._resolve_thinking_level(
|
normalized_thinking_level = cls._resolve_thinking_level(
|
||||||
thinking_level=thinking_level,
|
thinking_level=thinking_level,
|
||||||
)
|
)
|
||||||
@@ -1034,7 +1037,7 @@ class LLMHelper:
|
|||||||
model=model_name,
|
model=model_name,
|
||||||
api_key=runtime["api_key"],
|
api_key=runtime["api_key"],
|
||||||
retries=3,
|
retries=3,
|
||||||
temperature=settings.LLM_TEMPERATURE,
|
temperature=temperature_value,
|
||||||
streaming=streaming,
|
streaming=streaming,
|
||||||
client_args=_build_google_client_args(llm_proxy),
|
client_args=_build_google_client_args(llm_proxy),
|
||||||
**thinking_kwargs,
|
**thinking_kwargs,
|
||||||
@@ -1048,7 +1051,7 @@ class LLMHelper:
|
|||||||
api_key=runtime["api_key"],
|
api_key=runtime["api_key"],
|
||||||
api_base=runtime["base_url"],
|
api_base=runtime["base_url"],
|
||||||
max_retries=3,
|
max_retries=3,
|
||||||
temperature=settings.LLM_TEMPERATURE,
|
temperature=temperature_value,
|
||||||
streaming=streaming,
|
streaming=streaming,
|
||||||
stream_usage=True,
|
stream_usage=True,
|
||||||
http_client=_build_httpx_client(llm_proxy),
|
http_client=_build_httpx_client(llm_proxy),
|
||||||
@@ -1063,7 +1066,7 @@ class LLMHelper:
|
|||||||
api_key=runtime["api_key"],
|
api_key=runtime["api_key"],
|
||||||
base_url=runtime["base_url"],
|
base_url=runtime["base_url"],
|
||||||
max_retries=3,
|
max_retries=3,
|
||||||
temperature=settings.LLM_TEMPERATURE,
|
temperature=temperature_value,
|
||||||
streaming=streaming,
|
streaming=streaming,
|
||||||
stream_usage=True,
|
stream_usage=True,
|
||||||
anthropic_proxy=llm_proxy,
|
anthropic_proxy=llm_proxy,
|
||||||
@@ -1084,7 +1087,7 @@ class LLMHelper:
|
|||||||
api_key=runtime["api_key"],
|
api_key=runtime["api_key"],
|
||||||
max_retries=3,
|
max_retries=3,
|
||||||
base_url=runtime.get("base_url"),
|
base_url=runtime.get("base_url"),
|
||||||
temperature=settings.LLM_TEMPERATURE,
|
temperature=temperature_value,
|
||||||
streaming=streaming,
|
streaming=streaming,
|
||||||
stream_usage=True,
|
stream_usage=True,
|
||||||
openai_proxy=llm_proxy,
|
openai_proxy=llm_proxy,
|
||||||
@@ -1178,25 +1181,32 @@ class LLMHelper:
|
|||||||
base_url: str | None = None,
|
base_url: str | None = None,
|
||||||
base_url_preset: str | None = None,
|
base_url_preset: str | None = None,
|
||||||
user_agent: str | None = None,
|
user_agent: str | None = None,
|
||||||
|
temperature: Optional[float] = None,
|
||||||
use_proxy: bool | None = None,
|
use_proxy: bool | None = None,
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""
|
"""
|
||||||
使用当前已保存配置执行一次最小 LLM 调用。
|
使用当前配置或显式传入的临时配置执行一次最小 LLM 调用。
|
||||||
|
|
||||||
|
:param temperature: LLM 温度参数。未显式传入时沿用已保存配置。
|
||||||
"""
|
"""
|
||||||
provider_name = provider if provider is not None else settings.LLM_PROVIDER
|
provider_name = provider if provider is not None else settings.LLM_PROVIDER
|
||||||
model_name = model if model is not None else settings.LLM_MODEL
|
model_name = model if model is not None else settings.LLM_MODEL
|
||||||
start = time.perf_counter()
|
start = time.perf_counter()
|
||||||
llm = await LLMHelper.get_llm(
|
llm_kwargs = {
|
||||||
streaming=False,
|
"streaming": False,
|
||||||
provider=provider_name,
|
"provider": provider_name,
|
||||||
model=model_name,
|
"model": model_name,
|
||||||
thinking_level=thinking_level,
|
"thinking_level": thinking_level,
|
||||||
api_key=api_key,
|
"api_key": api_key,
|
||||||
base_url=base_url,
|
"base_url": base_url,
|
||||||
base_url_preset=base_url_preset,
|
"base_url_preset": base_url_preset,
|
||||||
user_agent=user_agent,
|
"user_agent": user_agent,
|
||||||
use_proxy=use_proxy,
|
"use_proxy": use_proxy,
|
||||||
)
|
}
|
||||||
|
if temperature is not None:
|
||||||
|
llm_kwargs["temperature"] = temperature
|
||||||
|
|
||||||
|
llm = await LLMHelper.get_llm(**llm_kwargs)
|
||||||
try:
|
try:
|
||||||
response = await asyncio.wait_for(llm.ainvoke(prompt), timeout=timeout)
|
response = await asyncio.wait_for(llm.ainvoke(prompt), timeout=timeout)
|
||||||
except TimeoutError as err:
|
except TimeoutError as err:
|
||||||
|
|||||||
+15
-10
@@ -36,6 +36,7 @@ class LlmTestRequest(BaseModel):
|
|||||||
base_url: Optional[str] = None
|
base_url: Optional[str] = None
|
||||||
base_url_preset: Optional[str] = None
|
base_url_preset: Optional[str] = None
|
||||||
user_agent: Optional[str] = None
|
user_agent: Optional[str] = None
|
||||||
|
temperature: Optional[float] = None
|
||||||
use_proxy: Optional[bool] = None
|
use_proxy: Optional[bool] = None
|
||||||
|
|
||||||
|
|
||||||
@@ -292,16 +293,20 @@ async def llm_test(
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = await LLMHelper.test_current_settings(
|
test_kwargs = {
|
||||||
provider=payload.provider,
|
"provider": payload.provider,
|
||||||
model=payload.model,
|
"model": payload.model,
|
||||||
thinking_level=payload.thinking_level,
|
"thinking_level": payload.thinking_level,
|
||||||
api_key=payload.api_key,
|
"api_key": payload.api_key,
|
||||||
base_url=payload.base_url,
|
"base_url": payload.base_url,
|
||||||
base_url_preset=payload.base_url_preset,
|
"base_url_preset": payload.base_url_preset,
|
||||||
user_agent=payload.user_agent,
|
"user_agent": payload.user_agent,
|
||||||
use_proxy=payload.use_proxy,
|
"use_proxy": payload.use_proxy,
|
||||||
)
|
}
|
||||||
|
if payload.temperature is not None:
|
||||||
|
test_kwargs["temperature"] = payload.temperature
|
||||||
|
|
||||||
|
result = await LLMHelper.test_current_settings(**test_kwargs)
|
||||||
if not result.get("reply_preview"):
|
if not result.get("reply_preview"):
|
||||||
return schemas.Response(
|
return schemas.Response(
|
||||||
success=False,
|
success=False,
|
||||||
|
|||||||
Reference in New Issue
Block a user