feat:LLM 分析文件并生成结构化建议
This commit is contained in:
@@ -19,7 +19,8 @@ from python_calamine import (
|
||||
SheetVisibleEnum,
|
||||
)
|
||||
|
||||
from app.datafiles.base import MAX_TABLE_ROWS, DataFileError, rows_exceeded
|
||||
from app.datafiles.base import MAX_TABLE_ROWS, DataFileError, brief, rows_exceeded
|
||||
from app.datafiles.columns import as_text
|
||||
from app.schemas.data_file import ParseWarning
|
||||
|
||||
# 原始网格比数据多出的标题、表头、空行,读取时先粗略拦住明显超限的文件,精确的行数在拆表后检查
|
||||
@@ -153,7 +154,7 @@ def read_jsonl(text: str) -> Records:
|
||||
result.warnings.append(
|
||||
ParseWarning(
|
||||
code="bad_lines_skipped",
|
||||
message=f"跳过了 {len(bad)} 行无法解析的内容:{_line_list(bad)}",
|
||||
message=f"跳过了 {len(bad)} 行无法解析的内容:{brief([f'第 {n} 行' for n in bad])}",
|
||||
)
|
||||
)
|
||||
return result
|
||||
@@ -230,11 +231,5 @@ def _flatten(record: dict, prefix: str, level: int, out: dict[str, Any]) -> None
|
||||
|
||||
|
||||
def _scalar(value: Any) -> Any:
|
||||
if isinstance(value, (dict, list)):
|
||||
return json.dumps(value, ensure_ascii=False)
|
||||
return value
|
||||
|
||||
|
||||
def _line_list(numbers: list[int]) -> str:
|
||||
shown = "、".join(f"第 {number} 行" for number in numbers[:5])
|
||||
return shown + ("等" if len(numbers) > 5 else "")
|
||||
# 嵌套的对象、数组存成 JSON 字符串,其余原样交给类型推断
|
||||
return as_text(value) if isinstance(value, (dict, list)) else value
|
||||
|
||||
Reference in New Issue
Block a user