glaip-sdk 0.7.7__py3-none-any.whl → 0.7.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.
@@ -0,0 +1,80 @@
1
+ """Guardrails package for content filtering and safety checks.
2
+
3
+ This package provides modular guardrail engines and managers for filtering
4
+ harmful content in AI agent interactions. All components support lazy loading
5
+ from aip-agents to maintain Principle VII compliance.
6
+
7
+ Authors:
8
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
9
+ """
10
+
11
+ from enum import StrEnum
12
+ from typing import TYPE_CHECKING, Any
13
+
14
+ if TYPE_CHECKING:
15
+ from aip_agents.guardrails.engines.nemo import NemoGuardrailEngine
16
+ from aip_agents.guardrails.engines.phrase_matcher import PhraseMatcherEngine
17
+ from aip_agents.guardrails.manager import GuardrailManager
18
+ from aip_agents.guardrails.schemas import GuardrailMode
19
+
20
+
21
+ class ImportableName(StrEnum):
22
+ """Names of the importable attributes."""
23
+
24
+ GUARDRAIL_MANAGER = "GuardrailManager"
25
+ PHRASE_MATCHER_ENGINE = "PhraseMatcherEngine"
26
+ NEMO_GUARDRAIL_ENGINE = "NemoGuardrailEngine"
27
+ GUARDRAIL_MODE = "GuardrailMode"
28
+
29
+
30
+ # Lazy loading support - components are only imported when actually used
31
+ _LAZY_IMPORTS = {}
32
+
33
+
34
+ def __getattr__(name: str) -> Any:
35
+ """Lazy import to avoid eager loading of optional aip-agents dependency.
36
+
37
+ This function is called by Python when an attribute is not found in the module.
38
+ It performs the import from aip_agents.guardrails at runtime.
39
+
40
+ Args:
41
+ name: The name of the attribute to get.
42
+
43
+ Returns:
44
+ The attribute value from aip_agents.
45
+
46
+ Raises:
47
+ AttributeError: If the attribute doesn't exist.
48
+ ImportError: If aip-agents is not installed but a component is accessed.
49
+ """
50
+ if name in _LAZY_IMPORTS:
51
+ return _LAZY_IMPORTS[name]
52
+
53
+ if name == ImportableName.GUARDRAIL_MANAGER:
54
+ from aip_agents.guardrails.manager import GuardrailManager # noqa: PLC0415
55
+
56
+ _LAZY_IMPORTS[name] = GuardrailManager
57
+ return GuardrailManager
58
+
59
+ if name == ImportableName.PHRASE_MATCHER_ENGINE:
60
+ from aip_agents.guardrails.engines.phrase_matcher import ( # noqa: PLC0415
61
+ PhraseMatcherEngine,
62
+ )
63
+
64
+ _LAZY_IMPORTS[name] = PhraseMatcherEngine
65
+ return PhraseMatcherEngine
66
+
67
+ if name == ImportableName.NEMO_GUARDRAIL_ENGINE:
68
+ from aip_agents.guardrails.engines.nemo import NemoGuardrailEngine # noqa: PLC0415
69
+
70
+ _LAZY_IMPORTS[name] = NemoGuardrailEngine
71
+ return NemoGuardrailEngine
72
+
73
+ if name == ImportableName.GUARDRAIL_MODE:
74
+ from aip_agents.guardrails.schemas import GuardrailMode # noqa: PLC0415
75
+
76
+ _LAZY_IMPORTS[name] = GuardrailMode
77
+ return GuardrailMode
78
+
79
+ msg = f"module {__name__!r} has no attribute {name!r}"
80
+ raise AttributeError(msg)
@@ -0,0 +1,89 @@
1
+ """Guardrail serialization logic.
2
+
3
+ This module provides functionality to serialize GuardrailManager and its engines
4
+ into the JSON format expected by the GL AIP backend. This keeps the serialization
5
+ logic within the SDK rather than polluting the core aip-agents logic.
6
+
7
+ Authors:
8
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from typing import TYPE_CHECKING, Any
14
+
15
+ if TYPE_CHECKING:
16
+ from glaip_sdk.guardrails import (
17
+ GuardrailManager,
18
+ NemoGuardrailEngine,
19
+ PhraseMatcherEngine,
20
+ )
21
+
22
+
23
+ def _serialize_phrase_matcher(engine: PhraseMatcherEngine) -> dict[str, Any]:
24
+ """Serialize a PhraseMatcherEngine configuration."""
25
+ config: dict[str, Any] = {}
26
+
27
+ # Extract config from BaseGuardrailEngineConfig
28
+ if hasattr(engine, "config") and engine.config:
29
+ config.update(engine.config.model_dump())
30
+
31
+ # Extract specific fields
32
+ if hasattr(engine, "banned_phrases"):
33
+ config["banned_phrases"] = engine.banned_phrases
34
+
35
+ return config
36
+
37
+
38
+ def _serialize_nemo(engine: NemoGuardrailEngine) -> dict[str, Any]:
39
+ """Serialize a NemoGuardrailEngine configuration."""
40
+ config: dict[str, Any] = {}
41
+
42
+ # Extract config from BaseGuardrailEngineConfig
43
+ if hasattr(engine, "config") and engine.config:
44
+ config.update(engine.config.model_dump())
45
+
46
+ # Extract specific fields
47
+ nemo_fields = [
48
+ "topic_safety_mode",
49
+ "allowed_topics",
50
+ "denied_topics",
51
+ "include_core_restrictions",
52
+ "core_restriction_categories",
53
+ "config_dict",
54
+ "denial_phrases",
55
+ ]
56
+ for field in nemo_fields:
57
+ if hasattr(engine, field):
58
+ val = getattr(engine, field)
59
+ if val is not None:
60
+ config[field] = val
61
+
62
+ return config
63
+
64
+
65
+ def serialize_guardrail_manager(manager: GuardrailManager) -> dict[str, Any]:
66
+ """Serialize a GuardrailManager into the backend JSON format.
67
+
68
+ Args:
69
+ manager: The GuardrailManager instance to serialize.
70
+
71
+ Returns:
72
+ A dictionary matching the agent_config.guardrails schema.
73
+ """
74
+ from glaip_sdk.guardrails import NemoGuardrailEngine, PhraseMatcherEngine # noqa: PLC0415
75
+
76
+ engines_config = []
77
+
78
+ if hasattr(manager, "engines"):
79
+ for engine in manager.engines:
80
+ if isinstance(engine, PhraseMatcherEngine):
81
+ engines_config.append({"type": "phrase_matcher", "config": _serialize_phrase_matcher(engine)})
82
+ elif isinstance(engine, NemoGuardrailEngine):
83
+ engines_config.append({"type": "nemo", "config": _serialize_nemo(engine)})
84
+ else:
85
+ # Fallback for unknown engines
86
+ continue
87
+
88
+ enabled = getattr(manager, "enabled", True)
89
+ return {"enabled": enabled, "engines": engines_config}
@@ -57,6 +57,7 @@ AGENT_FIELD_RULES: Mapping[str, FieldRule] = {
57
57
  "timeout": FieldRule(cli_managed_create=True, cli_managed_update=True),
58
58
  # Fields requiring sanitisation before sending to the API
59
59
  "agent_config": FieldRule(requires_sanitization=True),
60
+ "guardrail": FieldRule(requires_sanitization=True),
60
61
  }
61
62
 
62
63
 
@@ -0,0 +1,34 @@
1
+ """Guardrail payload schemas for API communication.
2
+
3
+ Authors:
4
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
5
+ """
6
+
7
+ from collections.abc import Mapping, Sequence
8
+ from typing import Any
9
+
10
+ from pydantic import BaseModel, Field
11
+
12
+
13
+ class GuardrailEnginePayload(BaseModel):
14
+ """Payload schema for a single guardrail engine configuration.
15
+
16
+ This model defines the structure for individual safety engines (e.g., phrase_matcher, nemo)
17
+ when communicating with the GL AIP backend.
18
+ """
19
+
20
+ type: str = Field(..., description="The type of guardrail engine (e.g., 'phrase_matcher', 'nemo')")
21
+ config: Mapping[str, Any] = Field(..., description="Engine-specific configuration parameters")
22
+
23
+
24
+ class GuardrailPayload(BaseModel):
25
+ """Payload schema for global guardrail settings.
26
+
27
+ This model acts as the container for all guardrail configurations within the agent_config.
28
+ """
29
+
30
+ enabled: bool = Field(default=True, description="Global toggle to enable or disable all guardrails")
31
+ engines: Sequence[GuardrailEnginePayload] = Field(
32
+ default_factory=list,
33
+ description="List of configured guardrail engines",
34
+ )
@@ -387,6 +387,7 @@ class LangGraphRunner(BaseRunner):
387
387
  agents=sub_agent_instances if sub_agent_instances else None,
388
388
  tool_configs=tool_configs if tool_configs else None,
389
389
  tool_output_manager=tool_output_manager,
390
+ guardrail=agent.guardrail,
390
391
  **agent_config_params,
391
392
  **agent_config_kwargs,
392
393
  )
glaip_sdk/tools/base.py CHANGED
@@ -387,12 +387,22 @@ class Tool:
387
387
  if not self._client:
388
388
  raise RuntimeError(_CLIENT_NOT_AVAILABLE_MSG)
389
389
 
390
+ # Handle both Client (has .tools) and ToolClient (direct methods)
391
+ # Priority: Check if client has a 'tools' attribute (Client instance)
392
+ # Otherwise, use client directly (ToolClient instance)
393
+ if hasattr(self._client, "tools") and self._client.tools is not None:
394
+ # Main Client instance - use the tools sub-client
395
+ tools_client = self._client.tools
396
+ else:
397
+ # ToolClient instance - use directly
398
+ tools_client = self._client
399
+
390
400
  # Check if file upload is requested
391
401
  if "file" in kwargs:
392
402
  file_path = kwargs.pop("file")
393
- response = self._client.tools.update_via_file(self._id, file_path, **kwargs)
403
+ response = tools_client.update_tool_via_file(self._id, file_path, **kwargs)
394
404
  else:
395
- response = self._client.tools.update(tool_id=self._id, **kwargs)
405
+ response = tools_client.update_tool(tool_id=self._id, **kwargs)
396
406
 
397
407
  # Update local properties from response
398
408
  if hasattr(response, "name") and response.name:
@@ -416,7 +426,17 @@ class Tool:
416
426
  if not self._client:
417
427
  raise RuntimeError(_CLIENT_NOT_AVAILABLE_MSG)
418
428
 
419
- self._client.tools.delete(tool_id=self._id)
429
+ # Handle both Client (has .tools) and ToolClient (direct methods)
430
+ # Priority: Check if client has a 'tools' attribute (Client instance)
431
+ # Otherwise, use client directly (ToolClient instance)
432
+ if hasattr(self._client, "tools") and self._client.tools is not None:
433
+ # Main Client instance - use the tools sub-client
434
+ tools_client = self._client.tools
435
+ else:
436
+ # ToolClient instance - use directly
437
+ tools_client = self._client
438
+
439
+ tools_client.delete_tool(self._id)
420
440
  self._id = None
421
441
  self._client = None
422
442
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: glaip-sdk
3
- Version: 0.7.7
3
+ Version: 0.7.12
4
4
  Summary: Python SDK and CLI for GL AIP (GDP Labs AI Agent Package) - Build, run, and manage AI agents
5
5
  Author-email: Raymond Christopher <raymond.christopher@gdplabs.id>
6
6
  License: MIT
@@ -20,11 +20,13 @@ Requires-Dist: gllm-core-binary>=0.1.0
20
20
  Requires-Dist: langchain-core>=0.3.0
21
21
  Requires-Dist: gllm-tools-binary>=0.1.3
22
22
  Provides-Extra: local
23
- Requires-Dist: aip-agents-binary[local]>=0.5.21; (python_version >= "3.11" and python_version < "3.13") and extra == "local"
23
+ Requires-Dist: aip-agents-binary[local]>=0.5.23; (python_version >= "3.11" and python_version < "3.13") and extra == "local"
24
24
  Provides-Extra: memory
25
- Requires-Dist: aip-agents-binary[memory]>=0.5.21; (python_version >= "3.11" and python_version < "3.13") and extra == "memory"
25
+ Requires-Dist: aip-agents-binary[memory]>=0.5.23; (python_version >= "3.11" and python_version < "3.13") and extra == "memory"
26
26
  Provides-Extra: privacy
27
- Requires-Dist: aip-agents-binary[privacy]>=0.5.21; (python_version >= "3.11" and python_version < "3.13") and extra == "privacy"
27
+ Requires-Dist: aip-agents-binary[privacy]>=0.5.23; (python_version >= "3.11" and python_version < "3.13") and extra == "privacy"
28
+ Provides-Extra: guardrails
29
+ Requires-Dist: aip-agents-binary[guardrails]>=0.5.23; (python_version >= "3.11" and python_version < "3.13") and extra == "guardrails"
28
30
  Provides-Extra: dev
29
31
  Requires-Dist: pytest>=7.0.0; extra == "dev"
30
32
  Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
@@ -1,16 +1,16 @@
1
1
  glaip_sdk/__init__.py,sha256=YpePGKbCjwqCwvb8yig8cc64z876ch1oSlTlu-CiWfs,1722
2
2
  glaip_sdk/_version.py,sha256=5CHGCxx_36fgmMWuEx6jJ2CzzM-i9eBFyQWFwBi23XE,2259
3
- glaip_sdk/branding.py,sha256=tLqYCIHMkUf8p2smpuAGNptwaKUN38G4mlh0A0DOl_w,7823
3
+ glaip_sdk/branding.py,sha256=uF_-c-cg_rFjzJr0NibLiE1Dvv0DpXBXN63wl-Ej88c,11651
4
4
  glaip_sdk/exceptions.py,sha256=iAChFClkytXRBLP0vZq1_YjoZxA9i4m4bW1gDLiGR1g,2321
5
5
  glaip_sdk/icons.py,sha256=J5THz0ReAmDwIiIooh1_G3Le-mwTJyEjhJDdJ13KRxM,524
6
6
  glaip_sdk/rich_components.py,sha256=44Z0V1ZQleVh9gUDGwRR5mriiYFnVGOhm7fFxZYbP8c,4052
7
7
  glaip_sdk/agents/__init__.py,sha256=VfYov56edbWuySXFEbWJ_jLXgwnFzPk1KB-9-mfsUCc,776
8
- glaip_sdk/agents/base.py,sha256=GQnzCw2cqlrbxwdoWFfhBcBlEDgubY4tlD6gr1b3zps,44539
8
+ glaip_sdk/agents/base.py,sha256=6528sEC2RGwOn0sWqiKiqf5Y_uHEuleN0nT42XlaC0U,46317
9
9
  glaip_sdk/cli/__init__.py,sha256=xCCfuF1Yc7mpCDcfhHZTX0vizvtrDSLeT8MJ3V7m5A0,156
10
- glaip_sdk/cli/account_store.py,sha256=TK4iTV93Q1uD9mCY_2ZMT6EazHKU2jX0qhgWfEM4V-4,18459
10
+ glaip_sdk/cli/account_store.py,sha256=u_memecwEQssustZs2wYBrHbEmKUlDfmmL-zO1F3n3A,19034
11
11
  glaip_sdk/cli/agent_config.py,sha256=YAbFKrTNTRqNA6b0i0Q3pH-01rhHDRi5v8dxSFwGSwM,2401
12
12
  glaip_sdk/cli/auth.py,sha256=bqOHMGIOCg3KXssme3uJBBjEbK0rCEppQ6oq-gJ-hzA,24276
13
- glaip_sdk/cli/config.py,sha256=s0_xBB1e5YE4I_Wc4q-ayY3dwsBU1JrHAF-8ySlim7Y,3040
13
+ glaip_sdk/cli/config.py,sha256=hFKQSdqELQZLKBuFnhEirNLDyPJwEmpQuD8nHuWxokg,3051
14
14
  glaip_sdk/cli/constants.py,sha256=zqcVtzfj6huW97gbCmhkFqntge1H-c1vnkGqTazADgU,895
15
15
  glaip_sdk/cli/context.py,sha256=--Y5vc6lgoAV7cRoUAr9UxSQaLmkMg29FolA7EwoRqM,3803
16
16
  glaip_sdk/cli/display.py,sha256=ojgWdGeD5KUnGOmWNqqK4JP-1EaWHWX--DWze3BmIz0,12137
@@ -23,6 +23,7 @@ glaip_sdk/cli/mcp_validators.py,sha256=cwbz7p_p7_9xVuuF96OBQOdmEgo5UObU6iWWQ2X03
23
23
  glaip_sdk/cli/pager.py,sha256=TmiMDNpUMuZju7QJ6A_ITqIoEf8Dhv8U6mTXx2Fga1k,7935
24
24
  glaip_sdk/cli/resolution.py,sha256=AGvv7kllLcuvk_jdaArJqH3lId4IDEXpHceRZwy14xY,2448
25
25
  glaip_sdk/cli/rich_helpers.py,sha256=kO47N8e506rxrN6Oc9mbAWN3Qb536oQPWZy1s9A616g,819
26
+ glaip_sdk/cli/tui_settings.py,sha256=ey9bSlolEj3_SMmjVVV_PY0FkfH1psAFPOl03NlykvI,3867
26
27
  glaip_sdk/cli/update_notifier.py,sha256=0zpWxr4nSyz0tiLWyC7EEO2deAnVmsRcVlMV79G2QMI,18049
27
28
  glaip_sdk/cli/validators.py,sha256=k4J2ACYJPF6UmWJfENt9OHWdp4RNArVxR3hoeqauO88,5629
28
29
  glaip_sdk/cli/commands/__init__.py,sha256=6Z3ASXDut0lAbUX_umBFtxPzzFyqoiZfVeTahThFu1A,219
@@ -76,22 +77,24 @@ glaip_sdk/cli/slash/accounts_controller.py,sha256=SceJlc2F2ZdlSDkuWO3Js3akL89bVt
76
77
  glaip_sdk/cli/slash/accounts_shared.py,sha256=Mq5HxlI0YsVEQ0KKISWvyBZhzOFFWCzwRbhF5xwvUbM,2626
77
78
  glaip_sdk/cli/slash/agent_session.py,sha256=tuVOme-NbEyr6rwJvsBEKZYWQmsaRf4piJeRvIGu0ns,11384
78
79
  glaip_sdk/cli/slash/prompt.py,sha256=q4f1c2zr7ZMUeO6AgOBF2Nz4qgMOXrVPt6WzPRQMbAM,8501
79
- glaip_sdk/cli/slash/remote_runs_controller.py,sha256=a5X5rYgb9l6dHhvTewRUCj-hAo7mKRnuM_MwGvxs8jI,21363
80
- glaip_sdk/cli/slash/session.py,sha256=Zn2hXND_Tfameh_PI8g4VIMd7GPWxwhtPNMN9p6cF7M,65081
80
+ glaip_sdk/cli/slash/remote_runs_controller.py,sha256=iLl4a-mu9QU7dcedgEILewPtDIVtFUJkbKGtcx1F66U,21445
81
+ glaip_sdk/cli/slash/session.py,sha256=YJ7UIeWyged1znmBVnGweOzH2l4NKeF5lT9VGdDvQWo,75998
81
82
  glaip_sdk/cli/slash/tui/__init__.py,sha256=oBUzeoslYwPKVlhqhgg4I7480b77vQNc9ec0NgdTC1s,977
82
- glaip_sdk/cli/slash/tui/accounts.tcss,sha256=BCjIuTetmVjydv6DCliY38Cze2LUEu7IY44sL5nIuLU,1194
83
- glaip_sdk/cli/slash/tui/accounts_app.py,sha256=6ihnAnzKD49eeXYW3dYWUAdUEyoXNFwoEoi3kS3WtXM,35999
83
+ glaip_sdk/cli/slash/tui/accounts.tcss,sha256=eqFMAuN3PI3YVNDUbrCQpO1-Ko5WZpempPq75_Aejq0,2159
84
+ glaip_sdk/cli/slash/tui/accounts_app.py,sha256=thS4r1NELB9K_OoEI4uJdDGSkRyhzek_2Y0k0yoPvss,71799
84
85
  glaip_sdk/cli/slash/tui/background_tasks.py,sha256=SAe1mV2vXB3mJcSGhelU950vf8Lifjhws9iomyIVFKw,2422
85
- glaip_sdk/cli/slash/tui/clipboard.py,sha256=HL_RWIdONyRmDtTYuDzxJTS_mRcLxuR37Ac9Ug5nh40,4730
86
- glaip_sdk/cli/slash/tui/context.py,sha256=03mo2kgvpyUcNBYz7G2Uyu7X3FJlSUzVoP5Rt9MCZZY,2141
86
+ glaip_sdk/cli/slash/tui/clipboard.py,sha256=7fEshhTwHYaj-n7n0W0AsWTs8W0RLZw_9luXxrFTrtw,6227
87
+ glaip_sdk/cli/slash/tui/context.py,sha256=v7XOdRtk5AQ4ZE-QWUhc1s9xVROu8_JjdjVnKx0X9p8,3270
87
88
  glaip_sdk/cli/slash/tui/keybind_registry.py,sha256=_rK05BxTxNudYc4iJ9gDxpgeUkjDAq8rarIT-9A-jyM,6739
88
89
  glaip_sdk/cli/slash/tui/loading.py,sha256=nW5pv_Tnl9FUOPR3Qf2O5gt1AGHSo3b5-Uofg34F6AE,1909
89
- glaip_sdk/cli/slash/tui/remote_runs_app.py,sha256=RCrI-c5ilKV6Iy1lz2Aok9xo2Ou02vqcXACMXTdodnE,24716
90
- glaip_sdk/cli/slash/tui/terminal.py,sha256=iC31XChTL34gXY6vXdSIX3HmD36tuA9EYTPZ2Sn4uOI,12108
91
- glaip_sdk/cli/slash/tui/toast.py,sha256=LP_myZwgnrdowrRxGK24lMlx7iZt7iOwFhrbc4NW0DY,3493
90
+ glaip_sdk/cli/slash/tui/remote_runs_app.py,sha256=DOmUHeaBg8puERn-htDnYAJgcUHETl457HamQkd0nxY,28550
91
+ glaip_sdk/cli/slash/tui/terminal.py,sha256=ZAC3sB17TGpl-GFeRVm_nI8DQTN3pyti3ynlZ41wT_A,12323
92
+ glaip_sdk/cli/slash/tui/toast.py,sha256=QLL6BBBMjEagzpSEPf3PNBNzQG_EdN5JeAigk66AjVs,11920
93
+ glaip_sdk/cli/slash/tui/layouts/__init__.py,sha256=KT77pZHa7Wz84QlHYT2mfhQ_AXUA-T0eHv_HtAvc1ac,473
94
+ glaip_sdk/cli/slash/tui/layouts/harlequin.py,sha256=pR5BHdWCVK0QZCyr8q6O-vCL_MTZKjMVASdYzkFUkt4,5122
92
95
  glaip_sdk/cli/slash/tui/theme/__init__.py,sha256=rtM2ik83YNCRcI1qh_Sf3rnxco2OvCNNT3NbHY6cLvw,432
93
96
  glaip_sdk/cli/slash/tui/theme/catalog.py,sha256=G52eU3h8YI9D8XUALVg1KVZ4Lq65VnZdgPS3F_P7XLE,2544
94
- glaip_sdk/cli/slash/tui/theme/manager.py,sha256=X600J_WIBM1CHgsQeMFGFPuaVAFCINFcBXFWmeD4B5Q,2707
97
+ glaip_sdk/cli/slash/tui/theme/manager.py,sha256=LBnxEMIwz-8cAlZGYk5tIoAJbOJyGYsmDlyuGJ-LlX4,3945
95
98
  glaip_sdk/cli/slash/tui/theme/tokens.py,sha256=ympMRny_d-gHtmnPR-lmNZ-C9SGBy2q-MH81l0L1h-Y,1423
96
99
  glaip_sdk/cli/transcript/__init__.py,sha256=yiYHyNtebMCu3BXu56Xm5RBC2tDc865q8UGPnoe6QRs,920
97
100
  glaip_sdk/cli/transcript/cache.py,sha256=Wi1uln6HP1U6F-MRTrfnxi9bn6XJTxwWXhREIRPoMqQ,17439
@@ -108,7 +111,7 @@ glaip_sdk/client/base.py,sha256=BhNaC2TJJ2jVWRTYmfxD3WjYgAyIuWNz9YURdNXXjJo,1824
108
111
  glaip_sdk/client/hitl.py,sha256=dO_q-43miI0oGrJDyUrZ9MbettQp0hai4kjvPaYm010,3545
109
112
  glaip_sdk/client/main.py,sha256=FqN-JIoCTN1pV-3O-ElIbe8t_cWYUDV4S0N8W018De0,9362
110
113
  glaip_sdk/client/mcps.py,sha256=-JdaIkg0QE3egJ8p93eoOPULup8KbM2WRCcwlvqlqrA,14492
111
- glaip_sdk/client/run_rendering.py,sha256=L1mPDPQW_NLs7yi6S1dtJlnTUWVl9R9ioxVzcC8xBrU,27262
114
+ glaip_sdk/client/run_rendering.py,sha256=BKe9a_KnL58XNcGlLvbhJAZBh57e8-ykYiqp0bbS4ZE,28860
112
115
  glaip_sdk/client/schedules.py,sha256=ZfPzCYzk4YRuPkjkTTgLe5Rqa07mi-h2WmP4H91mMZ0,14113
113
116
  glaip_sdk/client/shared.py,sha256=esHlsR0LEfL-pFDaWebQjKKOLl09jsRY-2pllBUn4nU,522
114
117
  glaip_sdk/client/tools.py,sha256=NzQTIsn-bjYN9EfGWCBqqawCIVs7auaccFv7BM_3oCc,23871
@@ -117,6 +120,8 @@ glaip_sdk/client/payloads/agent/__init__.py,sha256=gItEH2zt2secVq6n60oGA-ztdE5mc
117
120
  glaip_sdk/client/payloads/agent/requests.py,sha256=5FuGEuypaEXlWBhB07JrDca_ecLg4bvo8mjyFBxAV9U,17139
118
121
  glaip_sdk/client/payloads/agent/responses.py,sha256=1eRMI4JAIGqTB5zY_7D9ILQDRHPXR06U7JqHSmRp3Qs,1243
119
122
  glaip_sdk/config/constants.py,sha256=Y03c6op0e7K0jTQ8bmWXhWAqsnjWxkAhWniq8Z0iEKY,1081
123
+ glaip_sdk/guardrails/__init__.py,sha256=C1gpL2himmv0FfAsR1ywuvBkwXP54-ziPeqqdAo207k,2677
124
+ glaip_sdk/guardrails/serializer.py,sha256=x4WDaGH-kmaPHnIJNi3aJjToYf4Ru_3mIh3yxSWO25U,2832
120
125
  glaip_sdk/hitl/__init__.py,sha256=hi_SwW1oBimNnSFPo9Yc-mZWVPzpytlnDWNq2h1_fPo,1572
121
126
  glaip_sdk/hitl/base.py,sha256=EUN2igzydlYZ6_qmHU46Gyk3Bk9uyalZkCJ06XMRKJ8,1484
122
127
  glaip_sdk/hitl/callback.py,sha256=icKxxa_f8lxFQuXrZVoTt6baWivFL4a4YioWG_U_8k8,1336
@@ -132,7 +137,8 @@ glaip_sdk/models/mcp.py,sha256=ti_8MUf4k7qbR1gPs9JhqhybMcLUhZxEELtHQrTv2-U,944
132
137
  glaip_sdk/models/schedule.py,sha256=gfL_b9abaWToMtnCD_iXOsmonQ1sq2dZoLcInvCzZ2o,7248
133
138
  glaip_sdk/models/tool.py,sha256=w3nL2DqyCtGgDPCd40Asi9obRGghQjLlC9Vt_p32Mpc,951
134
139
  glaip_sdk/payload_schemas/__init__.py,sha256=nTJmzwn2BbEpzZdq-8U24eVHQHxqYO3_-SABMV9lS_Q,142
135
- glaip_sdk/payload_schemas/agent.py,sha256=Nap68mI2Ba8eNGOhk79mGrYUoYUahcUJLof3DLWtVO4,3198
140
+ glaip_sdk/payload_schemas/agent.py,sha256=tQlTOuRQx4e8XUsEmSNgD8NMURzChYdYwkfKbGpK4nY,3254
141
+ glaip_sdk/payload_schemas/guardrails.py,sha256=5e0BrS1isBs9Wzuz3ktnB9YnpfZJHMIsvmS0wDH36E4,1162
136
142
  glaip_sdk/registry/__init__.py,sha256=mjvElYE-wwmbriGe-c6qy4on0ccEuWxW_EWWrSbptCw,1667
137
143
  glaip_sdk/registry/agent.py,sha256=F0axW4BIUODqnttIOzxnoS5AqQkLZ1i48FTeZNnYkhA,5203
138
144
  glaip_sdk/registry/base.py,sha256=0x2ZBhiERGUcf9mQeWlksSYs5TxDG6FxBYQToYZa5D4,4143
@@ -141,7 +147,7 @@ glaip_sdk/registry/tool.py,sha256=c0Ja4rFYMOKs_1yjDLDZxCId4IjQzprwXzX0iIL8Fio,14
141
147
  glaip_sdk/runner/__init__.py,sha256=orJ3nLR9P-n1qMaAMWZ_xRS4368YnDpdltg-bX5BlUk,2210
142
148
  glaip_sdk/runner/base.py,sha256=KIjcSAyDCP9_mn2H4rXR5gu1FZlwD9pe0gkTBmr6Yi4,2663
143
149
  glaip_sdk/runner/deps.py,sha256=Du3hr2R5RHOYCRAv7RVmx661x-ayVXIeZ8JD7ODirTA,3884
144
- glaip_sdk/runner/langgraph.py,sha256=HWzEkmkQqvAOKat3lENVf0zDaypj7HMeny5thDyprWY,33031
150
+ glaip_sdk/runner/langgraph.py,sha256=AcZPybe8Jxu1KfGQcVuHjy8X7OI36xpMBdAyjMsr9Rc,33070
145
151
  glaip_sdk/runner/logging_config.py,sha256=OrQgW23t42qQRqEXKH8U4bFg4JG5EEkUJTlbvtU65iE,2528
146
152
  glaip_sdk/runner/mcp_adapter/__init__.py,sha256=Rdttfg3N6kg3-DaTCKqaGXKByZyBt0Mwf6FV8s_5kI8,462
147
153
  glaip_sdk/runner/mcp_adapter/base_mcp_adapter.py,sha256=ic56fKgb3zgVZZQm3ClWUZi7pE1t4EVq8mOg6AM6hdA,1374
@@ -153,7 +159,7 @@ glaip_sdk/runner/tool_adapter/langchain_tool_adapter.py,sha256=SgfQM5NgKyYBs34ju
153
159
  glaip_sdk/schedules/__init__.py,sha256=Ty__lE8ta3a6O7EiEsSXliVOwA3EBLKxKRsjAJt2WUg,482
154
160
  glaip_sdk/schedules/base.py,sha256=ZRKWknoxQOYMhX8mjQ7S7oqpy6Wr0xdbzcgIrycsEQ8,9727
155
161
  glaip_sdk/tools/__init__.py,sha256=rhGzEqQFCzeMrxmikBuNrMz4PyYczwic28boDKVmoHs,585
156
- glaip_sdk/tools/base.py,sha256=tEhOHPV8bL5p59l6aB0oYPa51_12bMznQKWAzESZ1FE,16354
162
+ glaip_sdk/tools/base.py,sha256=KRaWWX5cKAvEKtBr4iSOaKQlQ973A4pNOW2KVvA1aYs,17353
157
163
  glaip_sdk/utils/__init__.py,sha256=5a1kNLtUriwd1qAT6RU083GOyABS7LMZQacDP4yS9S4,2830
158
164
  glaip_sdk/utils/agent_config.py,sha256=RhcHsSOVwOaSC2ggnPuHn36Aa0keGJhs8KGb2InvzRk,7262
159
165
  glaip_sdk/utils/bundler.py,sha256=fLumFj1MqqqGA1Mwn05v_cEKPALv3rIPEMvaURpxZ80,15171
@@ -206,8 +212,8 @@ glaip_sdk/utils/rendering/steps/format.py,sha256=Chnq7OBaj8XMeBntSBxrX5zSmrYeGcO
206
212
  glaip_sdk/utils/rendering/steps/manager.py,sha256=BiBmTeQMQhjRMykgICXsXNYh1hGsss-fH9BIGVMWFi0,13194
207
213
  glaip_sdk/utils/rendering/viewer/__init__.py,sha256=XrxmE2cMAozqrzo1jtDFm8HqNtvDcYi2mAhXLXn5CjI,457
208
214
  glaip_sdk/utils/rendering/viewer/presenter.py,sha256=mlLMTjnyeyPVtsyrAbz1BJu9lFGQSlS-voZ-_Cuugv0,5725
209
- glaip_sdk-0.7.7.dist-info/METADATA,sha256=ZmjKOkOJYka0gJNYNil9Z8BzTwzy2rMN896Wy0L3ZOI,8365
210
- glaip_sdk-0.7.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
211
- glaip_sdk-0.7.7.dist-info/entry_points.txt,sha256=NkhO6FfgX9Zrjn63GuKphf-dLw7KNJvucAcXc7P3aMk,54
212
- glaip_sdk-0.7.7.dist-info/top_level.txt,sha256=td7yXttiYX2s94-4wFhv-5KdT0rSZ-pnJRSire341hw,10
213
- glaip_sdk-0.7.7.dist-info/RECORD,,
215
+ glaip_sdk-0.7.12.dist-info/METADATA,sha256=yz1DiHtSCtTlxKsNE93PKSHWqRVDHhN-P_BUfMmUafw,8528
216
+ glaip_sdk-0.7.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
217
+ glaip_sdk-0.7.12.dist-info/entry_points.txt,sha256=NkhO6FfgX9Zrjn63GuKphf-dLw7KNJvucAcXc7P3aMk,54
218
+ glaip_sdk-0.7.12.dist-info/top_level.txt,sha256=td7yXttiYX2s94-4wFhv-5KdT0rSZ-pnJRSire341hw,10
219
+ glaip_sdk-0.7.12.dist-info/RECORD,,