agent-lab-sdk 0.1.11__py3-none-any.whl → 0.1.12__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 +22 -21
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.12.dist-info}/METADATA +3 -1
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.12.dist-info}/RECORD +6 -6
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.12.dist-info}/WHEEL +0 -0
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.12.dist-info}/licenses/LICENSE +0 -0
- {agent_lab_sdk-0.1.11.dist-info → agent_lab_sdk-0.1.12.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,13 +51,12 @@ 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
|
-
|
|
59
|
-
self.loop = asyncio.get_running_loop()
|
|
60
|
-
|
|
59
|
+
|
|
61
60
|
self.headers: Dict[str, str] = {
|
|
62
61
|
"Accept": "application/json",
|
|
63
62
|
"Content-Type": "application/json",
|
|
@@ -66,12 +65,20 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
66
65
|
self.headers.update(extra_headers)
|
|
67
66
|
if api_key:
|
|
68
67
|
self.headers["Authorization"] = f"Bearer {api_key}"
|
|
68
|
+
|
|
69
|
+
self._client = httpx.AsyncClient(
|
|
70
|
+
base_url=self.base_url,
|
|
71
|
+
headers=self.headers,
|
|
72
|
+
timeout=self.timeout,
|
|
73
|
+
verify=verify,
|
|
74
|
+
trust_env=True
|
|
75
|
+
)
|
|
69
76
|
|
|
70
77
|
async def __aenter__(self): # noqa: D401
|
|
71
78
|
return self
|
|
72
79
|
|
|
73
80
|
async def __aexit__(self, exc_type, exc, tb): # noqa: D401
|
|
74
|
-
await
|
|
81
|
+
await self._client.aclose()
|
|
75
82
|
|
|
76
83
|
# ----------------------- universal dump/load ---------------------
|
|
77
84
|
# def _safe_dump(self, obj: Any) -> Any:
|
|
@@ -89,15 +96,15 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
89
96
|
# 1) bytes → str
|
|
90
97
|
s = dumped.decode()
|
|
91
98
|
# 2) str JSON → python (list/dict/scalar)
|
|
92
|
-
return
|
|
93
|
-
except (UnicodeDecodeError,
|
|
99
|
+
return orjson.loads(s)
|
|
100
|
+
except (UnicodeDecodeError, orjson.JSONDecodeError):
|
|
94
101
|
# не UTF-8 или не JSON → base64
|
|
95
102
|
return base64.b64encode(dumped).decode()
|
|
96
103
|
return dumped
|
|
97
104
|
|
|
98
105
|
def _safe_load(self, obj: Any) -> Any:
|
|
99
106
|
if isinstance(obj, (dict, list)): # уже распакованный JSON
|
|
100
|
-
return self.serde.loads(
|
|
107
|
+
return self.serde.loads(orjson.dumps(obj))
|
|
101
108
|
if isinstance(obj, str):
|
|
102
109
|
# сначала plain JSON-строка
|
|
103
110
|
try:
|
|
@@ -195,18 +202,12 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
195
202
|
return self._safe_load(md)
|
|
196
203
|
|
|
197
204
|
# ------------------------ HTTP wrapper ---------------------------
|
|
198
|
-
async def _http(self,
|
|
199
|
-
url = f"{self.base_url}{path}"
|
|
200
|
-
hdr = {**self.headers, **kw.pop("headers", {})}
|
|
201
|
-
|
|
205
|
+
async def _http(self, method: str, path: str, **kw) -> httpx.Response:
|
|
202
206
|
if "json" in kw:
|
|
203
207
|
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
|
-
)
|
|
208
|
+
logger.info(orjson.dumps(payload).decode())
|
|
209
|
+
|
|
210
|
+
return await self._client.request(method, path, **kw)
|
|
210
211
|
|
|
211
212
|
# -------------------- api -> CheckpointTuple ----------------------
|
|
212
213
|
def _to_tuple(self, node: Dict[str, Any]) -> CheckpointTuple:
|
|
@@ -378,4 +379,4 @@ class AsyncAGWCheckpointSaver(BaseCheckpointSaver):
|
|
|
378
379
|
try:
|
|
379
380
|
yield saver
|
|
380
381
|
finally:
|
|
381
|
-
await
|
|
382
|
+
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.12
|
|
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=0A5shpjAvkCTHcRlUWMrXJCOLpsXGIpg5FPqRZapNaI,13688
|
|
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.12.dist-info/licenses/LICENSE,sha256=_TRXHkF3S9ilWBPdZcHLI_S-PRjK0L_SeOb2pcPAdV4,417
|
|
16
|
+
agent_lab_sdk-0.1.12.dist-info/METADATA,sha256=cSLJxrOWJOZP9aDEHJFyyQMtKDiPsib6VKY0YLT_a_E,1807
|
|
17
|
+
agent_lab_sdk-0.1.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
18
|
+
agent_lab_sdk-0.1.12.dist-info/top_level.txt,sha256=E1efqkJ89KNmPBWdLzdMHeVtH0dYyCo4fhnSb81_15I,14
|
|
19
|
+
agent_lab_sdk-0.1.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|