agently 4.0.6.5__py3-none-any.whl → 4.0.6.7__py3-none-any.whl
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.
- agently/builtins/plugins/ModelRequester/OpenAICompatible.py +3 -3
- agently/builtins/plugins/PromptGenerator/AgentlyPromptGenerator.py +4 -16
- agently/core/ModelRequest.py +1 -2
- agently/integrations/chromadb.py +159 -43
- {agently-4.0.6.5.dist-info → agently-4.0.6.7.dist-info}/METADATA +1 -1
- {agently-4.0.6.5.dist-info → agently-4.0.6.7.dist-info}/RECORD +8 -8
- {agently-4.0.6.5.dist-info → agently-4.0.6.7.dist-info}/WHEEL +0 -0
- {agently-4.0.6.5.dist-info → agently-4.0.6.7.dist-info}/licenses/LICENSE +0 -0
|
@@ -351,13 +351,13 @@ class OpenAICompatible(ModelRequester):
|
|
|
351
351
|
api_key = self.plugin_settings.get("api_key", None)
|
|
352
352
|
if api_key is not None and auth["api_key"] == "None":
|
|
353
353
|
auth["api_key"] = str(api_key)
|
|
354
|
-
if "
|
|
355
|
-
headers_with_auth = {**request_data.headers, "Authorization": f"Bearer { auth['api_key'] }"}
|
|
356
|
-
elif "headers" in auth and isinstance(auth["headers"], dict):
|
|
354
|
+
if "headers" in auth and isinstance(auth["headers"], dict):
|
|
357
355
|
headers_with_auth = {**request_data.headers, **auth["headers"]}
|
|
358
356
|
elif "body" in auth and isinstance(auth["body"], dict):
|
|
359
357
|
headers_with_auth = request_data.headers.copy()
|
|
360
358
|
request_data.data.update(**auth["body"])
|
|
359
|
+
if "api_key" in auth and auth["api_key"] != "None":
|
|
360
|
+
headers_with_auth = {**request_data.headers, "Authorization": f"Bearer { auth['api_key'] }"}
|
|
361
361
|
else:
|
|
362
362
|
headers_with_auth = request_data.headers.copy()
|
|
363
363
|
|
|
@@ -307,9 +307,7 @@ class AgentlyPromptGenerator(PromptGenerator):
|
|
|
307
307
|
if isinstance(role_mapping, dict):
|
|
308
308
|
merged_role_mapping.update(role_mapping)
|
|
309
309
|
|
|
310
|
-
prompt_text_list.append(
|
|
311
|
-
f"{ (merged_role_mapping['user'] if 'user' in merged_role_mapping else 'user').upper() }:"
|
|
312
|
-
)
|
|
310
|
+
prompt_text_list.append(f"{ (merged_role_mapping['user'] if 'user' in merged_role_mapping else 'user') }:")
|
|
313
311
|
|
|
314
312
|
# system & developer
|
|
315
313
|
if prompt_object.system:
|
|
@@ -368,7 +366,7 @@ class AgentlyPromptGenerator(PromptGenerator):
|
|
|
368
366
|
|
|
369
367
|
prompt_text_list.extend(self._generate_main_prompt(prompt_object))
|
|
370
368
|
prompt_text_list.append(
|
|
371
|
-
f"{ (merged_role_mapping['assistant'] if 'assistant' in merged_role_mapping else 'assistant')
|
|
369
|
+
f"{ (merged_role_mapping['assistant'] if 'assistant' in merged_role_mapping else 'assistant') }:"
|
|
372
370
|
)
|
|
373
371
|
|
|
374
372
|
return "\n".join(prompt_text_list)
|
|
@@ -398,12 +396,7 @@ class AgentlyPromptGenerator(PromptGenerator):
|
|
|
398
396
|
if prompt_object.system:
|
|
399
397
|
prompt_messages.append(
|
|
400
398
|
self._generate_yaml_prompt_message(
|
|
401
|
-
|
|
402
|
-
prompt_title_mapping.get(
|
|
403
|
-
'system',
|
|
404
|
-
'SYSTEM',
|
|
405
|
-
)
|
|
406
|
-
),
|
|
399
|
+
"system",
|
|
407
400
|
prompt_object.system,
|
|
408
401
|
role_mapping=merged_role_mapping,
|
|
409
402
|
)
|
|
@@ -412,12 +405,7 @@ class AgentlyPromptGenerator(PromptGenerator):
|
|
|
412
405
|
if prompt_object.developer:
|
|
413
406
|
prompt_messages.append(
|
|
414
407
|
self._generate_yaml_prompt_message(
|
|
415
|
-
|
|
416
|
-
prompt_title_mapping.get(
|
|
417
|
-
'developer',
|
|
418
|
-
'DEVELOPER DIRECTIONS',
|
|
419
|
-
)
|
|
420
|
-
),
|
|
408
|
+
"developer",
|
|
421
409
|
prompt_object.developer,
|
|
422
410
|
role_mapping=merged_role_mapping,
|
|
423
411
|
)
|
agently/core/ModelRequest.py
CHANGED
|
@@ -99,7 +99,6 @@ class ModelResponse:
|
|
|
99
99
|
self.plugin_manager,
|
|
100
100
|
self.settings,
|
|
101
101
|
)
|
|
102
|
-
self.get_result = self.result
|
|
103
102
|
self.get_meta = self.result.get_meta
|
|
104
103
|
self.async_get_meta = self.result.async_get_meta
|
|
105
104
|
self.get_text = self.result.get_text
|
|
@@ -406,7 +405,7 @@ class ModelRequest:
|
|
|
406
405
|
self.prompt.clear()
|
|
407
406
|
return response
|
|
408
407
|
|
|
409
|
-
|
|
408
|
+
def get_result(self):
|
|
410
409
|
return self.get_response().result
|
|
411
410
|
|
|
412
411
|
async def async_get_meta(self):
|
agently/integrations/chromadb.py
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
from agently.utils import LazyImport
|
|
1
|
+
from agently.utils import LazyImport
|
|
2
2
|
|
|
3
3
|
LazyImport.import_package("chromadb")
|
|
4
4
|
|
|
5
|
-
from typing import Callable, TypedDict, Any, TYPE_CHECKING
|
|
5
|
+
from typing import Literal, Callable, TypedDict, Any, TYPE_CHECKING, overload
|
|
6
|
+
from itertools import zip_longest
|
|
6
7
|
|
|
7
|
-
from chromadb
|
|
8
|
+
from chromadb import Client as ChromaDBClient
|
|
9
|
+
from chromadb.config import Settings
|
|
10
|
+
from chromadb.api.types import EmbeddingFunction
|
|
8
11
|
|
|
9
12
|
if TYPE_CHECKING:
|
|
10
13
|
from chromadb.api.types import (
|
|
@@ -13,9 +16,10 @@ if TYPE_CHECKING:
|
|
|
13
16
|
Embeddings,
|
|
14
17
|
QueryResult,
|
|
15
18
|
Schema,
|
|
16
|
-
CollectionMetadata,
|
|
17
19
|
DataLoader,
|
|
18
20
|
Loadable,
|
|
21
|
+
Where,
|
|
22
|
+
WhereDocument,
|
|
19
23
|
)
|
|
20
24
|
from chromadb.api.collection_configuration import CreateCollectionConfiguration
|
|
21
25
|
from chromadb.api import ClientAPI
|
|
@@ -83,29 +87,54 @@ class ChromaResults:
|
|
|
83
87
|
*,
|
|
84
88
|
queries: str | list[str],
|
|
85
89
|
results: "QueryResult",
|
|
90
|
+
distance: float | None = None,
|
|
86
91
|
):
|
|
87
92
|
if isinstance(queries, str):
|
|
88
93
|
queries = [queries]
|
|
89
|
-
|
|
94
|
+
|
|
95
|
+
ids = results.get("ids") or []
|
|
96
|
+
documents = results.get("documents")
|
|
97
|
+
metadatas = results.get("metadatas")
|
|
98
|
+
distances = results.get("distances")
|
|
99
|
+
|
|
100
|
+
if ids and len(queries) != len(ids):
|
|
90
101
|
raise ValueError(
|
|
91
|
-
f"The length of queries does not equal the length of results.\nQueries: {
|
|
102
|
+
f"The length of queries does not equal the length of results['ids'].\nQueries: {queries}\nIds: {ids}"
|
|
92
103
|
)
|
|
104
|
+
|
|
93
105
|
self._chroma_results = results
|
|
94
|
-
self._results = {}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
self._results: dict[str, list[dict]] = {}
|
|
107
|
+
|
|
108
|
+
doc_iter = documents if documents is not None else []
|
|
109
|
+
meta_iter = metadatas if metadatas is not None else []
|
|
110
|
+
dist_iter = distances if distances is not None else []
|
|
111
|
+
|
|
112
|
+
for query, row_ids, row_documents, row_metadatas, row_distances in zip_longest(
|
|
113
|
+
queries, ids, doc_iter, meta_iter, dist_iter, fillvalue=None
|
|
114
|
+
):
|
|
115
|
+
row_ids = row_ids or []
|
|
116
|
+
query_results: list[dict[str, Any]] = []
|
|
117
|
+
for id_, doc, meta, dist in zip_longest(
|
|
118
|
+
row_ids, row_documents or [], row_metadatas or [], row_distances or [], fillvalue=None
|
|
119
|
+
):
|
|
120
|
+
query_result = {"id": id_, "document": doc, "metadata": meta, "distance": dist}
|
|
121
|
+
if distance is None:
|
|
122
|
+
query_results.append(query_result)
|
|
123
|
+
else:
|
|
124
|
+
if isinstance(dist, (int, float)) and dist < distance:
|
|
125
|
+
query_results.append(query_result)
|
|
126
|
+
|
|
127
|
+
if query:
|
|
128
|
+
self._results[query] = query_results
|
|
104
129
|
|
|
105
130
|
def get_original_results(self):
|
|
106
131
|
return self._chroma_results
|
|
107
132
|
|
|
108
|
-
def get(self):
|
|
133
|
+
def get(self, *, simplify_single_result: bool = False):
|
|
134
|
+
if simplify_single_result:
|
|
135
|
+
results = list(self._results.values())
|
|
136
|
+
if len(results) == 1:
|
|
137
|
+
return results[0]
|
|
109
138
|
return self._results
|
|
110
139
|
|
|
111
140
|
|
|
@@ -113,55 +142,142 @@ class ChromaEmbeddingFunction(EmbeddingFunction):
|
|
|
113
142
|
def __init__(
|
|
114
143
|
self,
|
|
115
144
|
*,
|
|
116
|
-
|
|
117
|
-
agent: "BaseAgent | None" = None,
|
|
145
|
+
embedding_agent: "BaseAgent",
|
|
118
146
|
):
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
elif agent:
|
|
147
|
+
def embedding_function_by_agent(texts: list[str]) -> "Embeddings":
|
|
148
|
+
return embedding_agent.input(texts).start()
|
|
122
149
|
|
|
123
|
-
|
|
124
|
-
return agent.input(texts).start()
|
|
125
|
-
|
|
126
|
-
self.embedding_function = embedding_function_by_agent
|
|
127
|
-
else:
|
|
128
|
-
raise ValueError(
|
|
129
|
-
f"ChromaEmbeddingFunction() requires at least one definition for 'embedding_function' or 'agent'."
|
|
130
|
-
)
|
|
150
|
+
self.embedding_function = embedding_function_by_agent
|
|
131
151
|
|
|
132
|
-
def __call__(self, documents: "Documents") -> "Embeddings":
|
|
152
|
+
def __call__(self, documents: "Documents | list[str] | str") -> "Embeddings":
|
|
153
|
+
if isinstance(documents, str):
|
|
154
|
+
documents = [documents]
|
|
133
155
|
return self.embedding_function([document for document in documents])
|
|
134
156
|
|
|
135
157
|
|
|
136
158
|
class ChromaCollection:
|
|
159
|
+
|
|
137
160
|
def __init__(
|
|
138
161
|
self,
|
|
139
|
-
conn: "ClientAPI",
|
|
140
162
|
collection_name: str,
|
|
141
163
|
*,
|
|
164
|
+
conn: "ClientAPI | None" = None,
|
|
142
165
|
schema: "Schema | None" = None,
|
|
143
166
|
configuration: "CreateCollectionConfiguration | None" = None,
|
|
144
|
-
metadata: None = None,
|
|
145
|
-
|
|
146
|
-
agent: "BaseAgent | None" = None,
|
|
167
|
+
metadata: dict[str, Any] | None = None,
|
|
168
|
+
embedding_agent: "BaseAgent | None" = None,
|
|
147
169
|
data_loader: "DataLoader[Loadable] | None" = None,
|
|
148
170
|
get_or_create: bool = False,
|
|
171
|
+
hnsw_space: Literal["l2", "cosine", "ip"] = "cosine",
|
|
149
172
|
):
|
|
150
|
-
if
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
173
|
+
if conn is None:
|
|
174
|
+
conn = ChromaDBClient(Settings(anonymized_telemetry=False))
|
|
175
|
+
|
|
176
|
+
if metadata is None:
|
|
177
|
+
metadata = {}
|
|
178
|
+
|
|
179
|
+
metadata["hnsw:space"] = hnsw_space
|
|
180
|
+
|
|
181
|
+
self.embedding_function = (
|
|
182
|
+
ChromaEmbeddingFunction(embedding_agent=embedding_agent) if embedding_agent is not None else None
|
|
183
|
+
)
|
|
156
184
|
|
|
157
185
|
self._collection = conn.create_collection(
|
|
158
186
|
collection_name,
|
|
159
187
|
schema=schema,
|
|
160
188
|
configuration=configuration,
|
|
161
189
|
metadata=metadata,
|
|
162
|
-
embedding_function=embedding_function,
|
|
190
|
+
embedding_function=self.embedding_function,
|
|
163
191
|
data_loader=data_loader,
|
|
164
192
|
get_or_create=get_or_create,
|
|
165
193
|
)
|
|
166
194
|
|
|
167
|
-
def add(
|
|
195
|
+
def add(
|
|
196
|
+
self,
|
|
197
|
+
data: ChromaDataDict | list[ChromaDataDict] | ChromaData,
|
|
198
|
+
*,
|
|
199
|
+
embedding_function: "Callable[[str | list[str]], Embeddings] | None" = None,
|
|
200
|
+
):
|
|
201
|
+
embedding_function = embedding_function or self.embedding_function
|
|
202
|
+
if embedding_function is None:
|
|
203
|
+
raise NotImplementedError(
|
|
204
|
+
f"Embedding function must be assigned either in ChromaCollection initialize or .add() method."
|
|
205
|
+
)
|
|
206
|
+
if not isinstance(data, ChromaData):
|
|
207
|
+
data = ChromaData(data, embedding_function=embedding_function)
|
|
208
|
+
self._collection.add(**data.get_kwargs())
|
|
209
|
+
return self
|
|
210
|
+
|
|
211
|
+
@overload
|
|
212
|
+
def query(
|
|
213
|
+
self,
|
|
214
|
+
query_or_queries: str,
|
|
215
|
+
*,
|
|
216
|
+
embedding_function: "Callable[[str | list[str]], Embeddings] | None" = None,
|
|
217
|
+
top_n: int | None = None,
|
|
218
|
+
where: "Where | None" = None,
|
|
219
|
+
where_document: "WhereDocument | None" = None,
|
|
220
|
+
distance: float | None = None,
|
|
221
|
+
) -> list[dict[str, Any]]: ...
|
|
222
|
+
|
|
223
|
+
@overload
|
|
224
|
+
def query(
|
|
225
|
+
self,
|
|
226
|
+
query_or_queries: list[str],
|
|
227
|
+
*,
|
|
228
|
+
embedding_function: "Callable[[str | list[str]], Embeddings] | None" = None,
|
|
229
|
+
top_n: int | None = None,
|
|
230
|
+
where: "Where | None" = None,
|
|
231
|
+
where_document: "WhereDocument | None" = None,
|
|
232
|
+
distance: float | None = None,
|
|
233
|
+
) -> dict[str, list[dict[str, Any]]]: ...
|
|
234
|
+
|
|
235
|
+
def query(
|
|
236
|
+
self,
|
|
237
|
+
query_or_queries: str | list[str],
|
|
238
|
+
*,
|
|
239
|
+
embedding_function: "Callable[[str | list[str]], Embeddings] | None" = None,
|
|
240
|
+
top_n: int | None = None,
|
|
241
|
+
where: "Where | None" = None,
|
|
242
|
+
where_document: "WhereDocument | None" = None,
|
|
243
|
+
distance: float | None = None,
|
|
244
|
+
):
|
|
245
|
+
embedding_function = embedding_function or self.embedding_function
|
|
246
|
+
if embedding_function is None:
|
|
247
|
+
raise NotImplementedError(
|
|
248
|
+
f"Embedding function must be assigned either in ChromaCollection initialize or .query() method."
|
|
249
|
+
)
|
|
250
|
+
if not isinstance(query_or_queries, list):
|
|
251
|
+
query_or_queries = [query_or_queries]
|
|
252
|
+
return ChromaResults(
|
|
253
|
+
queries=query_or_queries,
|
|
254
|
+
results=self._collection.query(
|
|
255
|
+
query_embeddings=embedding_function(query_or_queries),
|
|
256
|
+
n_results=top_n or 10,
|
|
257
|
+
where=where,
|
|
258
|
+
where_document=where_document,
|
|
259
|
+
),
|
|
260
|
+
distance=distance,
|
|
261
|
+
).get(simplify_single_result=True)
|
|
262
|
+
|
|
263
|
+
def query_embeddings(
|
|
264
|
+
self,
|
|
265
|
+
embeddings_dict: dict[str, "Embedding"],
|
|
266
|
+
*,
|
|
267
|
+
top_n: int | None = None,
|
|
268
|
+
where: "Where | None" = None,
|
|
269
|
+
where_document: "WhereDocument | None" = None,
|
|
270
|
+
distance: float | None = None,
|
|
271
|
+
):
|
|
272
|
+
queries = [query for query in embeddings_dict.keys()]
|
|
273
|
+
embeddings = [embeddings for embeddings in embeddings_dict.values()]
|
|
274
|
+
return ChromaResults(
|
|
275
|
+
queries=queries,
|
|
276
|
+
results=self._collection.query(
|
|
277
|
+
query_embeddings=embeddings,
|
|
278
|
+
n_results=top_n or 10,
|
|
279
|
+
where=where,
|
|
280
|
+
where_document=where_document,
|
|
281
|
+
),
|
|
282
|
+
distance=distance,
|
|
283
|
+
).get(simplify_single_result=True)
|
|
@@ -11,8 +11,8 @@ agently/builtins/agent_extensions/__init__.py,sha256=IxWRQogF8PCVNXeY7D4qhGukEx3
|
|
|
11
11
|
agently/builtins/hookers/ConsoleHooker.py,sha256=aJdDj_nG8CiwyelA505zvtpzBSwD52nFIkBRDJGgq3Y,8099
|
|
12
12
|
agently/builtins/hookers/PureLoggerHooker.py,sha256=fzN0OfhQzgns4KeCNH-qcdm-BdQT0W2kqEmt3Zp2pYI,1906
|
|
13
13
|
agently/builtins/hookers/SystemMessageHooker.py,sha256=nU5rOzcuXKdaTXWix3jhZ-4QoD4cMQJZo02wNTpZpjI,5396
|
|
14
|
-
agently/builtins/plugins/ModelRequester/OpenAICompatible.py,sha256=
|
|
15
|
-
agently/builtins/plugins/PromptGenerator/AgentlyPromptGenerator.py,sha256=
|
|
14
|
+
agently/builtins/plugins/ModelRequester/OpenAICompatible.py,sha256=xX-iy3qgToD8jIrPsL1NufMb6dlf0SVmX0rPjAkPSQ0,25261
|
|
15
|
+
agently/builtins/plugins/PromptGenerator/AgentlyPromptGenerator.py,sha256=KMlXKH44MExTaGnu5cmLtvYT3aXOQiXOZN-F4JeVnJE,28514
|
|
16
16
|
agently/builtins/plugins/ResponseParser/AgentlyResponseParser.py,sha256=FEhfsiHB4Bx7HfghnObklLj08j8IVwGh0WEVD6U-G3U,17445
|
|
17
17
|
agently/builtins/plugins/ToolManager/AgentlyToolManager.py,sha256=oaqte5LAryZQMD6vuEbKhe6kOLUyZTRZswC1MDFiYxw,9138
|
|
18
18
|
agently/builtins/plugins/__init__.py,sha256=wj4_U9TTekc2CmjppbXKUREDFRXFX1y0ySOW-CxQuok,801
|
|
@@ -22,7 +22,7 @@ agently/builtins/tools/__init__.py,sha256=pFOWgH2C3xRvgQo3UVdkj4yHjF9nNtmoVHmOZf
|
|
|
22
22
|
agently/core/Agent.py,sha256=HbUqlCWFgtziavN8r-2RFQyrbHMMxKA6y-io-0CY8TA,9022
|
|
23
23
|
agently/core/EventCenter.py,sha256=sknU5w9MpGDQgMOF9c5k4PfM4SNT5X_LrpYte2HaFNM,10861
|
|
24
24
|
agently/core/ExtensionHandlers.py,sha256=88iSAW50bgMshB56cTgKg30eOjZQyXiJY1en4w7afWY,2076
|
|
25
|
-
agently/core/ModelRequest.py,sha256=
|
|
25
|
+
agently/core/ModelRequest.py,sha256=rB8LQ2_7TJlOHZQ6jIKSfXDDQar7dv_bi8g7xpIoUN4,17355
|
|
26
26
|
agently/core/PluginManager.py,sha256=oUnXbe1ilQTOWwnENxtGtV6wG-yZriCxniqfuxuTFO0,4354
|
|
27
27
|
agently/core/Prompt.py,sha256=8SlqytnAIM_FIWbY2Jx-T7yOs_jqmkz9cux8-2iOCjA,8023
|
|
28
28
|
agently/core/Tool.py,sha256=PNYf_BwVefr8IOqf5asLaVq2fU7hQaFJwJVj3S4fq84,1871
|
|
@@ -37,7 +37,7 @@ agently/core/TriggerFlow/process/ForEachProcess.py,sha256=oBI7KIpnj2tbczt_cTJCNv
|
|
|
37
37
|
agently/core/TriggerFlow/process/MatchCaseProcess.py,sha256=-NpbAlXq054juNkFCsDdWsIBMoHHKV1-cEsgndcd9KY,7888
|
|
38
38
|
agently/core/TriggerFlow/process/__init__.py,sha256=BP5bAr9LRVVD83KFqXeprgTmXA1iCSOSsD509BtoX_E,753
|
|
39
39
|
agently/core/__init__.py,sha256=CPglSpW5oEEmWpCpdvv9wK4myXmVipjuZm5HtMq6Vxo,1214
|
|
40
|
-
agently/integrations/chromadb.py,sha256=
|
|
40
|
+
agently/integrations/chromadb.py,sha256=hLrjwsU_d4SOGRX0bf-55uiA73YarIzRa8ORFnwu3W8,9797
|
|
41
41
|
agently/types/__init__.py,sha256=xb8GMY-ULncO_PY9rfRUsyi12wAQQJx8gAAnoM30uZA,592
|
|
42
42
|
agently/types/data/__init__.py,sha256=qladqSEqcAUW_XzdTDl4cvaraq_DpANy3aZbIPxoygk,1627
|
|
43
43
|
agently/types/data/event.py,sha256=LFQW7MN_QGOis3XV-8K6jNXWsLvT7tYxo4BZbUBCpfI,1790
|
|
@@ -70,7 +70,7 @@ agently/utils/Storage.py,sha256=E7QyNJ9T0yOUafPgdP90La698hgLMSGjhJ7qCEHzxxw,9438
|
|
|
70
70
|
agently/utils/StreamingJSONCompleter.py,sha256=aZ9zuGUTQlP-QKbXHUZCf6EtVuG49MKn8xdhw0VhDEA,4292
|
|
71
71
|
agently/utils/StreamingJSONParser.py,sha256=sPPJOtj5OYvsrukRErcoxRl4yuV1zDuf7pQ_pvw_Zow,21116
|
|
72
72
|
agently/utils/__init__.py,sha256=7MDln5OVkqFEdhhuG8VTdr2q02UWwCj-udndwzWV_iQ,1280
|
|
73
|
-
agently-4.0.6.
|
|
74
|
-
agently-4.0.6.
|
|
75
|
-
agently-4.0.6.
|
|
76
|
-
agently-4.0.6.
|
|
73
|
+
agently-4.0.6.7.dist-info/METADATA,sha256=LZiqVCSE6wlDUhct8N33KtNf1M8Qs8aWFQHCCB3oAmo,7112
|
|
74
|
+
agently-4.0.6.7.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
75
|
+
agently-4.0.6.7.dist-info/licenses/LICENSE,sha256=Y5ZgAdYgMFigPT8dhN18dTLRtBshOSfWhTDRO1t0Cq4,11360
|
|
76
|
+
agently-4.0.6.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|