davidkhala.ai 0.1.1__tar.gz → 0.1.3__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 (29) hide show
  1. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/PKG-INFO +1 -1
  2. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/agent/dify/knowledge.py +35 -20
  3. davidkhala_ai-0.1.3/davidkhala/ai/google/__init__.py +0 -0
  4. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/pyproject.toml +1 -1
  5. davidkhala_ai-0.1.1/davidkhala/ai/agent/dify/__init__.py +0 -9
  6. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/.gitignore +0 -0
  7. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/README.md +0 -0
  8. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/__init__.py +0 -0
  9. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/agent/README.md +0 -0
  10. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/agent/__init__.py +0 -0
  11. {davidkhala_ai-0.1.1/davidkhala/ai/ali → davidkhala_ai-0.1.3/davidkhala/ai/agent/dify}/__init__.py +0 -0
  12. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/agent/dify/base.py +0 -0
  13. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/agent/langgraph.py +0 -0
  14. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/agent/ragflow.py +0 -0
  15. {davidkhala_ai-0.1.1/davidkhala/ai/google → davidkhala_ai-0.1.3/davidkhala/ai/ali}/__init__.py +0 -0
  16. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/ali/dashscope.py +0 -0
  17. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/api/__init__.py +0 -0
  18. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/api/openrouter.py +0 -0
  19. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/api/siliconflow.py +0 -0
  20. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/google/adk.py +0 -0
  21. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/google/gemini.py +0 -0
  22. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/huggingface/BAAI.py +0 -0
  23. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/huggingface/__init__.py +0 -0
  24. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/huggingface/inference.py +0 -0
  25. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/model.py +0 -0
  26. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/openai/__init__.py +0 -0
  27. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/openai/azure.py +0 -0
  28. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/davidkhala/ai/openai/native.py +0 -0
  29. {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.3}/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.1
3
+ Version: 0.1.3
4
4
  Summary: misc AI modules
5
5
  Requires-Python: >=3.13
6
6
  Provides-Extra: ali
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  from pathlib import Path
5
- from typing import Iterable, TypedDict, Callable
5
+ from typing import Iterable, TypedDict, Callable, Any, Optional
6
6
  from urllib.parse import urlparse
7
7
 
8
8
  import requests
@@ -41,14 +41,16 @@ class Iterator(Iterable):
41
41
  def __iter__(self):
42
42
  return self
43
43
 
44
- def __init__(self, get_fn: Callable, r):
44
+ def __init__(self, get_fn: Callable[[int, int], Any], r: Optional[dict]):
45
45
  self.response = r
46
46
  self.fn = get_fn
47
47
 
48
48
  def __next__(self):
49
49
  if self.response and not self.response['has_more']:
50
50
  raise StopIteration
51
- self.response = self.fn()
51
+ page = 1 if not self.response else self.response['page'] + 1
52
+ limit = None if not self.response else self.response['limit']
53
+ self.response = self.fn(page, limit)
52
54
  return self.response['data']
53
55
 
54
56
 
@@ -81,15 +83,19 @@ class Dataset(API):
81
83
  def __init__(self, api_key: str, base_url="https://api.dify.ai/v1"):
82
84
  super().__init__(api_key, f"{base_url}/datasets")
83
85
 
84
- def list(self):
85
- return self.request(self.base_url, "GET")
86
+ def paginate_datasets(self, page=1, size=20):
87
+ r = self.request(self.base_url, "GET", params={
88
+ 'page': page,
89
+ 'limit': size,
90
+ })
91
+ return r
86
92
 
87
- def list_all(self) -> Iterable[DatasetDict]:
88
- return Iterator(self.list, None)
93
+ def list_datasets(self) -> Iterable[list[DatasetDict]]:
94
+ return Iterator(self.paginate_datasets, None)
89
95
 
90
96
  @property
91
97
  def ids(self):
92
- for sub_list in self.list_all():
98
+ for sub_list in self.list_datasets():
93
99
  for dataset in sub_list:
94
100
  yield dataset['id']
95
101
 
@@ -129,11 +135,14 @@ class Dataset(API):
129
135
  r = self.on_response(r)
130
136
  return r['document']
131
137
 
132
- def list(self):
133
- return self.request(f"{self.base_url}/documents", "GET")
138
+ def paginate_documents(self, page=1, size=20):
139
+ return self.request(f"{self.base_url}/documents", "GET", params={
140
+ 'page': page,
141
+ 'limit': size
142
+ })
134
143
 
135
- def list_documents(self) -> Iterable[DocumentDict]:
136
- return Iterator(self.list, None)
144
+ def list_documents(self) -> Iterable[list[DocumentDict]]:
145
+ return Iterator(self.paginate_documents, None)
137
146
 
138
147
  def has_document(self, name) -> bool:
139
148
  return any(name == item['name'] for row in self.list_documents() for item in row)
@@ -142,15 +151,21 @@ class Dataset(API):
142
151
  class Document(API):
143
152
  def __init__(self, d: Dataset.Instance, document_id: str):
144
153
  super().__init__(d.api_key, f"{d.base_url}/documents/{document_id}")
145
-
146
- def get(self):
147
- return self.request(self.base_url, "GET")
148
-
149
- def exist(self):
150
154
  try:
151
155
  self.get()
152
- return True
156
+ self.exist = True
153
157
  except requests.exceptions.HTTPError as e:
154
158
  if e.response.status_code == 404:
155
- return False
156
- raise e
159
+ self.exist = False
160
+ else:
161
+ raise e
162
+
163
+ def get(self):
164
+ return self.request(self.base_url, "GET")
165
+ def paginate_chunks(self, page=1, size=20):
166
+ return self.request(f"{self.base_url}/segments", "GET", params={
167
+ 'page':page,
168
+ 'limit':size
169
+ })
170
+ def list_chunks(self)->Iterable[list]: # TODO ChunkDict
171
+ return Iterator(self.paginate_chunks, None)
File without changes
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "davidkhala.ai"
3
- version = "0.1.1"
3
+ version = "0.1.3"
4
4
  description = "misc AI modules"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -1,9 +0,0 @@
1
- from datetime import datetime
2
-
3
-
4
- def with_datetime(filename:str):
5
- if ' ' in filename:
6
- raise ValueError(f"Filename '{filename}' should not contain spaces.")
7
- return f"{datetime.now().strftime("%Y%m%d_%H%M%S")}.{filename}"
8
-
9
-
File without changes
File without changes