griptape_cloud
Adapted from the Griptape AI Framework documentation.
__all__ = ['GriptapeCloudRulesetDriver']
module-attribute
Bases:
BaseRulesetDriver
Attributes
Name | Type | Description |
---|---|---|
ruleset_id | Optional[str] | The ID of the Thread to store the conversation memory in. If not provided, the driver will attempt to retrieve the ID from the environment variable GT_CLOUD_THREAD_ID . If that is not set, a new Thread will be created. |
base_url | str | The base URL of the Gen AI Builder API. Defaults to the value of the environment variable GT_CLOUD_BASE_URL or https://cloud.griptape.ai . |
api_key | Optional[str] | The API key to use for authenticating with the Gen AI Builder API. If not provided, the driver will attempt to retrieve the API key from the environment variable GT_CLOUD_API_KEY . |
Raises
Source Code in griptape/drivers/ruleset/griptape_cloud_ruleset_driver.py
@define(kw_only=True) class GriptapeCloudRulesetDriver(BaseRulesetDriver): """A driver for storing conversation memory in the Gen AI Builder. Attributes: ruleset_id: The ID of the Thread to store the conversation memory in. If not provided, the driver will attempt to retrieve the ID from the environment variable `GT_CLOUD_THREAD_ID`. If that is not set, a new Thread will be created. base_url: The base URL of the Gen AI Builder API. Defaults to the value of the environment variable `GT_CLOUD_BASE_URL` or `https://cloud.griptape.ai`. api_key: The API key to use for authenticating with the Gen AI Builder API. If not provided, the driver will attempt to retrieve the API key from the environment variable `GT_CLOUD_API_KEY`. Raises: ValueError: If `api_key` is not provided. """ ruleset_id: Optional[str] = field( default=None, metadata={"serializable": True}, ) base_url: str = field( default=Factory(lambda: os.getenv("GT_CLOUD_BASE_URL", "https://cloud.griptape.ai")), ) api_key: Optional[str] = field(default=Factory(lambda: os.getenv("GT_CLOUD_API_KEY"))) headers: dict = field( default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), init=False, ) @api_key.validator # pyright: ignore[reportAttributeAccessIssue, reportOptionalMemberAccess] def validate_api_key(self, _: Attribute, value: Optional[str]) -> str: if value is None: raise ValueError(f"{self.__class__.__name__} requires an API key") return value def load(self, ruleset_name: str) -> tuple[list[BaseRule], dict[str, Any]]: """Load the ruleset from Gen AI Builder, using the ruleset name as an alias if ruleset_id is not provided.""" ruleset = None if self.ruleset_id is not None: res = self._call_api("get", f"/rulesets/{self.ruleset_id}", raise_for_status=False) if res.status_code == 200: ruleset = res.json() # use name as 'alias' to get ruleset if ruleset is None: res = self._call_api("get", f"/rulesets?alias={ruleset_name}").json() if res.get("rulesets"): ruleset = res["rulesets"][0] # no ruleset by name or ruleset_id if ruleset is None: if self.raise_not_found: raise ValueError(f"No ruleset found with alias: {ruleset_name} or ruleset_id: {self.ruleset_id}") return [], {} rules = self._call_api("get", f"/rules?ruleset_id={ruleset['ruleset_id']}").json().get("rules", []) for rule in rules: rule["metadata"] = dict_merge(rule.get("metadata", {}), {"griptape_cloud_rule_id": rule["rule_id"]}) return [self._get_rule(rule["rule"], rule["metadata"]) for rule in rules], ruleset.get("metadata", {}) def _get_url(self, path: str) -> str: path = path.lstrip("/") return griptape_cloud_url(self.base_url, f"api/{path}") def _call_api(self, method: str, path: str, *, raise_for_status: bool = True) -> requests.Response: res = requests.request(method, self._get_url(path), headers=self.headers) if raise_for_status: res.raise_for_status() return res
api_key = field(default=Factory(lambda: os.getenv('GT_CLOUD_API_KEY')))
class-attribute instance-attributebase_url = field(default=Factory(lambda: os.getenv('GT_CLOUD_BASE_URL', 'https://cloud.griptape.ai')))
class-attribute instance-attributeheaders = field(default=Factory(lambda self: {'Authorization': f'Bearer {self.api_key}'}, takes_self=True), init=False)
class-attribute instance-attributeruleset_id = field(default=None, metadata={'serializable': True})
class-attribute instance-attribute
_call_api(method, path, *, raise_for_status=True)
Source Code in griptape/drivers/ruleset/griptape_cloud_ruleset_driver.py
def _call_api(self, method: str, path: str, *, raise_for_status: bool = True) -> requests.Response: res = requests.request(method, self._get_url(path), headers=self.headers) if raise_for_status: res.raise_for_status() return res
_get_url(path)
Source Code in griptape/drivers/ruleset/griptape_cloud_ruleset_driver.py
def _get_url(self, path: str) -> str: path = path.lstrip("/") return griptape_cloud_url(self.base_url, f"api/{path}")
load(ruleset_name)
Source Code in griptape/drivers/ruleset/griptape_cloud_ruleset_driver.py
def load(self, ruleset_name: str) -> tuple[list[BaseRule], dict[str, Any]]: """Load the ruleset from Gen AI Builder, using the ruleset name as an alias if ruleset_id is not provided.""" ruleset = None if self.ruleset_id is not None: res = self._call_api("get", f"/rulesets/{self.ruleset_id}", raise_for_status=False) if res.status_code == 200: ruleset = res.json() # use name as 'alias' to get ruleset if ruleset is None: res = self._call_api("get", f"/rulesets?alias={ruleset_name}").json() if res.get("rulesets"): ruleset = res["rulesets"][0] # no ruleset by name or ruleset_id if ruleset is None: if self.raise_not_found: raise ValueError(f"No ruleset found with alias: {ruleset_name} or ruleset_id: {self.ruleset_id}") return [], {} rules = self._call_api("get", f"/rules?ruleset_id={ruleset['ruleset_id']}").json().get("rules", []) for rule in rules: rule["metadata"] = dict_merge(rule.get("metadata", {}), {"griptape_cloud_rule_id": rule["rule_id"]}) return [self._get_rule(rule["rule"], rule["metadata"]) for rule in rules], ruleset.get("metadata", {})
validateapi_key(, value)
Source Code in griptape/drivers/ruleset/griptape_cloud_ruleset_driver.py
@api_key.validator # pyright: ignore[reportAttributeAccessIssue, reportOptionalMemberAccess] def validate_api_key(self, _: Attribute, value: Optional[str]) -> str: if value is None: raise ValueError(f"{self.__class__.__name__} requires an API key") return value
Could this page be better? Report a problem or suggest an addition!