From b55ffb930a36f91401ee8959545e893e71c5562e Mon Sep 17 00:00:00 2001 From: AlexBlumer Date: Wed, 12 Mar 2025 16:16:35 -0700 Subject: [PATCH 1/2] Add and document api_key and base_url to Guard.fetch_guard() --- docs/getting_started/guardrails_server.md | 13 +++++++++++++ guardrails/guard.py | 23 ++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/docs/getting_started/guardrails_server.md b/docs/getting_started/guardrails_server.md index aceecca68..aebb30b3d 100644 --- a/docs/getting_started/guardrails_server.md +++ b/docs/getting_started/guardrails_server.md @@ -132,6 +132,19 @@ validation_outcome = name_guard.validate("floofy doopy boopy") ``` +#### Guardrails >= v0.6.5 +In newer versions of Guardrails, you can directly set the URL and API key instead of using environment variables. + +```python +# Client code +from guardrails import Guard + +name_guard = Guard.fetch_guard(name="gibberish_guard", base_url="http://myserver.com", api_key="exampleKey") + +validation_outcome = name_guard.validate("floofy doopy boopy") +``` + + #### Guardrails < v0.5.9 In older versions of Guardrails, you need to set the `use_server` var in settings to True. diff --git a/guardrails/guard.py b/guardrails/guard.py index 3976773f5..6a1fafaa4 100644 --- a/guardrails/guard.py +++ b/guardrails/guard.py @@ -134,6 +134,8 @@ def __init__( description: Optional[str] = None, validators: Optional[List[ValidatorReference]] = None, output_schema: Optional[Dict[str, Any]] = None, + base_url: Optional[str] = None, + api_key: Optional[str] = None, ): """Initialize the Guard with serialized validator references and an output schema. @@ -200,11 +202,16 @@ def __init__( self._api_client: Optional[GuardrailsApiClient] = None self._allow_metrics_collection: Optional[bool] = None self._output_formatter: Optional[BaseFormatter] = None + self._api_key: Optional[str] = None + self._base_url: Optional[str] = None # Gaurdrails As A Service Initialization if settings.use_server: - api_key = os.environ.get("GUARDRAILS_API_KEY") - self._api_client = GuardrailsApiClient(api_key=api_key) + self._api_key = api_key + self._base_url = base_url + self._api_client = GuardrailsApiClient( + api_key=self._api_key, base_url=self._base_url + ) _loaded = False if _try_to_load: loaded_guard = self._api_client.fetch_guard(self.name) @@ -1244,7 +1251,6 @@ def _call_server( raise ValueError("Guard does not have an api client!") def _save(self): - api_key = os.environ.get("GUARDRAILS_API_KEY") if settings.use_server: if self.name is None: self.name = f"gr-{str(self.id)}" @@ -1255,7 +1261,9 @@ def _save(self): ) ) if not self._api_client: - self._api_client = GuardrailsApiClient(api_key=api_key) + self._api_client = GuardrailsApiClient( + api_key=self._api_key, base_url=self._base_url + ) self.upsert_guard() def to_runnable(self) -> Runnable: @@ -1332,6 +1340,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional["Guard"]: @staticmethod def fetch_guard( name: Optional[str] = None, + api_key: Optional[str] = None, + base_url: Optional[str] = None, *args, **kwargs, ): @@ -1339,10 +1349,9 @@ def fetch_guard( raise ValueError("Name must be specified to fetch a guard") settings.use_server = True - api_key = os.environ.get("GUARDRAILS_API_KEY") - api_client = GuardrailsApiClient(api_key=api_key) + api_client = GuardrailsApiClient(api_key=api_key, base_url=base_url) guard = api_client.fetch_guard(name) if guard: - return Guard(name=name, *args, **kwargs) + return Guard(name=name, base_url=base_url, api_key=api_key, *args, **kwargs) raise ValueError(f"Guard with name {name} not found") From 0f699a1b8ba15ed3092f79b23295f1537df925bf Mon Sep 17 00:00:00 2001 From: AlexBlumer Date: Mon, 17 Mar 2025 10:10:24 -0700 Subject: [PATCH 2/2] Reorder version mentions in docs --- docs/getting_started/guardrails_server.md | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/docs/getting_started/guardrails_server.md b/docs/getting_started/guardrails_server.md index aebb30b3d..5571fa2a5 100644 --- a/docs/getting_started/guardrails_server.md +++ b/docs/getting_started/guardrails_server.md @@ -120,20 +120,7 @@ A `guardrails` key is added to the response object, which includes the validatio ::: ### Advanced Client Usage -Advanced client usage is available in Python. You can point a Guard shim to the Guardrails server and use it as a normal Guard object. - -```python -# Client code -from guardrails import Guard - -name_guard = Guard.fetch_guard(name="gibberish_guard") - -validation_outcome = name_guard.validate("floofy doopy boopy") -``` - - -#### Guardrails >= v0.6.5 -In newer versions of Guardrails, you can directly set the URL and API key instead of using environment variables. +Advanced client usage is available in Python. You can point a Guard shim to the Guardrails server and use it as a normal Guard object. Default values can be set in the environment variables `GUARDRAILS_BASE_URL` for the URL and `GUARDRAILS_API_KEY` for the API key. ```python # Client code @@ -144,6 +131,8 @@ name_guard = Guard.fetch_guard(name="gibberish_guard", base_url="http://myserver validation_outcome = name_guard.validate("floofy doopy boopy") ``` +#### Guardrails < v0.6.5 +In older versions of Guardrails, you must set the URL and API key through the environment variables mentioned above. #### Guardrails < v0.5.9 In older versions of Guardrails, you need to set the `use_server` var in settings to True.