davidkhala.ai 0.1.1__tar.gz → 0.1.2__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.
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/PKG-INFO +1 -1
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/dify/knowledge.py +26 -19
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/pyproject.toml +1 -1
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/.gitignore +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/README.md +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/README.md +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/dify/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/dify/base.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/langgraph.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/agent/ragflow.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/ali/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/ali/dashscope.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/api/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/api/openrouter.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/api/siliconflow.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/google/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/google/adk.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/google/gemini.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/huggingface/BAAI.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/huggingface/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/huggingface/inference.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/model.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/openai/__init__.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/openai/azure.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/openai/native.py +0 -0
- {davidkhala_ai-0.1.1 → davidkhala_ai-0.1.2}/davidkhala/ai/opik.py +0 -0
|
@@ -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
|
|
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
|
|
85
|
-
|
|
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
|
|
88
|
-
return Iterator(self.
|
|
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.
|
|
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
|
|
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.
|
|
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,13 @@ 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
|
-
|
|
156
|
+
self.exist = True
|
|
153
157
|
except requests.exceptions.HTTPError as e:
|
|
154
158
|
if e.response.status_code == 404:
|
|
155
|
-
|
|
159
|
+
self.exist = False
|
|
156
160
|
raise e
|
|
161
|
+
|
|
162
|
+
def get(self):
|
|
163
|
+
return self.request(self.base_url, "GET")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|