agent-lab-sdk 0.1.11__py3-none-any.whl → 0.1.13__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.
Potentially problematic release.
This version of agent-lab-sdk might be problematic. Click here for more details.
- agent_lab_sdk/langgraph/checkpoint/agw_saver.py +21 -19
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.13.dist-info}/METADATA +3 -1
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.13.dist-info}/RECORD +6 -6
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.13.dist-info}/WHEEL +0 -0
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.13.dist-info}/licenses/LICENSE +0 -0
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.13.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import orjson
|
|
4
4
|
from random import random
|
|
5
5
|
from langgraph.checkpoint.serde.types import ChannelProtocol
|
|
6
6
|
import asyncio
|
|
@@ -9,7 +9,7 @@ from contextlib import asynccontextmanager
|
|
|
9
9
|
from typing import Any, AsyncIterator, Dict, Iterator, Optional, Sequence, Tuple
|
|
10
10
|
import logging
|
|
11
11
|
|
|
12
|
-
import
|
|
12
|
+
import httpx
|
|
13
13
|
from langchain_core.runnables import RunnableConfig
|
|
14
14
|
|
|
15
15
|
from langgraph.checkpoint.base import (
|
|
@@ -40,7 +40,7 @@ except NameError: # pragma: no cover
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
43
|
-
"""Persist checkpoints in Agent-Gateway с помощью `
|
|
43
|
+
"""Persist checkpoints in Agent-Gateway с помощью `httpx` async client."""
|
|
44
44
|
|
|
45
45
|
# ---------------------------- init / ctx -------------------------
|
|
46
46
|
def __init__(
|
|
@@ -51,11 +51,11 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
51
51
|
timeout: int | float = 10,
|
|
52
52
|
api_key: str | None = None,
|
|
53
53
|
extra_headers: Dict[str, str] | None = None,
|
|
54
|
+
verify: bool = True,
|
|
54
55
|
):
|
|
55
56
|
super().__init__(serde=serde)
|
|
56
57
|
self.base_url = base_url.rstrip("/")
|
|
57
58
|
self.timeout = timeout
|
|
58
|
-
self._session = requests.Session()
|
|
59
59
|
self.loop = asyncio.get_running_loop()
|
|
60
60
|
|
|
61
61
|
self.headers: Dict[str, str] = {
|
|
@@ -66,12 +66,20 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
66
66
|
self.headers.update(extra_headers)
|
|
67
67
|
if api_key:
|
|
68
68
|
self.headers["Authorization"] = f"Bearer {api_key}"
|
|
69
|
+
|
|
70
|
+
self._client = httpx.AsyncClient(
|
|
71
|
+
base_url=self.base_url,
|
|
72
|
+
headers=self.headers,
|
|
73
|
+
timeout=self.timeout,
|
|
74
|
+
verify=verify,
|
|
75
|
+
trust_env=True
|
|
76
|
+
)
|
|
69
77
|
|
|
70
78
|
async def __aenter__(self): # noqa: D401
|
|
71
79
|
return self
|
|
72
80
|
|
|
73
81
|
async def __aexit__(self, exc_type, exc, tb): # noqa: D401
|
|
74
|
-
await
|
|
82
|
+
await self._client.aclose()
|
|
75
83
|
|
|
76
84
|
# ----------------------- universal dump/load ---------------------
|
|
77
85
|
# def _safe_dump(self, obj: Any) -> Any:
|
|
@@ -89,15 +97,15 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
89
97
|
# 1) bytes → str
|
|
90
98
|
s = dumped.decode()
|
|
91
99
|
# 2) str JSON → python (list/dict/scalar)
|
|
92
|
-
return
|
|
93
|
-
except (UnicodeDecodeError,
|
|
100
|
+
return orjson.loads(s)
|
|
101
|
+
except (UnicodeDecodeError, orjson.JSONDecodeError):
|
|
94
102
|
# не UTF-8 или не JSON → base64
|
|
95
103
|
return base64.b64encode(dumped).decode()
|
|
96
104
|
return dumped
|
|
97
105
|
|
|
98
106
|
def _safe_load(self, obj: Any) -> Any:
|
|
99
107
|
if isinstance(obj, (dict, list)): # уже распакованный JSON
|
|
100
|
-
return self.serde.loads(
|
|
108
|
+
return self.serde.loads(orjson.dumps(obj))
|
|
101
109
|
if isinstance(obj, str):
|
|
102
110
|
# сначала plain JSON-строка
|
|
103
111
|
try:
|
|
@@ -195,18 +203,12 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
195
203
|
return self._safe_load(md)
|
|
196
204
|
|
|
197
205
|
# ------------------------ HTTP wrapper ---------------------------
|
|
198
|
-
async def _http(self,
|
|
199
|
-
url = f"{self.base_url}{path}"
|
|
200
|
-
hdr = {**self.headers, **kw.pop("headers", {})}
|
|
201
|
-
|
|
206
|
+
async def _http(self, method: str, path: str, **kw) -> httpx.Response:
|
|
202
207
|
if "json" in kw:
|
|
203
208
|
payload = kw.pop("json")
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return await asyncio.to_thread(
|
|
208
|
-
self._session.request, m, url, headers=hdr, timeout=self.timeout, **kw
|
|
209
|
-
)
|
|
209
|
+
logger.info(orjson.dumps(payload).decode())
|
|
210
|
+
|
|
211
|
+
return await self._client.request(method, path, **kw)
|
|
210
212
|
|
|
211
213
|
# -------------------- api -> CheckpointTuple ----------------------
|
|
212
214
|
def _to_tuple(self, node: Dict[str, Any]) -> CheckpointTuple:
|
|
@@ -378,4 +380,4 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
378
380
|
try:
|
|
379
381
|
yield saver
|
|
380
382
|
finally:
|
|
381
|
-
await
|
|
383
|
+
await saver._client.aclose()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-lab-sdk
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.13
|
|
4
4
|
Summary: SDK для работы с Agent Lab
|
|
5
5
|
Author-email: Andrew Ohurtsov <andermirik@yandex.com>
|
|
6
6
|
License: Proprietary and Confidential — All Rights Reserved
|
|
@@ -23,6 +23,8 @@ Requires-Dist: langgraph~=0.4.1
|
|
|
23
23
|
Requires-Dist: langchain_gigachat
|
|
24
24
|
Requires-Dist: prometheus-client
|
|
25
25
|
Requires-Dist: langchain
|
|
26
|
+
Requires-Dist: httpx~=0.27.2
|
|
27
|
+
Requires-Dist: orjson>=3.9.7
|
|
26
28
|
Dynamic: license-file
|
|
27
29
|
|
|
28
30
|
# Agent Lab SDK
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
agent_lab_sdk/__init__.py,sha256=1Dlmv-wuz1QuciymKtYtX7jXzr_fkeGTe7aENfEDl3E,108
|
|
2
2
|
agent_lab_sdk/langgraph/checkpoint/__init__.py,sha256=DnKwR1LwbaQ3qhb124lE-tnojrUIVcCdNzHEHwgpL5M,86
|
|
3
|
-
agent_lab_sdk/langgraph/checkpoint/agw_saver.py,sha256=
|
|
3
|
+
agent_lab_sdk/langgraph/checkpoint/agw_saver.py,sha256=2jCs7izQZ3RBV-lBBtITQKP8EASPDseNOcrqNCmejho,13727
|
|
4
4
|
agent_lab_sdk/llm/__init__.py,sha256=Yo9MbYdHS1iX05A9XiJGwWN1Hm4IARGav9mNFPrtDeA,376
|
|
5
5
|
agent_lab_sdk/llm/agw_token_manager.py,sha256=_bPPI8muaEa6H01P8hHQOJHiiivaLd8N_d3OT9UT_80,4787
|
|
6
6
|
agent_lab_sdk/llm/gigachat_token_manager.py,sha256=TPA8cb0ypdWtRTI5C7GItL9jbLt93vR-Ijf2yMrOytQ,7921
|
|
@@ -12,8 +12,8 @@ agent_lab_sdk/schema/__init__.py,sha256=s91PH3Fj1eOq75gtOTiObSDiQdtpixg5Nhs3isBm
|
|
|
12
12
|
agent_lab_sdk/schema/log_message.py,sha256=nadi6lZGRuDSPmfbYs9QPpRJUT9Pfy8Y7pGCvyFF5Mw,638
|
|
13
13
|
agent_lab_sdk/storage/__init__.py,sha256=ik1_v1DMTwehvcAEXIYxuvLuCjJCa3y5qAuJqoQpuSA,81
|
|
14
14
|
agent_lab_sdk/storage/storage.py,sha256=ELpt7GRwFD-aWa6ctinfA_QwcvzWLvKS0Wz8FlxVqAs,2075
|
|
15
|
-
agent_lab_sdk-0.1.
|
|
16
|
-
agent_lab_sdk-0.1.
|
|
17
|
-
agent_lab_sdk-0.1.
|
|
18
|
-
agent_lab_sdk-0.1.
|
|
19
|
-
agent_lab_sdk-0.1.
|
|
15
|
+
agent_lab_sdk-0.1.13.dist-info/licenses/LICENSE,sha256=_TRXHkF3S9ilWBPdZcHLI_S-PRjK0L_SeOb2pcPAdV4,417
|
|
16
|
+
agent_lab_sdk-0.1.13.dist-info/METADATA,sha256=i_f36cFwJR4DqdxPp2KwULIsYHqvwdZBjR9qkTZxaiI,1807
|
|
17
|
+
agent_lab_sdk-0.1.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
18
|
+
agent_lab_sdk-0.1.13.dist-info/top_level.txt,sha256=E1efqkJ89KNmPBWdLzdMHeVtH0dYyCo4fhnSb81_15I,14
|
|
19
|
+
agent_lab_sdk-0.1.13.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|