feat:LLM 分析文件并生成结构化建议

This commit is contained in:
2026-10-10 04:56:28 -07:00
parent 7caf0d31da
commit b90842237f
11 changed files with 746 additions and 7 deletions
+14 -1
View File
@@ -11,7 +11,7 @@ from typing import Any, Protocol
from bson.codec_options import CodecOptions
from pymongo import ASCENDING
from app.schemas.data_file import DataFileRecord
from app.schemas.data_file import DataFileRecord, FileInsights
# 原文件不带扩展名:calamine 见到 .xls 等扩展名会按扩展名打开,用户的扩展名和内容不符时会失败
SOURCE_NAME = "source"
@@ -42,6 +42,10 @@ class DataFileStore(Protocol):
async def mark_deleted(self, file_id: str) -> None: ...
async def update_insights(self, file_id: str, insights: FileInsights) -> None:
"""记录已过期或不存在时什么都不做"""
...
async def live_ids(self) -> set[str]:
"""未过期且未删除的 file_id,清理目录时用"""
...
@@ -83,6 +87,10 @@ class InMemoryDataFileStore:
if (record := self._records.get(file_id)) is not None:
self._records[file_id] = record.model_copy(update={"deleted": True})
async def update_insights(self, file_id: str, insights: FileInsights) -> None:
if (record := self._records.get(file_id)) is not None:
self._records[file_id] = record.model_copy(update={"insights": insights})
async def live_ids(self) -> set[str]:
self._purge_expired()
return {key for key, record in self._records.items() if not record.deleted}
@@ -129,6 +137,11 @@ class MongoDataFileStore:
async def mark_deleted(self, file_id: str) -> None:
await self._files.update_one({"_id": file_id}, {"$set": {"deleted": True}})
async def update_insights(self, file_id: str, insights: FileInsights) -> None:
await self._files.update_one(
{"_id": file_id}, {"$set": {"insights": insights.model_dump()}}
)
async def live_ids(self) -> set[str]:
return set(
await self._files.distinct(