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)} 个片段",
    }