feat: support file parsing sync (#46)

Co-authored-by: mengqian <cherish_a_meng@163.com>
This commit is contained in:
code-c-light 2025-10-30 16:38:53 +08:00 committed by GitHub
parent e32a2498f9
commit 25f84e8b86
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 87 additions and 7 deletions

View file

@ -1,5 +1,6 @@
from zai import ZaiClient from zai import ZaiClient
import time import time
import json
import traceback import traceback
client = ZaiClient( client = ZaiClient(
@ -76,6 +77,28 @@ def file_parser_complete_example():
print("File parser demo completed.") print("File parser demo completed.")
def file_parser_sync_example():
"""
Full Example: Submit file for parsing and wait for the result to be returned.
"""
# Create parsing task
# Please modify the local file path
file_path = 'your file path'
with open(file_path, 'rb') as f:
print("Submitting file parsing task ...")
response = client.file_parser.create_sync(
file=f,
file_type="pdf",
tool_type="prime-sync",
)
print("Task created successfully. Response:")
print(response)
print("File parser demo completed.")
if __name__ == "__main__": if __name__ == "__main__":
print("=== File Parsing Quick Demo ===\n") print("=== File Parsing Quick Demo ===\n")
file_parser_complete_example() file_parser_complete_example()
print("=== File synchronized parsing quick demo (Prime only) ===\n")
file_parser_sync_example()

View file

@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "zai-sdk" name = "zai-sdk"
version = "0.0.4.1" version = "0.0.4.2"
description = "A SDK library for accessing big model apis from Z.ai" description = "A SDK library for accessing big model apis from Z.ai"
authors = ["Z.ai"] authors = ["Z.ai"]
readme = "README.md" readme = "README.md"

View file

@ -1,2 +1,2 @@
__title__ = 'Z.ai' __title__ = 'Z.ai'
__version__ = '0.0.4.1' __version__ = '0.0.4.2'

View file

@ -22,8 +22,8 @@ from zai.core import (
make_request_options make_request_options
) )
from zai.types.file_parser.file_parser_create_params import FileParserCreateParams from zai.types.file_parser.file_parser_create_params import FileParserCreateParams,FileParserSyncParams
from zai.types.file_parser.file_parser_resp import FileParserTaskCreateResp from zai.types.file_parser.file_parser_resp import FileParserTaskCreateResp,FileParsingDownloadResp
if TYPE_CHECKING: if TYPE_CHECKING:
from zai._client import ZaiClient from zai._client import ZaiClient
@ -103,3 +103,41 @@ class FileParser(BaseAPI):
cast_type=_legacy_binary_response.HttpxBinaryResponseContent, cast_type=_legacy_binary_response.HttpxBinaryResponseContent,
) )
return httpxBinaryResponseContent.response return httpxBinaryResponseContent.response
def create_sync(
self,
*,
file: FileTypes = None,
file_type: str = None,
tool_type: Literal["prime-sync"],
extra_headers: Headers | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> FileParsingDownloadResp:
if not file:
raise ValueError("At least one `file` must be provided.")
body = deepcopy_minimal(
{
"file": file,
"file_type": file_type,
"tool_type": tool_type,
}
)
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
if files:
# It should be noted that the actual Content-Type header that will be
# sent to the server will contain a `boundary` parameter, e.g.
# multipart/form-data; boundary=---abc--
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
return self._post(
"/files/parser/sync",
body=maybe_transform(body, FileParserSyncParams),
files=files,
options=make_request_options(
extra_headers=extra_headers, extra_body=extra_body, timeout=timeout
),
cast_type=FileParsingDownloadResp,
)

View file

@ -20,3 +20,11 @@ class FileParserDownloadParams(TypedDict):
"""Parsing task id""" """Parsing task id"""
format_type: Literal["text", "download_link"] format_type: Literal["text", "download_link"]
"""Result return type""" """Result return type"""
class FileParserSyncParams(TypedDict):
file: FileTypes
"""Uploaded file"""
file_type: str
"""File type"""
tool_type: Literal["prime-sync"]
"""Tool type"""

View file

@ -2,9 +2,7 @@ from typing import List, Optional
from zai.core import BaseModel from zai.core import BaseModel
__all__ = [ __all__ = ["FileParserTaskCreateResp", "FileParsingDownloadResp"]
"FileParserTaskCreateResp"
]
class FileParserTaskCreateResp(BaseModel): class FileParserTaskCreateResp(BaseModel):
@ -14,3 +12,16 @@ class FileParserTaskCreateResp(BaseModel):
# Message # Message
success: bool success: bool
# Whether successful # Whether successful
class FileParsingDownloadResp(BaseModel):
task_id: str
# Task ID
message: str
# Message
status: bool
# Whether successful
content: str
# Parsed result text content
parsing_result_url: str
# Parsed result download link