File size: 2,291 Bytes
bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 d0c18f0 bdcdaf4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | """
文档合并拆分核心逻辑 - 供 mcp.py 和 api.py 共用
"""
from typing import List, Optional
from app.utils.url_input_handler import resolve_text_content, encode_text_to_base64
async def do_merge(
files_base64: Optional[List[str]],
files_url: Optional[List[str]],
output_format: str = "text",
) -> dict:
"""合并多个文档。"""
contents = []
# 处理 base64 输入
if files_base64:
for f_b64 in files_base64:
try:
content, source = await resolve_text_content(f_b64, None)
contents.append(content)
except ValueError as e:
return {"success": False, "message": f"解码失败: {e}"}
# 处理 URL 输入
if files_url:
for url in files_url:
try:
content, source = await resolve_text_content(None, url)
contents.append(content)
except ValueError as e:
return {"success": False, "message": f"URL下载失败 ({url}): {e}"}
if not contents:
return {"success": False, "message": "没有提供任何文件"}
separator = "\n\n---\n\n" if output_format == "markdown" else "\n\n"
merged = separator.join(contents)
output_base64 = encode_text_to_base64(merged)
return {
"success": True,
"output_base64": output_base64,
"message": f"已合并 {len(contents)} 个文档",
}
async def do_split(
content_base64: Optional[str],
content_url: Optional[str],
split_by: str = "line",
chunk_size: int = 100,
) -> dict:
"""拆分文档。"""
try:
content, source = await resolve_text_content(content_base64, content_url)
except ValueError as e:
return {"success": False, "message": f"内容获取失败: {e}"}
chunks = []
if split_by == "line":
chunks = content.split("\n")
elif split_by == "paragraph":
chunks = content.split("\n\n")
elif split_by == "chunk":
chunks = [content[i : i + chunk_size] for i in range(0, len(content), chunk_size)]
chunks_base64 = [encode_text_to_base64(c) for c in chunks]
return {
"success": True,
"chunks_base64": chunks_base64,
"message": f"已拆分为 {len(chunks)} 个片段",
} |