加了一堆模型和一堆功能
This commit is contained in:
@@ -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"],
|
||||
|
||||
37
art-agent/backend/app/api/memory.py
Normal file
37
art-agent/backend/app/api/memory.py
Normal file
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
记忆查询 API:供前端查看当前用户的 Mem0 记忆条目。
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from app.auth import get_current_user
|
||||
from app.db import User
|
||||
from app.memory import get_memory
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
router = APIRouter(prefix="/memory", tags=["memory"])
|
||||
|
||||
|
||||
@router.get("/list")
|
||||
async def list_memories(current_user: User = Depends(get_current_user)):
|
||||
"""返回当前用户的所有记忆条目(只读)。"""
|
||||
memory = get_memory()
|
||||
loop = asyncio.get_running_loop()
|
||||
try:
|
||||
result = await loop.run_in_executor(
|
||||
None, lambda: memory.get_all(user_id=current_user.id, limit=200)
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error("获取记忆列表失败: %s", e)
|
||||
return {"memories": [], "error": str(e)}
|
||||
|
||||
results = result.get("results", []) if isinstance(result, dict) else result
|
||||
logger.info("Mem0 get_all 返回 %d 条记忆, result_type=%s", len(results), type(result).__name__)
|
||||
if results:
|
||||
sample = results[0]
|
||||
logger.info("记忆样本 keys=%s, memory=%s", list(sample.keys()) if isinstance(sample, dict) else "not-dict", str(sample)[:200])
|
||||
return {"memories": results}
|
||||
Reference in New Issue
Block a user