davidkhala.ai 0.1.3__tar.gz → 0.1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/PKG-INFO +1 -1
  2. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/dify/knowledge.py +45 -8
  3. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/pyproject.toml +1 -1
  4. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/.gitignore +0 -0
  5. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/README.md +0 -0
  6. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/__init__.py +0 -0
  7. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/README.md +0 -0
  8. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/__init__.py +0 -0
  9. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/dify/__init__.py +0 -0
  10. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/dify/base.py +0 -0
  11. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/langgraph.py +0 -0
  12. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/agent/ragflow.py +0 -0
  13. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/ali/__init__.py +0 -0
  14. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/ali/dashscope.py +0 -0
  15. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/api/__init__.py +0 -0
  16. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/api/openrouter.py +0 -0
  17. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/api/siliconflow.py +0 -0
  18. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/google/__init__.py +0 -0
  19. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/google/adk.py +0 -0
  20. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/google/gemini.py +0 -0
  21. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/huggingface/BAAI.py +0 -0
  22. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/huggingface/__init__.py +0 -0
  23. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/huggingface/inference.py +0 -0
  24. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/model.py +0 -0
  25. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/openai/__init__.py +0 -0
  26. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/openai/azure.py +0 -0
  27. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/openai/native.py +0 -0
  28. {davidkhala_ai-0.1.3 → davidkhala_ai-0.1.5}/davidkhala/ai/opik.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: davidkhala.ai
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Summary: misc AI modules
5
5
  Requires-Python: >=3.13
6
6
  Provides-Extra: ali
@@ -141,31 +141,68 @@ class Dataset(API):
141
141
  'limit': size
142
142
  })
143
143
 
144
- def list_documents(self) -> Iterable[list[DocumentDict]]:
145
- return Iterator(self.paginate_documents, None)
144
+ def list_documents(self) -> Iterable[DocumentDict]:
145
+ for document_batch in Iterator(self.paginate_documents, None):
146
+ for document in document_batch:
147
+ yield document
146
148
 
147
149
  def has_document(self, name) -> bool:
148
150
  return any(name == item['name'] for row in self.list_documents() for item in row)
149
151
 
150
152
 
153
+ class ChunkDict(TypedDict):
154
+ id: str
155
+ position: int
156
+ document_id: str
157
+ content: str
158
+ sign_content: str # trimmed version of content
159
+ answer: Optional[str] # only used in QA chunk
160
+ word_count: int
161
+ tokens: int
162
+ keywords: Optional[list[str]]
163
+ index_node_id: str # chunk 在向量索引中的节点 ID
164
+ index_node_hash: str # hash of sign_content
165
+ hit_count: int
166
+ enabled: bool
167
+ status: str # 'completed'
168
+ created_at: int # timestamp
169
+ updated_at: int # timestamp
170
+ completed_at: int # timestamp
171
+ created_by: str # user id
172
+ child_chunks: list
173
+ error: Optional
174
+ stopped_at: Optional[int] # timestamp
175
+ disabled_at: Optional[int] # timestamp
176
+
177
+
151
178
  class Document(API):
152
179
  def __init__(self, d: Dataset.Instance, document_id: str):
153
180
  super().__init__(d.api_key, f"{d.base_url}/documents/{document_id}")
181
+
182
+ def exist(self):
154
183
  try:
155
184
  self.get()
156
- self.exist = True
185
+ return True
157
186
  except requests.exceptions.HTTPError as e:
158
187
  if e.response.status_code == 404:
159
- self.exist = False
188
+ return False
160
189
  else:
161
190
  raise e
162
191
 
163
192
  def get(self):
164
193
  return self.request(self.base_url, "GET")
194
+
165
195
  def paginate_chunks(self, page=1, size=20):
166
196
  return self.request(f"{self.base_url}/segments", "GET", params={
167
- 'page':page,
168
- 'limit':size
197
+ 'page': page,
198
+ 'limit': size
169
199
  })
170
- def list_chunks(self)->Iterable[list]: # TODO ChunkDict
171
- return Iterator(self.paginate_chunks, None)
200
+
201
+ def list_chunks(self) -> Iterable[ChunkDict]:
202
+ for chunk_batch in Iterator(self.paginate_chunks, None):
203
+ for chunk in chunk_batch:
204
+ yield chunk
205
+
206
+ def delete(self):
207
+ if self.exist():
208
+ self.request(self.base_url, "DELETE")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "davidkhala.ai"
3
- version = "0.1.3"
3
+ version = "0.1.5"
4
4
  description = "misc AI modules"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
File without changes
File without changes