加了一堆模型和一堆功能

This commit is contained in:
2026-04-16 00:36:21 +08:00
parent 47c0863bab
commit 40de992516
34 changed files with 3111 additions and 718 deletions

View File

@@ -8,7 +8,12 @@ from sse_starlette.sse import EventSourceResponse
from app.agent.loop import run_agent_loop
from app.auth import get_current_user
from app.config import get_image_models_list, get_default_image_model_id
from app.config import (
get_image_models_list,
get_default_image_model_id,
get_llm_models_list,
get_default_llm_model_id,
)
from app.db import User
router = APIRouter()
@@ -49,13 +54,24 @@ async def list_models(current_user: User = Depends(get_current_user)):
}
@router.get("/llm-models")
async def list_llm_models(current_user: User = Depends(get_current_user)):
"""返回可用的 LLM 对话模型列表。"""
return {
"models": get_llm_models_list(),
"default": get_default_llm_model_id(),
}
@router.post("/chat")
async def chat(
messages: str = Form(...),
ref_image: Optional[UploadFile] = File(None),
ref_image_url: Optional[str] = Form(None),
ref_image_urls: Optional[str] = Form(None),
image_model: Optional[str] = Form(None),
session_id: Optional[str] = Form(None),
llm_model: Optional[str] = Form(None),
current_user: User = Depends(get_current_user),
):
"""
@@ -64,25 +80,30 @@ async def chat(
参数:
- messages: JSON 字符串,对话历史 [{role, content}]
- ref_image: 可选的参考图文件(兼容旧方式)
- ref_image_url: 可选,已通过 /upload-ref-image 上传后的服务端路径
- ref_image_url: 兼容旧方式,单张参考图服务端路径
- ref_image_urls: JSON 数组字符串,多张参考图服务端路径列表
- image_model: 可选,指定本次使用的生图模型短 ID
- session_id: 可选,前端会话 ID用于 Mem0 记忆作用域
- llm_model: 可选,指定本次使用的 LLM 模型短 ID
"""
parsed_messages = json.loads(messages)
resolved_ref_url: Optional[str] = None
if ref_image_url:
resolved_ref_url = ref_image_url
resolved_ref_urls: list[str] = []
if ref_image_urls:
resolved_ref_urls = json.loads(ref_image_urls)
elif ref_image_url:
resolved_ref_urls = [ref_image_url]
elif ref_image and ref_image.filename:
resolved_ref_url = await _save_upload(ref_image)
resolved_ref_urls = [await _save_upload(ref_image)]
async def event_generator():
async for event in run_agent_loop(
parsed_messages,
resolved_ref_url,
resolved_ref_urls or None,
image_model=image_model,
session_id=session_id,
user_id=current_user.id,
llm_model=llm_model,
):
yield {
"event": event["type"],