Skip to content

Commit be2fa89

Browse files
author
mengqian
committed
Add new file parsing service SDK and test cases
1 parent fa496db commit be2fa89

File tree

8 files changed

+189
-1
lines changed

8 files changed

+189
-1
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from __future__ import annotations
2+
3+
import logging
4+
import logging.config
5+
import os
6+
7+
import pytest
8+
9+
import zhipuai
10+
from zhipuai import ZhipuAI
11+
12+
13+
def test_file_parser_create(logging_conf):
14+
logging.config.dictConfig(logging_conf) # type: ignore
15+
client = ZhipuAI() # 填写您自己的APIKey
16+
try:
17+
response = client.file_parser.create(file=open('hitsuyoushorui-cn.pdf', 'rb'), file_type='pdf', tool_type='zhipu_pro')
18+
print(response)
19+
20+
except zhipuai.core._errors.APIRequestFailedError as err:
21+
print(err)
22+
except zhipuai.core._errors.APIInternalError as err:
23+
print(err)
24+
except zhipuai.core._errors.APIStatusError as err:
25+
print(err)
26+
27+
def test_file_parser_content(logging_conf):
28+
logging.config.dictConfig(logging_conf) # type: ignore
29+
client = ZhipuAI() # 填写您自己的APIKey
30+
try:
31+
response = client.file_parser.content(task_id="66e8f7ab884448c8b4190f251f6c2982-1", format_type="text")
32+
print(response.content.decode('utf-8'))
33+
34+
except zhipuai.core._errors.APIRequestFailedError as err:
35+
print(err)
36+
except zhipuai.core._errors.APIInternalError as err:
37+
print(err)
38+
except zhipuai.core._errors.APIStatusError as err:
39+
print(err)
40+

zhipuai/_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def __init__(
6969
self.audio = api_resource.audio.Audio(self)
7070
self.moderations = api_resource.moderation.Moderations(self)
7171
self.agents = api_resource.agents.Agents(self)
72+
self.file_parser = api_resource.file_parser.FileParser(self)
7273

7374
@property
7475
@override

zhipuai/api_resource/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@
5353
Audio
5454
)
5555

56+
from .file_parser import (
57+
FileParser
58+
)
59+
5660
__all__ = [
5761
'Videos',
5862
'AsyncCompletions',
@@ -68,5 +72,6 @@
6872
'Tools',
6973
'Assistant',
7074
'Audio',
71-
'Moderation'
75+
'Moderation',
76+
'FileParser'
7277
]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .file_parser import FileParser
2+
3+
__all__ = ['FileParser']
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
from __future__ import annotations
2+
3+
4+
from typing import TYPE_CHECKING, List, Mapping, cast
5+
from typing_extensions import Literal
6+
7+
from ...core import BaseAPI, maybe_transform
8+
from ...core import NOT_GIVEN, Body, Headers, NotGiven, FileTypes
9+
10+
import httpx
11+
12+
from ...core import (
13+
make_request_options,
14+
)
15+
from ...core import deepcopy_minimal, extract_files
16+
from ...types.file_parser.file_parser_create_params import FileParserCreateParams
17+
from ...types.file_parser.file_parser_resp import FileParserTaskCreateResp
18+
from ...core import _legacy_binary_response
19+
from ...core import _legacy_response
20+
21+
if TYPE_CHECKING:
22+
from ..._client import ZhipuAI
23+
24+
__all__ = ["FileParser"]
25+
26+
27+
class FileParser(BaseAPI):
28+
29+
def __init__(self, client: "ZhipuAI") -> None:
30+
super().__init__(client)
31+
32+
def create(
33+
self,
34+
*,
35+
file: FileTypes = None,
36+
file_type: str = None,
37+
tool_type: Literal["simple", "doc2x", "tencent", "zhipu-pro"],
38+
extra_headers: Headers | None = None,
39+
extra_body: Body | None = None,
40+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
41+
) -> FileParserTaskCreateResp:
42+
43+
if not file:
44+
raise ValueError("At least one `file` must be provided.")
45+
body = deepcopy_minimal(
46+
{
47+
"file": file,
48+
"file_type": file_type,
49+
"tool_type": tool_type,
50+
}
51+
)
52+
53+
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
54+
if files:
55+
# It should be noted that the actual Content-Type header that will be
56+
# sent to the server will contain a `boundary` parameter, e.g.
57+
# multipart/form-data; boundary=---abc--
58+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
59+
return self._post(
60+
"/fileParse/create",
61+
body=maybe_transform(body, FileParserCreateParams),
62+
files=files,
63+
options=make_request_options(
64+
extra_headers=extra_headers, extra_body=extra_body, timeout=timeout
65+
),
66+
cast_type=FileParserTaskCreateResp,
67+
)
68+
69+
def content(
70+
self,
71+
task_id: str,
72+
*,
73+
format_type: Literal["text", "download_link"],
74+
extra_headers: Headers | None = None,
75+
extra_body: Body | None = None,
76+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
77+
) -> _legacy_response.HttpxBinaryResponseContent:
78+
"""
79+
Returns the contents of the specified file.
80+
81+
Args:
82+
extra_headers: Send extra headers
83+
84+
extra_body: Add additional JSON properties to the request
85+
86+
timeout: Override the client-level default timeout for this request, in seconds
87+
"""
88+
if not task_id:
89+
raise ValueError(f"Expected a non-empty value for `task_id` but received {task_id!r}")
90+
extra_headers = {"Accept": "application/binary", **(extra_headers or {})}
91+
return self._get(
92+
f"/fileParse/getResult/{task_id}/{format_type}",
93+
options=make_request_options(
94+
extra_headers=extra_headers, extra_body=extra_body, timeout=timeout
95+
),
96+
cast_type=_legacy_binary_response.HttpxBinaryResponseContent,
97+
)

zhipuai/types/file_parser/__init__.py

Whitespace-only changes.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from __future__ import annotations
2+
3+
from typing_extensions import Literal, Required, TypedDict
4+
from ...core import NOT_GIVEN, Body, Headers, NotGiven, FileTypes
5+
6+
7+
__all__ = ["FileParserCreateParams", "FileParserDownloadParams"]
8+
9+
10+
class FileParserCreateParams(TypedDict):
11+
file: FileTypes
12+
"""上传的文件"""
13+
file_type: str
14+
"""文件类型"""
15+
tool_type: Literal["simple", "doc2x", "tencent", "zhipu-pro"]
16+
"""工具类型"""
17+
18+
19+
class FileParserDownloadParams(TypedDict):
20+
task_id: str
21+
"""解析任务id"""
22+
format_type: Literal["text", "download_link"]
23+
"""结果返回类型"""
24+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from typing import List, Optional
2+
3+
from zhipuai.core import BaseModel
4+
5+
__all__ = [
6+
"FileParserTaskCreateResp"
7+
]
8+
9+
10+
class FileParserTaskCreateResp(BaseModel):
11+
task_id: str
12+
# 任务id
13+
message: str
14+
# message
15+
success: bool
16+
# 是否成功
17+
18+

0 commit comments

Comments
 (0)