55from typing import Any , Dict , Optional
66
77from knowhere .resources ._base import AsyncAPIResource , SyncAPIResource
8- from knowhere .types .document import Document , DocumentListResponse
8+ from knowhere .types .document import (
9+ Document ,
10+ DocumentChunkListResponse ,
11+ DocumentChunkResponse ,
12+ DocumentChunkType ,
13+ DocumentListResponse ,
14+ )
915
1016
1117class Documents (SyncAPIResource ):
@@ -32,6 +38,49 @@ def get(self, document_id: str) -> Document:
3238 cast_to = Document ,
3339 )
3440
41+ def list_chunks (
42+ self ,
43+ document_id : str ,
44+ * ,
45+ page : int = 1 ,
46+ page_size : int = 50 ,
47+ chunk_type : Optional [DocumentChunkType ] = None ,
48+ include_asset_urls : bool = False ,
49+ ) -> DocumentChunkListResponse :
50+ """List current-revision chunks for one canonical document."""
51+ params : Dict [str , Any ] = _build_chunk_list_params (
52+ page = page ,
53+ page_size = page_size ,
54+ chunk_type = chunk_type ,
55+ include_asset_urls = include_asset_urls ,
56+ )
57+
58+ return self ._request (
59+ "GET" ,
60+ f"v1/documents/{ document_id } /chunks" ,
61+ params = params or None ,
62+ cast_to = DocumentChunkListResponse ,
63+ )
64+
65+ def get_chunk (
66+ self ,
67+ document_id : str ,
68+ document_chunk_id : str ,
69+ * ,
70+ include_asset_urls : bool = False ,
71+ ) -> DocumentChunkResponse :
72+ """Get one current-revision chunk for one canonical document."""
73+ params : Dict [str , Any ] = _build_chunk_get_params (
74+ include_asset_urls = include_asset_urls ,
75+ )
76+
77+ return self ._request (
78+ "GET" ,
79+ f"v1/documents/{ document_id } /chunks/{ document_chunk_id } " ,
80+ params = params or None ,
81+ cast_to = DocumentChunkResponse ,
82+ )
83+
3584 def archive (self , document_id : str ) -> Document :
3685 """Archive one canonical document by ID."""
3786 return self ._request (
@@ -65,10 +114,78 @@ async def get(self, document_id: str) -> Document:
65114 cast_to = Document ,
66115 )
67116
117+ async def list_chunks (
118+ self ,
119+ document_id : str ,
120+ * ,
121+ page : int = 1 ,
122+ page_size : int = 50 ,
123+ chunk_type : Optional [DocumentChunkType ] = None ,
124+ include_asset_urls : bool = False ,
125+ ) -> DocumentChunkListResponse :
126+ """List current-revision chunks for one canonical document."""
127+ params : Dict [str , Any ] = _build_chunk_list_params (
128+ page = page ,
129+ page_size = page_size ,
130+ chunk_type = chunk_type ,
131+ include_asset_urls = include_asset_urls ,
132+ )
133+
134+ return await self ._request (
135+ "GET" ,
136+ f"v1/documents/{ document_id } /chunks" ,
137+ params = params or None ,
138+ cast_to = DocumentChunkListResponse ,
139+ )
140+
141+ async def get_chunk (
142+ self ,
143+ document_id : str ,
144+ document_chunk_id : str ,
145+ * ,
146+ include_asset_urls : bool = False ,
147+ ) -> DocumentChunkResponse :
148+ """Get one current-revision chunk for one canonical document."""
149+ params : Dict [str , Any ] = _build_chunk_get_params (
150+ include_asset_urls = include_asset_urls ,
151+ )
152+
153+ return await self ._request (
154+ "GET" ,
155+ f"v1/documents/{ document_id } /chunks/{ document_chunk_id } " ,
156+ params = params or None ,
157+ cast_to = DocumentChunkResponse ,
158+ )
159+
68160 async def archive (self , document_id : str ) -> Document :
69161 """Archive one canonical document by ID."""
70162 return await self ._request (
71163 "POST" ,
72164 f"v1/documents/{ document_id } /archive" ,
73165 cast_to = Document ,
74166 )
167+
168+
169+ def _build_chunk_list_params (
170+ * ,
171+ page : int ,
172+ page_size : int ,
173+ chunk_type : Optional [DocumentChunkType ],
174+ include_asset_urls : bool ,
175+ ) -> Dict [str , Any ]:
176+ params : Dict [str , Any ] = {}
177+ if page != 1 :
178+ params ["page" ] = page
179+ if page_size != 50 :
180+ params ["page_size" ] = page_size
181+ if chunk_type is not None :
182+ params ["chunk_type" ] = chunk_type
183+ if include_asset_urls :
184+ params ["include_asset_urls" ] = True
185+ return params
186+
187+
188+ def _build_chunk_get_params (* , include_asset_urls : bool ) -> Dict [str , Any ]:
189+ if not include_asset_urls :
190+ return {}
191+ return {"include_asset_urls" : True }
0 commit comments