From f818a97cbf193b6cb92df256d5ba4184955be79d Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Wed, 19 Jun 2024 16:11:36 -0400 Subject: [PATCH 01/14] spawn atomic factuality guard --- guardrails_api/config.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/guardrails_api/config.py b/guardrails_api/config.py index eab62ad..1be6c49 100644 --- a/guardrails_api/config.py +++ b/guardrails_api/config.py @@ -7,5 +7,30 @@ and guards will be persisted into postgres. In that case, these guards will not be initialized. """ +from guardrails_hub import AtomicFactuality # noqa +from guardrails import AsyncGuard # noqa +from langchain_community.embeddings.sentence_transformer import ( + SentenceTransformerEmbeddings, +) -from guardrails import Guard # noqa +SOURCES = [ + "Albert Einstein Albert Einstein ( ; ; 14 March 1879\u00a0\u2013 18 April 1955) was a German-born theoretical physicist, widely acknowledged to be one of the greatest and most influential physicists of all time.", + "Einstein is best known for developing the theory of relativity, but he also made important contributions to the development of the theory of quantum mechanics.", + "Relativity and quantum mechanics are the two pillars of modern physics.", + 'His mass\u2013energy equivalence formula, which arises from relativity theory, has been dubbed "the world\'s most famous equation".', + "His work is also known for its influence on the philosophy of science.", + 'He received the 1921 Nobel Prize in Physics "for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect", a pivotal step in the development of quantum theory.', + 'His intellectual achievements and originality resulted in "Einstein" becoming synonymous with "genius".', + "Einsteinium, one of the synthetic elements in the periodic table, was named in his honor.", + "In 1905, a year sometimes described as his \"annus mirabilis\" ('miracle year'), Einstein published four groundbreaking papers.", + "These outlined the theory of the photoelectric effect, explained Brownian motion, introduced special relativity, and demonstrated mass\u2013energy equivalence.", +] + +embed_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") + +atomic_guard = AsyncGuard() +atomic_guard.use( + AtomicFactuality, + sources=SOURCES, + embedding_callable=embed_function, +) \ No newline at end of file From 21b0505d0ed5a06b8e96371d2ac2f898b4234dec Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Wed, 19 Jun 2024 17:23:14 -0400 Subject: [PATCH 02/14] fix get_llm_callable --- guardrails_api/blueprints/guards.py | 6 +++ guardrails_api/config.py | 53 +++++++++++++----------- guardrails_api/utils/get_llm_callable.py | 34 +++++++-------- 3 files changed, 50 insertions(+), 43 deletions(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index 6ebc790..663c280 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -169,6 +169,7 @@ def validate(guard_name: str): "x-openai-api-key", os.environ.get("OPENAI_API_KEY") ) decoded_guard_name = unquote_plus(guard_name) + print('decoeded guard name', decoded_guard_name) guard_struct = guard_client.get_guard(decoded_guard_name) llm_output = payload.pop("llmOutput", None) @@ -189,11 +190,16 @@ def validate(guard_name: str): # guard: Guard = guard_struct.to_guard(openai_api_key, otel_tracer) guard = guard_struct if not isinstance(guard_struct, Guard): + print('what is guard?') + print(guard) guard: Guard = Guard.from_dict(guard_struct.to_dict()) # validate_span.set_attribute("guardName", decoded_guard_name) + print('llm api', llm_api) if llm_api is not None: + llm_api = get_llm_callable(llm_api) + print('llm callable', llm_api) if openai_api_key is None: raise HttpError( status=400, diff --git a/guardrails_api/config.py b/guardrails_api/config.py index 1be6c49..8721937 100644 --- a/guardrails_api/config.py +++ b/guardrails_api/config.py @@ -7,30 +7,35 @@ and guards will be persisted into postgres. In that case, these guards will not be initialized. """ -from guardrails_hub import AtomicFactuality # noqa -from guardrails import AsyncGuard # noqa -from langchain_community.embeddings.sentence_transformer import ( - SentenceTransformerEmbeddings, -) +# from guardrails_hub import AtomicFactuality # noqa +from guardrails import Guard +import openai +# from guardrails import AsyncGuard # noqa +# from langchain_community.embeddings.sentence_transformer import ( +# SentenceTransformerEmbeddings, +# ) -SOURCES = [ - "Albert Einstein Albert Einstein ( ; ; 14 March 1879\u00a0\u2013 18 April 1955) was a German-born theoretical physicist, widely acknowledged to be one of the greatest and most influential physicists of all time.", - "Einstein is best known for developing the theory of relativity, but he also made important contributions to the development of the theory of quantum mechanics.", - "Relativity and quantum mechanics are the two pillars of modern physics.", - 'His mass\u2013energy equivalence formula, which arises from relativity theory, has been dubbed "the world\'s most famous equation".', - "His work is also known for its influence on the philosophy of science.", - 'He received the 1921 Nobel Prize in Physics "for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect", a pivotal step in the development of quantum theory.', - 'His intellectual achievements and originality resulted in "Einstein" becoming synonymous with "genius".', - "Einsteinium, one of the synthetic elements in the periodic table, was named in his honor.", - "In 1905, a year sometimes described as his \"annus mirabilis\" ('miracle year'), Einstein published four groundbreaking papers.", - "These outlined the theory of the photoelectric effect, explained Brownian motion, introduced special relativity, and demonstrated mass\u2013energy equivalence.", -] +# SOURCES = [ +# "Albert Einstein Albert Einstein ( ; ; 14 March 1879\u00a0\u2013 18 April 1955) was a German-born theoretical physicist, widely acknowledged to be one of the greatest and most influential physicists of all time.", +# "Einstein is best known for developing the theory of relativity, but he also made important contributions to the development of the theory of quantum mechanics.", +# "Relativity and quantum mechanics are the two pillars of modern physics.", +# 'His mass\u2013energy equivalence formula, which arises from relativity theory, has been dubbed "the world\'s most famous equation".', +# "His work is also known for its influence on the philosophy of science.", +# 'He received the 1921 Nobel Prize in Physics "for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect", a pivotal step in the development of quantum theory.', +# 'His intellectual achievements and originality resulted in "Einstein" becoming synonymous with "genius".', +# "Einsteinium, one of the synthetic elements in the periodic table, was named in his honor.", +# "In 1905, a year sometimes described as his \"annus mirabilis\" ('miracle year'), Einstein published four groundbreaking papers.", +# "These outlined the theory of the photoelectric effect, explained Brownian motion, introduced special relativity, and demonstrated mass\u2013energy equivalence.", +# ] -embed_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") +# embed_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") -atomic_guard = AsyncGuard() -atomic_guard.use( - AtomicFactuality, - sources=SOURCES, - embedding_callable=embed_function, -) \ No newline at end of file +# atomic_guard = AsyncGuard() +# atomic_guard.use( +# AtomicFactuality, +# sources=SOURCES, +# embedding_callable=embed_function, +# ) + +no_guards = Guard() +no_guards.name = "No Guards" \ No newline at end of file diff --git a/guardrails_api/utils/get_llm_callable.py b/guardrails_api/utils/get_llm_callable.py index 72345ee..75f478b 100644 --- a/guardrails_api/utils/get_llm_callable.py +++ b/guardrails_api/utils/get_llm_callable.py @@ -15,23 +15,19 @@ def get_llm_callable( llm_api: str, ) -> Union[Callable, Callable[[Any], Awaitable[Any]]]: - try: - model = ValidatePayload(llm_api) - # TODO: Add error handling and throw 400 - if model is LLMResource.OPENAI_DOT_COMPLETION_DOT_CREATE: - return get_static_openai_create_func() - elif model is LLMResource.OPENAI_DOT_CHAT_COMPLETION_DOT_CREATE: - return get_static_openai_chat_create_func() - elif model is LLMResource.OPENAI_DOT_COMPLETION_DOT_ACREATE: - return get_static_openai_acreate_func() - elif model is LLMResource.OPENAI_DOT_CHAT_COMPLETION_DOT_ACREATE: - return get_static_openai_chat_acreate_func() - elif model is LLMResource.LITELLM_DOT_COMPLETION: - return litellm.completion - elif model is LLMResource.LITELLM_DOT_ACOMPLETION: - return litellm.acompletion - - else: - pass - except Exception: + # TODO: Add error handling and throw 400 + if llm_api == LLMResource.OPENAI_DOT_COMPLETION_DOT_CREATE.value: + return get_static_openai_create_func() + elif llm_api == LLMResource.OPENAI_DOT_CHAT_COMPLETION_DOT_CREATE.value: + return get_static_openai_chat_create_func() + elif llm_api == LLMResource.OPENAI_DOT_COMPLETION_DOT_ACREATE.value: + return get_static_openai_acreate_func() + elif llm_api == LLMResource.OPENAI_DOT_CHAT_COMPLETION_DOT_ACREATE.value: + return get_static_openai_chat_acreate_func() + elif llm_api == LLMResource.LITELLM_DOT_COMPLETION.value: + return litellm.completion + elif llm_api == LLMResource.LITELLM_DOT_ACOMPLETION.value: + return litellm.acompletion + else: pass + From a7ee53bc40dba06a2f115960a5c93a74ec899af8 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Wed, 19 Jun 2024 17:31:28 -0400 Subject: [PATCH 03/14] add llm_api --- guardrails_api/blueprints/guards.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index 663c280..65679cc 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -240,7 +240,7 @@ def validate(guard_name: str): def guard_streamer(): guard_stream = guard( - # llm_api=llm_api, + llm_api=llm_api, prompt_params=prompt_params, num_reasks=num_reasks, stream=stream, From 6d1d2b5c61367a0a69a5da4dda93cce262c220d6 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Thu, 20 Jun 2024 12:17:52 -0400 Subject: [PATCH 04/14] api changes for demo to work --- guardrails_api/blueprints/guards.py | 25 +++++++++--------------- guardrails_api/utils/get_llm_callable.py | 2 +- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index 65679cc..8b1a3d4 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -169,7 +169,6 @@ def validate(guard_name: str): "x-openai-api-key", os.environ.get("OPENAI_API_KEY") ) decoded_guard_name = unquote_plus(guard_name) - print('decoeded guard name', decoded_guard_name) guard_struct = guard_client.get_guard(decoded_guard_name) llm_output = payload.pop("llmOutput", None) @@ -190,16 +189,11 @@ def validate(guard_name: str): # guard: Guard = guard_struct.to_guard(openai_api_key, otel_tracer) guard = guard_struct if not isinstance(guard_struct, Guard): - print('what is guard?') - print(guard) guard: Guard = Guard.from_dict(guard_struct.to_dict()) # validate_span.set_attribute("guardName", decoded_guard_name) - print('llm api', llm_api) if llm_api is not None: - llm_api = get_llm_callable(llm_api) - print('llm callable', llm_api) if openai_api_key is None: raise HttpError( status=400, @@ -219,7 +213,6 @@ def validate(guard_name: str): " calling guard(...)." ), ) - if llm_output is not None: if stream: raise HttpError( @@ -232,7 +225,6 @@ def validate(guard_name: str): num_reasks=num_reasks, prompt_params=prompt_params, llm_api=llm_api, - # api_key=openai_api_key, **payload, ) else: @@ -244,19 +236,20 @@ def guard_streamer(): prompt_params=prompt_params, num_reasks=num_reasks, stream=stream, - # api_key=openai_api_key, *args, **payload, ) for result in guard_stream: # TODO: Just make this a ValidationOutcome with history - validation_output: ValidationOutcome = ValidationOutcome( - result.validation_passed, - result.validated_output, - guard.history, - result.raw_llm_output, - ) + validation_output: ValidationOutcome = ValidationOutcome.from_guard_history(guard.history.last) + + # ValidationOutcome( + # guard.history, + # validation_passed=result.validation_passed, + # validated_output=result.validated_output, + # raw_llm_output=result.raw_llm_output, + # ) yield validation_output, cast(ValidationOutcome, result) @@ -266,7 +259,7 @@ def validate_streamer(guard_iter): for validation_output, result in guard_iter: next_result = result # next_validation_output = validation_output - fragment = json.dumps(validation_output.to_response()) + fragment = json.dumps(validation_output.to_dict()) yield f"{fragment}\n" final_validation_output: ValidationOutcome = ValidationOutcome( diff --git a/guardrails_api/utils/get_llm_callable.py b/guardrails_api/utils/get_llm_callable.py index 75f478b..c8990d3 100644 --- a/guardrails_api/utils/get_llm_callable.py +++ b/guardrails_api/utils/get_llm_callable.py @@ -11,7 +11,7 @@ ) from guardrails_api_client.models.llm_resource import LLMResource - +litellm.set_verbose=True def get_llm_callable( llm_api: str, ) -> Union[Callable, Callable[[Any], Awaitable[Any]]]: From 5c232eaa3ad98f2d75da382b820c72ce8ee5518e Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Thu, 20 Jun 2024 20:45:40 -0400 Subject: [PATCH 05/14] include error spans in results, add demo validators to config --- guardrails_api/blueprints/guards.py | 18 +++++++++---- guardrails_api/config.py | 42 +++++++++++------------------ 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index 8b1a3d4..2e5413e 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -250,7 +250,7 @@ def guard_streamer(): # validated_output=result.validated_output, # raw_llm_output=result.raw_llm_output, # ) - + print('RESULT', result) yield validation_output, cast(ValidationOutcome, result) def validate_streamer(guard_iter): @@ -259,7 +259,12 @@ def validate_streamer(guard_iter): for validation_output, result in guard_iter: next_result = result # next_validation_output = validation_output - fragment = json.dumps(validation_output.to_dict()) + fragment_dict = result.to_dict() + fragment_dict['error_spans'] = guard.error_spans_in_output() + fragment = json.dumps(fragment_dict) + print('fragment!', fragment) + print(guard.error_spans_in_output()) + print(guard.history.last.iterations.last.outputs.validator_logs) yield f"{fragment}\n" final_validation_output: ValidationOutcome = ValidationOutcome( @@ -277,9 +282,12 @@ def validate_streamer(guard_iter): # prompt_params=prompt_params, # result=next_result # ) - final_output_json = final_validation_output.to_json() - yield f"{final_output_json}\n" - + final_output_dict = final_validation_output.to_dict() + final_output_dict['error_spans'] = guard.error_spans_in_output() + print('error spans', guard.error_spans_in_output()) + final_output_json = json.dumps(final_output_dict) + print('final output', final_output_json) + yield f"{final_validation_output.to_json()}\n" return Response( stream_with_context(validate_streamer(guard_streamer())), content_type="application/json", diff --git a/guardrails_api/config.py b/guardrails_api/config.py index 8721937..af69aa7 100644 --- a/guardrails_api/config.py +++ b/guardrails_api/config.py @@ -9,33 +9,23 @@ """ # from guardrails_hub import AtomicFactuality # noqa from guardrails import Guard -import openai -# from guardrails import AsyncGuard # noqa -# from langchain_community.embeddings.sentence_transformer import ( -# SentenceTransformerEmbeddings, -# ) +from guardrails.hub import ( + DetectPII, + CompetitorCheck +) -# SOURCES = [ -# "Albert Einstein Albert Einstein ( ; ; 14 March 1879\u00a0\u2013 18 April 1955) was a German-born theoretical physicist, widely acknowledged to be one of the greatest and most influential physicists of all time.", -# "Einstein is best known for developing the theory of relativity, but he also made important contributions to the development of the theory of quantum mechanics.", -# "Relativity and quantum mechanics are the two pillars of modern physics.", -# 'His mass\u2013energy equivalence formula, which arises from relativity theory, has been dubbed "the world\'s most famous equation".', -# "His work is also known for its influence on the philosophy of science.", -# 'He received the 1921 Nobel Prize in Physics "for his services to theoretical physics, and especially for his discovery of the law of the photoelectric effect", a pivotal step in the development of quantum theory.', -# 'His intellectual achievements and originality resulted in "Einstein" becoming synonymous with "genius".', -# "Einsteinium, one of the synthetic elements in the periodic table, was named in his honor.", -# "In 1905, a year sometimes described as his \"annus mirabilis\" ('miracle year'), Einstein published four groundbreaking papers.", -# "These outlined the theory of the photoelectric effect, explained Brownian motion, introduced special relativity, and demonstrated mass\u2013energy equivalence.", -# ] -# embed_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") +no_guards = Guard() +no_guards.name = "No Guards" -# atomic_guard = AsyncGuard() -# atomic_guard.use( -# AtomicFactuality, -# sources=SOURCES, -# embedding_callable=embed_function, -# ) +output_guard = Guard() +output_guard.name = "Output Guard" +output_guard.use_many( + DetectPII( + pii_entities='pii' + ), + CompetitorCheck( + competitors=['OpenAI', 'Anthropic'] + ) +) -no_guards = Guard() -no_guards.name = "No Guards" \ No newline at end of file From 974eb5e0e6c116c50f0ddbbe55a8482368fc9ab4 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Fri, 21 Jun 2024 17:22:14 -0400 Subject: [PATCH 06/14] serialize error spans --- guardrails_api/blueprints/guards.py | 8 +++----- guardrails_api/utils/get_llm_callable.py | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index 2e5413e..f20eedc 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -250,7 +250,6 @@ def guard_streamer(): # validated_output=result.validated_output, # raw_llm_output=result.raw_llm_output, # ) - print('RESULT', result) yield validation_output, cast(ValidationOutcome, result) def validate_streamer(guard_iter): @@ -260,11 +259,10 @@ def validate_streamer(guard_iter): next_result = result # next_validation_output = validation_output fragment_dict = result.to_dict() - fragment_dict['error_spans'] = guard.error_spans_in_output() + fragment_dict['error_spans'] = list(map(lambda x: json.dumps({"start":x.start, "end":x.end,"reason":x.reason }),guard.error_spans_in_output())) fragment = json.dumps(fragment_dict) print('fragment!', fragment) - print(guard.error_spans_in_output()) - print(guard.history.last.iterations.last.outputs.validator_logs) + # print(guard.history.last.iterations.last.outputs.validator_logs) yield f"{fragment}\n" final_validation_output: ValidationOutcome = ValidationOutcome( @@ -283,7 +281,7 @@ def validate_streamer(guard_iter): # result=next_result # ) final_output_dict = final_validation_output.to_dict() - final_output_dict['error_spans'] = guard.error_spans_in_output() + final_output_dict['error_spans'] = list(map(lambda x: json.dumps({"start":x.start, "end":x.end,"reason":x.reason }),guard.error_spans_in_output())) print('error spans', guard.error_spans_in_output()) final_output_json = json.dumps(final_output_dict) print('final output', final_output_json) diff --git a/guardrails_api/utils/get_llm_callable.py b/guardrails_api/utils/get_llm_callable.py index c8990d3..bdd1728 100644 --- a/guardrails_api/utils/get_llm_callable.py +++ b/guardrails_api/utils/get_llm_callable.py @@ -11,7 +11,6 @@ ) from guardrails_api_client.models.llm_resource import LLMResource -litellm.set_verbose=True def get_llm_callable( llm_api: str, ) -> Union[Callable, Callable[[Any], Awaitable[Any]]]: From 0359f19073da78e18380cda570b4e26479ded94c Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 14:33:48 -0400 Subject: [PATCH 07/14] add callid (placeholder) --- guardrails_api/blueprints/guards.py | 8 +++----- guardrails_api/default.env | 3 ++- guardrails_api/start.sh | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index f20eedc..2c2f0c3 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -261,11 +261,11 @@ def validate_streamer(guard_iter): fragment_dict = result.to_dict() fragment_dict['error_spans'] = list(map(lambda x: json.dumps({"start":x.start, "end":x.end,"reason":x.reason }),guard.error_spans_in_output())) fragment = json.dumps(fragment_dict) - print('fragment!', fragment) - # print(guard.history.last.iterations.last.outputs.validator_logs) yield f"{fragment}\n" final_validation_output: ValidationOutcome = ValidationOutcome( + # TODO: THIS IS PROBABLY WRONG, i'm just using it to silence pydantic + callId=str(id(next_result)), validation_passed=next_result.validation_passed, validated_output=next_result.validated_output, history=guard.history, @@ -282,10 +282,8 @@ def validate_streamer(guard_iter): # ) final_output_dict = final_validation_output.to_dict() final_output_dict['error_spans'] = list(map(lambda x: json.dumps({"start":x.start, "end":x.end,"reason":x.reason }),guard.error_spans_in_output())) - print('error spans', guard.error_spans_in_output()) final_output_json = json.dumps(final_output_dict) - print('final output', final_output_json) - yield f"{final_validation_output.to_json()}\n" + yield f"{final_output_json}\n" return Response( stream_with_context(validate_streamer(guard_streamer())), content_type="application/json", diff --git a/guardrails_api/default.env b/guardrails_api/default.env index 674906a..b7aa630 100644 --- a/guardrails_api/default.env +++ b/guardrails_api/default.env @@ -4,4 +4,5 @@ LOGLEVEL="INFO" GUARDRAILS_LOG_LEVEL="INFO" GUARDRAILS_PROCESS_COUNT=1 SELF_ENDPOINT=http://localhost:8000 -OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES \ No newline at end of file +OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES +API_KEY=***REMOVED*** \ No newline at end of file diff --git a/guardrails_api/start.sh b/guardrails_api/start.sh index 793fc4a..63ab3f7 100755 --- a/guardrails_api/start.sh +++ b/guardrails_api/start.sh @@ -3,7 +3,7 @@ export PYTHONUNBUFFERED=1 export LOGLEVEL="INFO" export GUARDRAILS_LOG_LEVEL="INFO" export GUARDRAILS_PROCESS_COUNT=1 -export SELF_ENDPOINT=http://localhost:8000 +export SELF_ENDPOINT=http://localhost:8001 export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES -gunicorn --bind 0.0.0.0:8000 --timeout=5 --threads=10 "guardrails_api.app:create_app()" +gunicorn --bind 0.0.0.0:8001 --timeout=5 --threads=10 "guardrails_api.app:create_app()" From 4e83466dc796343adf0e8f1504fc20c545ecbe51 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 14:43:02 -0400 Subject: [PATCH 08/14] initialize callid correctly --- guardrails_api/blueprints/guards.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index 2c2f0c3..adf4829 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -263,9 +263,9 @@ def validate_streamer(guard_iter): fragment = json.dumps(fragment_dict) yield f"{fragment}\n" + call = guard.history.last final_validation_output: ValidationOutcome = ValidationOutcome( - # TODO: THIS IS PROBABLY WRONG, i'm just using it to silence pydantic - callId=str(id(next_result)), + callId=call.id, validation_passed=next_result.validation_passed, validated_output=next_result.validated_output, history=guard.history, From bb20bd344cc6d9f948e5061eababa5e5fe3ff504 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 14:44:50 -0400 Subject: [PATCH 09/14] move config into sample-config --- guardrails_api/config.py | 22 +----------- sample-config.py | 76 ++++++++++------------------------------ 2 files changed, 19 insertions(+), 79 deletions(-) diff --git a/guardrails_api/config.py b/guardrails_api/config.py index af69aa7..199eab2 100644 --- a/guardrails_api/config.py +++ b/guardrails_api/config.py @@ -7,25 +7,5 @@ and guards will be persisted into postgres. In that case, these guards will not be initialized. """ -# from guardrails_hub import AtomicFactuality # noqa -from guardrails import Guard -from guardrails.hub import ( - DetectPII, - CompetitorCheck -) - - -no_guards = Guard() -no_guards.name = "No Guards" - -output_guard = Guard() -output_guard.name = "Output Guard" -output_guard.use_many( - DetectPII( - pii_entities='pii' - ), - CompetitorCheck( - competitors=['OpenAI', 'Anthropic'] - ) -) +from guardrails import Guard diff --git a/sample-config.py b/sample-config.py index 7df5938..2677590 100644 --- a/sample-config.py +++ b/sample-config.py @@ -1,71 +1,31 @@ -''' +""" All guards defined here will be initialized, if and only if the application is using in memory guards. The application will use in memory guards if pg_host is left -undefined. Otherwise, a postgres instance will be started +undefined. Otherwise, a postgres instance will be started and guards will be persisted into postgres. In that case, these guards will not be initialized. -''' +""" from guardrails import Guard -from guardrails.hub import RegexMatch, ValidChoices, ValidLength #, RestrictToTopic - -name_case = Guard( - name='name-case', - description='Checks that a string is in Name Case format.' -).use( - RegexMatch(regex="^(?:[A-Z][^\s]*\s?)+$") -) - -all_caps = Guard( - name='all-caps', - description='Checks that a string is all capital.' -).use( - RegexMatch(regex="^[A-Z\\s]*$") -) - -lower_case = Guard( - name='lower-case', - description='Checks that a string is all lowercase.' -).use( - RegexMatch(regex="^[a-z\\s]*$") -).use( - ValidLength(1, 100) -).use( - ValidChoices(["music", "cooking", "camping", "outdoors"]) +from guardrails.hub import ( + DetectPII, + CompetitorCheck ) -print(lower_case.to_json()) - +no_guards = Guard() +no_guards.name = "No Guards" +output_guard = Guard() +output_guard.name = "Output Guard" +output_guard.use_many( + DetectPII( + pii_entities='pii' + ), + CompetitorCheck( + competitors=['OpenAI', 'Anthropic'] + ) +) -# valid_topics = ["music", "cooking", "camping", "outdoors"] -# invalid_topics = ["sports", "work", "ai"] -# all_topics = [*valid_topics, *invalid_topics] - -# def custom_llm (text: str, *args, **kwargs): -# return [ -# { -# "name": t, -# "present": (t in text), -# "confidence": 5 -# } -# for t in all_topics -# ] - -# custom_code_guard = Guard( -# name='custom', -# description='Uses a custom llm for RestrictToTopic' -# ).use( -# RestrictToTopic( -# valid_topics=valid_topics, -# invalid_topics=invalid_topics, -# llm_callable=custom_llm, -# disable_classifier=True, -# disable_llm=False, -# # Pass this so it doesn't load the bart model -# classifier_api_endpoint="https://m-1e7af27102f54c3a9eb9cb11aa4715bd-m.default.model-v2.inferless.com/v2/models/RestrictToTopic_1e7af27102f54c3a9eb9cb11aa4715bd/versions/1/infer", -# ) -# ) \ No newline at end of file From 4b7dc30ef89acab30f0f82d7c064ab1abe2e2db5 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 14:49:18 -0400 Subject: [PATCH 10/14] format --- guardrails_api/app.py | 6 +- guardrails_api/blueprints/guards.py | 34 +++- guardrails_api/clients/cache_client.py | 9 +- guardrails_api/config.py | 2 - guardrails_api/start | 9 + guardrails_api/streaming-test.ipynb | 233 +++++++++++++++++++++++ guardrails_api/utils/get_llm_callable.py | 5 +- tests/blueprints/test_guards.py | 29 +-- tests/clients/test_pg_guard_client.py | 8 +- 9 files changed, 297 insertions(+), 38 deletions(-) create mode 100755 guardrails_api/start create mode 100644 guardrails_api/streaming-test.ipynb diff --git a/guardrails_api/app.py b/guardrails_api/app.py index 088d172..ed494c3 100644 --- a/guardrails_api/app.py +++ b/guardrails_api/app.py @@ -47,7 +47,9 @@ def register_config(config: Optional[str] = None): SourceFileLoader("config", config_file_path).load_module() -def create_app(env: Optional[str] = None, config: Optional[str] = None, port: Optional[int] = None): +def create_app( + env: Optional[str] = None, config: Optional[str] = None, port: Optional[int] = None +): if os.environ.get("APP_ENVIRONMENT") != "production": from dotenv import load_dotenv @@ -86,7 +88,7 @@ def create_app(env: Optional[str] = None, config: Optional[str] = None, port: Op pg_client = PostgresClient() pg_client.initialize(app) - + cache_client = CacheClient() cache_client.initialize(app) diff --git a/guardrails_api/blueprints/guards.py b/guardrails_api/blueprints/guards.py index adf4829..29575fc 100644 --- a/guardrails_api/blueprints/guards.py +++ b/guardrails_api/blueprints/guards.py @@ -35,7 +35,7 @@ is_guard = isinstance(export, Guard) if is_guard: guard_client.create_guard(export) - + cache_client = CacheClient() @@ -242,8 +242,10 @@ def guard_streamer(): for result in guard_stream: # TODO: Just make this a ValidationOutcome with history - validation_output: ValidationOutcome = ValidationOutcome.from_guard_history(guard.history.last) - + validation_output: ValidationOutcome = ( + ValidationOutcome.from_guard_history(guard.history.last) + ) + # ValidationOutcome( # guard.history, # validation_passed=result.validation_passed, @@ -259,7 +261,14 @@ def validate_streamer(guard_iter): next_result = result # next_validation_output = validation_output fragment_dict = result.to_dict() - fragment_dict['error_spans'] = list(map(lambda x: json.dumps({"start":x.start, "end":x.end,"reason":x.reason }),guard.error_spans_in_output())) + fragment_dict["error_spans"] = list( + map( + lambda x: json.dumps( + {"start": x.start, "end": x.end, "reason": x.reason} + ), + guard.error_spans_in_output(), + ) + ) fragment = json.dumps(fragment_dict) yield f"{fragment}\n" @@ -281,9 +290,17 @@ def validate_streamer(guard_iter): # result=next_result # ) final_output_dict = final_validation_output.to_dict() - final_output_dict['error_spans'] = list(map(lambda x: json.dumps({"start":x.start, "end":x.end,"reason":x.reason }),guard.error_spans_in_output())) + final_output_dict["error_spans"] = list( + map( + lambda x: json.dumps( + {"start": x.start, "end": x.end, "reason": x.reason} + ), + guard.error_spans_in_output(), + ) + ) final_output_json = json.dumps(final_output_dict) yield f"{final_output_json}\n" + return Response( stream_with_context(validate_streamer(guard_streamer())), content_type="application/json", @@ -314,16 +331,15 @@ def validate_streamer(guard_iter): # prompt_params=prompt_params, # result=result # ) - serialized_history = [ - call.to_dict() for call in guard.history - ] + serialized_history = [call.to_dict() for call in guard.history] cache_key = f"{guard.name}-{result.call_id}" cache_client.set(cache_key, serialized_history, 300) return result.to_dict() + @guards_bp.route("//history/", methods=["GET"]) @handle_error def guard_history(guard_name: str, call_id: str): if request.method == "GET": cache_key = f"{guard_name}-{call_id}" - return cache_client.get(cache_key) \ No newline at end of file + return cache_client.get(cache_key) diff --git a/guardrails_api/clients/cache_client.py b/guardrails_api/clients/cache_client.py index e24bcb5..dc45886 100644 --- a/guardrails_api/clients/cache_client.py +++ b/guardrails_api/clients/cache_client.py @@ -9,16 +9,15 @@ def __new__(cls): if cls._instance is None: cls._instance = super(CacheClient, cls).__new__(cls) return cls._instance - def initialize(self, app): self.cache = Cache( - app, + app, config={ "CACHE_TYPE": "SimpleCache", "CACHE_DEFAULT_TIMEOUT": 300, - "CACHE_THRESHOLD": 50 - } + "CACHE_THRESHOLD": 50, + }, ) def get(self, key): @@ -31,4 +30,4 @@ def delete(self, key): self.cache.delete(key) def clear(self): - self.cache.clear() \ No newline at end of file + self.cache.clear() diff --git a/guardrails_api/config.py b/guardrails_api/config.py index 199eab2..5801d80 100644 --- a/guardrails_api/config.py +++ b/guardrails_api/config.py @@ -7,5 +7,3 @@ and guards will be persisted into postgres. In that case, these guards will not be initialized. """ - -from guardrails import Guard diff --git a/guardrails_api/start b/guardrails_api/start new file mode 100755 index 0000000..63ab3f7 --- /dev/null +++ b/guardrails_api/start @@ -0,0 +1,9 @@ +export APP_ENVIRONMENT=local +export PYTHONUNBUFFERED=1 +export LOGLEVEL="INFO" +export GUARDRAILS_LOG_LEVEL="INFO" +export GUARDRAILS_PROCESS_COUNT=1 +export SELF_ENDPOINT=http://localhost:8001 +export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES + +gunicorn --bind 0.0.0.0:8001 --timeout=5 --threads=10 "guardrails_api.app:create_app()" diff --git a/guardrails_api/streaming-test.ipynb b/guardrails_api/streaming-test.ipynb new file mode 100644 index 0000000..aa0c149 --- /dev/null +++ b/guardrails_api/streaming-test.ipynb @@ -0,0 +1,233 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting git+https://github.com/guardrails-ai/guardrails.git@start-cmd\n", + " Cloning https://github.com/guardrails-ai/guardrails.git (to revision start-cmd) to /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-h26jc_tn\n", + " Running command git clone --filter=blob:none --quiet https://github.com/guardrails-ai/guardrails.git /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-h26jc_tn\n", + " Running command git checkout -b start-cmd --track origin/start-cmd\n", + " Switched to a new branch 'start-cmd'\n", + " branch 'start-cmd' set up to track 'origin/start-cmd'.\n", + " Resolved https://github.com/guardrails-ai/guardrails.git to commit baa093f2b85aff1dd67082e09548d346e517cc46\n", + " Installing build dependencies ... \u001b[?25ldone\n", + "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", + "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25hRequirement already satisfied: coloredlogs<16.0.0,>=15.0.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (15.0.1)\n", + "Requirement already satisfied: faker<26.0.0,>=25.2.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (25.6.0)\n", + "Requirement already satisfied: griffe<0.37.0,>=0.36.9 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.36.9)\n", + "Requirement already satisfied: guardrails-api-client==0.3.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.3.4)\n", + "Requirement already satisfied: jsonref<2.0.0,>=1.1.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.1.0)\n", + "Requirement already satisfied: jsonschema<5.0.0,>=4.22.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (4.22.0)\n", + "Requirement already satisfied: jwt<2.0.0,>=1.3.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.3.1)\n", + "Requirement already satisfied: langchain-core<0.3,>=0.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.1.52)\n", + "Requirement already satisfied: lxml<5.0.0,>=4.9.3 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (4.9.4)\n", + "Requirement already satisfied: nltk<4.0.0,>=3.8.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (3.8.1)\n", + "Requirement already satisfied: openai<2.0.0,>=1.30.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.31.2)\n", + "Requirement already satisfied: opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.25.0)\n", + "Requirement already satisfied: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.24.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.25.0)\n", + "Requirement already satisfied: opentelemetry-sdk<2.0.0,>=1.24.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.25.0)\n", + "Requirement already satisfied: pip>=22 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (24.0)\n", + "Requirement already satisfied: pydantic<3.0,>=2.0.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2.7.3)\n", + "Requirement already satisfied: pydash<8.0.0,>=7.0.6 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (7.0.7)\n", + "Requirement already satisfied: python-dateutil<3.0.0,>=2.8.2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2.9.0.post0)\n", + "Requirement already satisfied: regex<2024.0.0,>=2023.10.3 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2023.12.25)\n", + "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2.32.3)\n", + "Requirement already satisfied: rich<14.0.0,>=13.6.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (13.7.1)\n", + "Requirement already satisfied: rstr<4.0.0,>=3.2.2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (3.2.2)\n", + "Requirement already satisfied: tenacity>=8.1.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (8.3.0)\n", + "Requirement already satisfied: tiktoken>=0.5.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.5.2)\n", + "Requirement already satisfied: typer<0.10.0,>=0.9.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from typer[all]<0.10.0,>=0.9.0->guardrails-ai==0.5.0a0) (0.9.4)\n", + "Requirement already satisfied: typing-extensions<5.0.0,>=4.8.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (4.12.1)\n", + "Requirement already satisfied: humanfriendly>=9.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from coloredlogs<16.0.0,>=15.0.1->guardrails-ai==0.5.0a0) (10.0)\n", + "Requirement already satisfied: colorama>=0.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from griffe<0.37.0,>=0.36.9->guardrails-ai==0.5.0a0) (0.4.6)\n", + "Requirement already satisfied: attrs>=22.2.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (23.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (0.18.1)\n", + "Requirement already satisfied: fqdn in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.5.1)\n", + "Requirement already satisfied: idna in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (3.7)\n", + "Requirement already satisfied: isoduration in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (20.11.0)\n", + "Requirement already satisfied: jsonpointer>1.13 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (2.4)\n", + "Requirement already satisfied: rfc3339-validator in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (0.1.4)\n", + "Requirement already satisfied: rfc3987 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.3.8)\n", + "Requirement already satisfied: uri-template in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.3.0)\n", + "Requirement already satisfied: webcolors>=1.11 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (24.6.0)\n", + "Requirement already satisfied: cryptography!=3.4.0,>=3.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jwt<2.0.0,>=1.3.1->guardrails-ai==0.5.0a0) (42.0.8)\n", + "Requirement already satisfied: PyYAML>=5.3 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (6.0.1)\n", + "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (1.33)\n", + "Requirement already satisfied: langsmith<0.2.0,>=0.1.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (0.1.75)\n", + "Requirement already satisfied: packaging<24.0,>=23.2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (23.2)\n", + "Requirement already satisfied: click in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from nltk<4.0.0,>=3.8.1->guardrails-ai==0.5.0a0) (8.1.7)\n", + "Requirement already satisfied: joblib in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from nltk<4.0.0,>=3.8.1->guardrails-ai==0.5.0a0) (1.4.2)\n", + "Requirement already satisfied: tqdm in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from nltk<4.0.0,>=3.8.1->guardrails-ai==0.5.0a0) (4.66.4)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (4.4.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (0.27.0)\n", + "Requirement already satisfied: sniffio in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (1.3.1)\n", + "Requirement already satisfied: deprecated>=1.2.6 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.2.14)\n", + "Requirement already satisfied: googleapis-common-protos~=1.52 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.63.1)\n", + "Requirement already satisfied: grpcio<2.0.0,>=1.0.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.64.1)\n", + "Requirement already satisfied: opentelemetry-api~=1.15 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.25.0)\n", + "Requirement already satisfied: opentelemetry-exporter-otlp-proto-common==1.25.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.25.0)\n", + "Requirement already satisfied: opentelemetry-proto==1.25.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.25.0)\n", + "Requirement already satisfied: protobuf<5.0,>=3.19 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-proto==1.25.0->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (4.25.3)\n", + "Requirement already satisfied: opentelemetry-semantic-conventions==0.46b0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-sdk<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (0.46b0)\n", + "Requirement already satisfied: importlib-metadata<=7.1,>=6.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-api~=1.15->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (6.11.0)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from pydantic<3.0,>=2.0.0->guardrails-ai==0.5.0a0) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.18.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from pydantic<3.0,>=2.0.0->guardrails-ai==0.5.0a0) (2.18.4)\n", + "Requirement already satisfied: six>=1.5 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from python-dateutil<3.0.0,>=2.8.2->guardrails-ai==0.5.0a0) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->guardrails-ai==0.5.0a0) (3.3.2)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->guardrails-ai==0.5.0a0) (2.2.1)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->guardrails-ai==0.5.0a0) (2024.6.2)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from rich<14.0.0,>=13.6.0->guardrails-ai==0.5.0a0) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from rich<14.0.0,>=13.6.0->guardrails-ai==0.5.0a0) (2.18.0)\n", + "Requirement already satisfied: shellingham<2.0.0,>=1.3.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from typer[all]<0.10.0,>=0.9.0->guardrails-ai==0.5.0a0) (1.5.4)\n", + "Requirement already satisfied: cffi>=1.12 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from cryptography!=3.4.0,>=3.1->jwt<2.0.0,>=1.3.1->guardrails-ai==0.5.0a0) (1.16.0)\n", + "Requirement already satisfied: wrapt<2,>=1.10 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from deprecated>=1.2.6->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.16.0)\n", + "Requirement already satisfied: httpcore==1.* in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from httpx<1,>=0.23.0->openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (1.0.5)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (0.14.0)\n", + "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langsmith<0.2.0,>=0.1.0->langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (3.10.3)\n", + "Requirement already satisfied: mdurl~=0.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich<14.0.0,>=13.6.0->guardrails-ai==0.5.0a0) (0.1.2)\n", + "Requirement already satisfied: arrow>=0.15.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from isoduration->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.3.0)\n", + "Requirement already satisfied: types-python-dateutil>=2.8.10 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from arrow>=0.15.0->isoduration->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (2.9.0.20240316)\n", + "Requirement already satisfied: pycparser in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from cffi>=1.12->cryptography!=3.4.0,>=3.1->jwt<2.0.0,>=1.3.1->guardrails-ai==0.5.0a0) (2.22)\n", + "Requirement already satisfied: zipp>=0.5 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from importlib-metadata<=7.1,>=6.0->opentelemetry-api~=1.15->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (3.19.2)\n", + "Building wheels for collected packages: guardrails-ai\n", + " Building wheel for guardrails-ai (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25h Created wheel for guardrails-ai: filename=guardrails_ai-0.5.0a0-py3-none-any.whl size=163530 sha256=e3354c1d4c2f745a223dc94bc97a709a16c604de0fdea50a0ee6197d21684e94\n", + " Stored in directory: /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-ephem-wheel-cache-foj8x5cg/wheels/0f/8f/ce/e2e709435a6a68a64a5881ac3a372e244e6be200fe15abe181\n", + "Successfully built guardrails-ai\n", + "Installing collected packages: guardrails-ai\n", + " Attempting uninstall: guardrails-ai\n", + " Found existing installation: guardrails-ai 0.5.0a1\n", + " Uninstalling guardrails-ai-0.5.0a1:\n", + " Successfully uninstalled guardrails-ai-0.5.0a1\n", + "Successfully installed guardrails-ai-0.5.0a0\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install git+https://github.com/guardrails-ai/guardrails.git@start-cmd\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing hub:\u001b[35m/\u001b[0m\u001b[35m/guardrails/\u001b[0m\u001b[95mcompetitor_check...\u001b[0m\n", + "\u001b[2K\u001b[32m[ ]\u001b[0m Fetching manifestst\n", + "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependenciespendencies Running command git clone --filter=blob:none --quiet https://github.com/guardrails-ai/competitor_check.git /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-ahvuhd83\n", + "\u001b[2K\u001b[32m[ ==]\u001b[0m Downloading dependencies\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/competitor_check/competitor_check-0.0.0.dist-info already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/competitor_check/validator already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", + "\u001b[2K\u001b[32m[=== ]\u001b[0m Downloading dependencies\n", + "\u001b[2K\u001b[32m[= ]\u001b[0m Running post-install setuptall setup\n", + "\u001b[1A\u001b[2K✅Successfully installed guardrails/competitor_check!\n", + "\n", + "\n", + "\u001b[1mImport validator:\u001b[0m\n", + "from guardrails.hub import CompetitorCheck\n", + "\n", + "\u001b[1mGet more info:\u001b[0m\n", + "\u001b[4;94mhttps://hub.guardrailsai.com/validator/guardrails/competitor_check\u001b[0m\n", + "\n" + ] + } + ], + "source": [ + "!guardrails hub install hub://guardrails/competitor_check" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing hub:\u001b[35m/\u001b[0m\u001b[35m/guardrails/\u001b[0m\u001b[95mdetect_pii...\u001b[0m\n", + "\u001b[2K\u001b[32m[ ===]\u001b[0m Fetching manifestst\n", + "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependenciespendencies Running command git clone --filter=blob:none --quiet https://github.com/guardrails-ai/detect_pii.git /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-k7hpb_4n\n", + "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependencies\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/detect_pii/validator already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", + "\u001b[0m\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/detect_pii/detect_pii-0.0.0.dist-info already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", + "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependencies\n", + "\u001b[2K\u001b[32m[ ==]\u001b[0m Running post-install setuptall setup\n", + "\u001b[1A\u001b[2K✅Successfully installed guardrails/detect_pii!\n", + "\n", + "\n", + "\u001b[1mImport validator:\u001b[0m\n", + "from guardrails.hub import DetectPII\n", + "\n", + "\u001b[1mGet more info:\u001b[0m\n", + "\u001b[4;94mhttps://hub.guardrailsai.com/validator/guardrails/detect_pii\u001b[0m\n", + "\n" + ] + } + ], + "source": [ + "!guardrails hub install hub://guardrails/detect_pii" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mUsage: \u001b[0mguardrails start [OPTIONS]\n", + "\u001b[2mTry \u001b[0m\u001b[2;34m'guardrails start \u001b[0m\u001b[1;2;34m-\u001b[0m\u001b[1;2;34m-help\u001b[0m\u001b[2;34m'\u001b[0m\u001b[2m for help.\u001b[0m\n", + "\u001b[31m╭─\u001b[0m\u001b[31m Error \u001b[0m\u001b[31m─────────────────────────────────────────────────────────────────────\u001b[0m\u001b[31m─╮\u001b[0m\n", + "\u001b[31m│\u001b[0m No such option: \u001b[1;36m-\u001b[0m\u001b[1;36m-port\u001b[0m \u001b[31m│\u001b[0m\n", + "\u001b[31m╰──────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n" + ] + } + ], + "source": [ + "!echo \"\" | guardrails start --env .env --config ./config.py" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/guardrails_api/utils/get_llm_callable.py b/guardrails_api/utils/get_llm_callable.py index bdd1728..49d7737 100644 --- a/guardrails_api/utils/get_llm_callable.py +++ b/guardrails_api/utils/get_llm_callable.py @@ -6,11 +6,9 @@ get_static_openai_acreate_func, get_static_openai_chat_acreate_func, ) -from guardrails_api_client.models.validate_payload import ( - ValidatePayload, -) from guardrails_api_client.models.llm_resource import LLMResource + def get_llm_callable( llm_api: str, ) -> Union[Callable, Callable[[Any], Awaitable[Any]]]: @@ -29,4 +27,3 @@ def get_llm_callable( return litellm.acompletion else: pass - diff --git a/tests/blueprints/test_guards.py b/tests/blueprints/test_guards.py index b12a49d..d33a93a 100644 --- a/tests/blueprints/test_guards.py +++ b/tests/blueprints/test_guards.py @@ -45,7 +45,12 @@ def test_route_setup(mocker): from guardrails_api.blueprints.guards import guards_bp assert guards_bp.route_call_count == 4 - assert guards_bp.routes == ["/", "/", "//validate", "//history/"] + assert guards_bp.routes == [ + "/", + "/", + "//validate", + "//history/", + ] def test_guards__get(mocker): @@ -83,7 +88,8 @@ def test_guards__post_pg(mocker): mocker.patch("flask.Blueprint", new=MockBlueprint) mocker.patch("guardrails_api.blueprints.guards.request", mock_request) mock_from_request = mocker.patch( - "guardrails_api.blueprints.guards.GuardStruct.from_dict", return_value=mock_guard + "guardrails_api.blueprints.guards.GuardStruct.from_dict", + return_value=mock_guard, ) mock_create_guard = mocker.patch( "guardrails_api.blueprints.guards.guard_client.create_guard", @@ -185,7 +191,8 @@ def test_guard__put_pg(mocker): mocker.patch("guardrails_api.blueprints.guards.request", mock_request) mock_from_request = mocker.patch( - "guardrails_api.blueprints.guards.GuardStruct.from_dict", return_value=mock_guard + "guardrails_api.blueprints.guards.GuardStruct.from_dict", + return_value=mock_guard, ) mock_upsert_guard = mocker.patch( "guardrails_api.blueprints.guards.guard_client.upsert_guard", @@ -387,10 +394,8 @@ def test_validate__parse(mocker): "guardrails_api.blueprints.guards.guard_client.get_guard", return_value=mock_guard, ) - - mocker.patch( - "guardrails_api.blueprints.guards.CacheClient.set" - ) + + mocker.patch("guardrails_api.blueprints.guards.CacheClient.set") # mocker.patch("guardrails_api.blueprints.guards.get_tracer", return_value=mock_tracer) @@ -451,7 +456,7 @@ def test_validate__call(mocker): call_id="mock-call-id", raw_llm_output="Hello world!", validated_output=None, - validation_passed=False + validation_passed=False, ) mock___call__ = mocker.patch.object(MockGuardStruct, "__call__") @@ -484,12 +489,8 @@ def test_validate__call(mocker): "guardrails_api.blueprints.guards.get_llm_callable", return_value="openai.Completion.create", ) - - mocker.patch( - "guardrails_api.blueprints.guards.CacheClient.set" - ) - - + + mocker.patch("guardrails_api.blueprints.guards.CacheClient.set") # mocker.patch("guardrails_api.blueprints.guards.get_tracer", return_value=mock_tracer) diff --git a/tests/clients/test_pg_guard_client.py b/tests/clients/test_pg_guard_client.py index b0c9813..0b94224 100644 --- a/tests/clients/test_pg_guard_client.py +++ b/tests/clients/test_pg_guard_client.py @@ -174,7 +174,9 @@ def test_get_guards(mocker): guards = [guard_one, guard_two] mock_all.return_value = guards - mock_from_guard_item = mocker.patch("guardrails_api.clients.pg_guard_client.from_guard_item") + mock_from_guard_item = mocker.patch( + "guardrails_api.clients.pg_guard_client.from_guard_item" + ) mock_from_guard_item.side_effect = [guard_one, guard_two] from guardrails_api.clients.pg_guard_client import PGGuardClient @@ -208,7 +210,9 @@ def test_create_guard(mocker): add_spy = mocker.spy(mock_pg_client.db.session, "add") commit_spy = mocker.spy(mock_pg_client.db.session, "commit") - mock_from_guard_item = mocker.patch("guardrails_api.clients.pg_guard_client.from_guard_item") + mock_from_guard_item = mocker.patch( + "guardrails_api.clients.pg_guard_client.from_guard_item" + ) mock_from_guard_item.return_value = mock_guard from guardrails_api.clients.pg_guard_client import PGGuardClient From 21d74dcc6ed8a610a3de855c25bf7a271d424dfa Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 15:17:46 -0400 Subject: [PATCH 11/14] change port --- guardrails_api/start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guardrails_api/start.sh b/guardrails_api/start.sh index 63ab3f7..793fc4a 100755 --- a/guardrails_api/start.sh +++ b/guardrails_api/start.sh @@ -3,7 +3,7 @@ export PYTHONUNBUFFERED=1 export LOGLEVEL="INFO" export GUARDRAILS_LOG_LEVEL="INFO" export GUARDRAILS_PROCESS_COUNT=1 -export SELF_ENDPOINT=http://localhost:8001 +export SELF_ENDPOINT=http://localhost:8000 export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES -gunicorn --bind 0.0.0.0:8001 --timeout=5 --threads=10 "guardrails_api.app:create_app()" +gunicorn --bind 0.0.0.0:8000 --timeout=5 --threads=10 "guardrails_api.app:create_app()" From 25949934d6b326f5307d1816237e2050a1e97b82 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 15:31:49 -0400 Subject: [PATCH 12/14] gitignore default.env --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8377660..1ffa5a7 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ pgadmin-data __pycache__/ guard-rails-api-client guardrails-custom-validators +guardrails_api/default.env sdk .coverage htmlcov From 31a2071689973571d8a73c64f2e67a3035702e2c Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 16:36:58 -0400 Subject: [PATCH 13/14] cleanup --- .gitignore | 1 - guardrails_api/default.env | 2 - guardrails_api/streaming-test.ipynb | 233 ---------------------------- 3 files changed, 236 deletions(-) delete mode 100644 guardrails_api/streaming-test.ipynb diff --git a/.gitignore b/.gitignore index 1ffa5a7..8377660 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ pgadmin-data __pycache__/ guard-rails-api-client guardrails-custom-validators -guardrails_api/default.env sdk .coverage htmlcov diff --git a/guardrails_api/default.env b/guardrails_api/default.env index 519dba7..457209c 100644 --- a/guardrails_api/default.env +++ b/guardrails_api/default.env @@ -3,8 +3,6 @@ PYTHONUNBUFFERED=1 LOGLEVEL="INFO" GUARDRAILS_LOG_LEVEL="INFO" GUARDRAILS_PROCESS_COUNT=1 -SELF_ENDPOINT=http://localhost:8000 -API_KEY=***REMOVED*** HOST=http://localhost PORT=8000 OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES diff --git a/guardrails_api/streaming-test.ipynb b/guardrails_api/streaming-test.ipynb deleted file mode 100644 index aa0c149..0000000 --- a/guardrails_api/streaming-test.ipynb +++ /dev/null @@ -1,233 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting git+https://github.com/guardrails-ai/guardrails.git@start-cmd\n", - " Cloning https://github.com/guardrails-ai/guardrails.git (to revision start-cmd) to /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-h26jc_tn\n", - " Running command git clone --filter=blob:none --quiet https://github.com/guardrails-ai/guardrails.git /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-h26jc_tn\n", - " Running command git checkout -b start-cmd --track origin/start-cmd\n", - " Switched to a new branch 'start-cmd'\n", - " branch 'start-cmd' set up to track 'origin/start-cmd'.\n", - " Resolved https://github.com/guardrails-ai/guardrails.git to commit baa093f2b85aff1dd67082e09548d346e517cc46\n", - " Installing build dependencies ... \u001b[?25ldone\n", - "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", - "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25hRequirement already satisfied: coloredlogs<16.0.0,>=15.0.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (15.0.1)\n", - "Requirement already satisfied: faker<26.0.0,>=25.2.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (25.6.0)\n", - "Requirement already satisfied: griffe<0.37.0,>=0.36.9 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.36.9)\n", - "Requirement already satisfied: guardrails-api-client==0.3.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.3.4)\n", - "Requirement already satisfied: jsonref<2.0.0,>=1.1.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.1.0)\n", - "Requirement already satisfied: jsonschema<5.0.0,>=4.22.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (4.22.0)\n", - "Requirement already satisfied: jwt<2.0.0,>=1.3.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.3.1)\n", - "Requirement already satisfied: langchain-core<0.3,>=0.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.1.52)\n", - "Requirement already satisfied: lxml<5.0.0,>=4.9.3 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (4.9.4)\n", - "Requirement already satisfied: nltk<4.0.0,>=3.8.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (3.8.1)\n", - "Requirement already satisfied: openai<2.0.0,>=1.30.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.31.2)\n", - "Requirement already satisfied: opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.25.0)\n", - "Requirement already satisfied: opentelemetry-exporter-otlp-proto-http<2.0.0,>=1.24.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.25.0)\n", - "Requirement already satisfied: opentelemetry-sdk<2.0.0,>=1.24.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (1.25.0)\n", - "Requirement already satisfied: pip>=22 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (24.0)\n", - "Requirement already satisfied: pydantic<3.0,>=2.0.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2.7.3)\n", - "Requirement already satisfied: pydash<8.0.0,>=7.0.6 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (7.0.7)\n", - "Requirement already satisfied: python-dateutil<3.0.0,>=2.8.2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2.9.0.post0)\n", - "Requirement already satisfied: regex<2024.0.0,>=2023.10.3 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2023.12.25)\n", - "Requirement already satisfied: requests<3.0.0,>=2.31.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (2.32.3)\n", - "Requirement already satisfied: rich<14.0.0,>=13.6.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (13.7.1)\n", - "Requirement already satisfied: rstr<4.0.0,>=3.2.2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (3.2.2)\n", - "Requirement already satisfied: tenacity>=8.1.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (8.3.0)\n", - "Requirement already satisfied: tiktoken>=0.5.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (0.5.2)\n", - "Requirement already satisfied: typer<0.10.0,>=0.9.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from typer[all]<0.10.0,>=0.9.0->guardrails-ai==0.5.0a0) (0.9.4)\n", - "Requirement already satisfied: typing-extensions<5.0.0,>=4.8.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from guardrails-ai==0.5.0a0) (4.12.1)\n", - "Requirement already satisfied: humanfriendly>=9.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from coloredlogs<16.0.0,>=15.0.1->guardrails-ai==0.5.0a0) (10.0)\n", - "Requirement already satisfied: colorama>=0.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from griffe<0.37.0,>=0.36.9->guardrails-ai==0.5.0a0) (0.4.6)\n", - "Requirement already satisfied: attrs>=22.2.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (23.2.0)\n", - "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (2023.12.1)\n", - "Requirement already satisfied: referencing>=0.28.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (0.35.1)\n", - "Requirement already satisfied: rpds-py>=0.7.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema<5.0.0,>=4.22.0->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (0.18.1)\n", - "Requirement already satisfied: fqdn in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.5.1)\n", - "Requirement already satisfied: idna in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (3.7)\n", - "Requirement already satisfied: isoduration in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (20.11.0)\n", - "Requirement already satisfied: jsonpointer>1.13 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (2.4)\n", - "Requirement already satisfied: rfc3339-validator in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (0.1.4)\n", - "Requirement already satisfied: rfc3987 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.3.8)\n", - "Requirement already satisfied: uri-template in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.3.0)\n", - "Requirement already satisfied: webcolors>=1.11 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (24.6.0)\n", - "Requirement already satisfied: cryptography!=3.4.0,>=3.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from jwt<2.0.0,>=1.3.1->guardrails-ai==0.5.0a0) (42.0.8)\n", - "Requirement already satisfied: PyYAML>=5.3 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (6.0.1)\n", - "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (1.33)\n", - "Requirement already satisfied: langsmith<0.2.0,>=0.1.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (0.1.75)\n", - "Requirement already satisfied: packaging<24.0,>=23.2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (23.2)\n", - "Requirement already satisfied: click in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from nltk<4.0.0,>=3.8.1->guardrails-ai==0.5.0a0) (8.1.7)\n", - "Requirement already satisfied: joblib in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from nltk<4.0.0,>=3.8.1->guardrails-ai==0.5.0a0) (1.4.2)\n", - "Requirement already satisfied: tqdm in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from nltk<4.0.0,>=3.8.1->guardrails-ai==0.5.0a0) (4.66.4)\n", - "Requirement already satisfied: anyio<5,>=3.5.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (4.4.0)\n", - "Requirement already satisfied: distro<2,>=1.7.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (1.9.0)\n", - "Requirement already satisfied: httpx<1,>=0.23.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (0.27.0)\n", - "Requirement already satisfied: sniffio in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (1.3.1)\n", - "Requirement already satisfied: deprecated>=1.2.6 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.2.14)\n", - "Requirement already satisfied: googleapis-common-protos~=1.52 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.63.1)\n", - "Requirement already satisfied: grpcio<2.0.0,>=1.0.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.64.1)\n", - "Requirement already satisfied: opentelemetry-api~=1.15 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.25.0)\n", - "Requirement already satisfied: opentelemetry-exporter-otlp-proto-common==1.25.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.25.0)\n", - "Requirement already satisfied: opentelemetry-proto==1.25.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.25.0)\n", - "Requirement already satisfied: protobuf<5.0,>=3.19 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-proto==1.25.0->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (4.25.3)\n", - "Requirement already satisfied: opentelemetry-semantic-conventions==0.46b0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-sdk<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (0.46b0)\n", - "Requirement already satisfied: importlib-metadata<=7.1,>=6.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from opentelemetry-api~=1.15->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (6.11.0)\n", - "Requirement already satisfied: annotated-types>=0.4.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from pydantic<3.0,>=2.0.0->guardrails-ai==0.5.0a0) (0.7.0)\n", - "Requirement already satisfied: pydantic-core==2.18.4 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from pydantic<3.0,>=2.0.0->guardrails-ai==0.5.0a0) (2.18.4)\n", - "Requirement already satisfied: six>=1.5 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from python-dateutil<3.0.0,>=2.8.2->guardrails-ai==0.5.0a0) (1.16.0)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->guardrails-ai==0.5.0a0) (3.3.2)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->guardrails-ai==0.5.0a0) (2.2.1)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from requests<3.0.0,>=2.31.0->guardrails-ai==0.5.0a0) (2024.6.2)\n", - "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from rich<14.0.0,>=13.6.0->guardrails-ai==0.5.0a0) (3.0.0)\n", - "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from rich<14.0.0,>=13.6.0->guardrails-ai==0.5.0a0) (2.18.0)\n", - "Requirement already satisfied: shellingham<2.0.0,>=1.3.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from typer[all]<0.10.0,>=0.9.0->guardrails-ai==0.5.0a0) (1.5.4)\n", - "Requirement already satisfied: cffi>=1.12 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from cryptography!=3.4.0,>=3.1->jwt<2.0.0,>=1.3.1->guardrails-ai==0.5.0a0) (1.16.0)\n", - "Requirement already satisfied: wrapt<2,>=1.10 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from deprecated>=1.2.6->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (1.16.0)\n", - "Requirement already satisfied: httpcore==1.* in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from httpx<1,>=0.23.0->openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (1.0.5)\n", - "Requirement already satisfied: h11<0.15,>=0.13 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai<2.0.0,>=1.30.1->guardrails-ai==0.5.0a0) (0.14.0)\n", - "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from langsmith<0.2.0,>=0.1.0->langchain-core<0.3,>=0.1->guardrails-ai==0.5.0a0) (3.10.3)\n", - "Requirement already satisfied: mdurl~=0.1 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich<14.0.0,>=13.6.0->guardrails-ai==0.5.0a0) (0.1.2)\n", - "Requirement already satisfied: arrow>=0.15.0 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from isoduration->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (1.3.0)\n", - "Requirement already satisfied: types-python-dateutil>=2.8.10 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from arrow>=0.15.0->isoduration->jsonschema[format]<5.0.0,>=4.22.0->guardrails-ai==0.5.0a0) (2.9.0.20240316)\n", - "Requirement already satisfied: pycparser in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from cffi>=1.12->cryptography!=3.4.0,>=3.1->jwt<2.0.0,>=1.3.1->guardrails-ai==0.5.0a0) (2.22)\n", - "Requirement already satisfied: zipp>=0.5 in /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages (from importlib-metadata<=7.1,>=6.0->opentelemetry-api~=1.15->opentelemetry-exporter-otlp-proto-grpc<2.0.0,>=1.24.0->guardrails-ai==0.5.0a0) (3.19.2)\n", - "Building wheels for collected packages: guardrails-ai\n", - " Building wheel for guardrails-ai (pyproject.toml) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for guardrails-ai: filename=guardrails_ai-0.5.0a0-py3-none-any.whl size=163530 sha256=e3354c1d4c2f745a223dc94bc97a709a16c604de0fdea50a0ee6197d21684e94\n", - " Stored in directory: /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-ephem-wheel-cache-foj8x5cg/wheels/0f/8f/ce/e2e709435a6a68a64a5881ac3a372e244e6be200fe15abe181\n", - "Successfully built guardrails-ai\n", - "Installing collected packages: guardrails-ai\n", - " Attempting uninstall: guardrails-ai\n", - " Found existing installation: guardrails-ai 0.5.0a1\n", - " Uninstalling guardrails-ai-0.5.0a1:\n", - " Successfully uninstalled guardrails-ai-0.5.0a1\n", - "Successfully installed guardrails-ai-0.5.0a0\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "%pip install git+https://github.com/guardrails-ai/guardrails.git@start-cmd\n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Installing hub:\u001b[35m/\u001b[0m\u001b[35m/guardrails/\u001b[0m\u001b[95mcompetitor_check...\u001b[0m\n", - "\u001b[2K\u001b[32m[ ]\u001b[0m Fetching manifestst\n", - "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependenciespendencies Running command git clone --filter=blob:none --quiet https://github.com/guardrails-ai/competitor_check.git /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-ahvuhd83\n", - "\u001b[2K\u001b[32m[ ==]\u001b[0m Downloading dependencies\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/competitor_check/competitor_check-0.0.0.dist-info already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/competitor_check/validator already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", - "\u001b[2K\u001b[32m[=== ]\u001b[0m Downloading dependencies\n", - "\u001b[2K\u001b[32m[= ]\u001b[0m Running post-install setuptall setup\n", - "\u001b[1A\u001b[2K✅Successfully installed guardrails/competitor_check!\n", - "\n", - "\n", - "\u001b[1mImport validator:\u001b[0m\n", - "from guardrails.hub import CompetitorCheck\n", - "\n", - "\u001b[1mGet more info:\u001b[0m\n", - "\u001b[4;94mhttps://hub.guardrailsai.com/validator/guardrails/competitor_check\u001b[0m\n", - "\n" - ] - } - ], - "source": [ - "!guardrails hub install hub://guardrails/competitor_check" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Installing hub:\u001b[35m/\u001b[0m\u001b[35m/guardrails/\u001b[0m\u001b[95mdetect_pii...\u001b[0m\n", - "\u001b[2K\u001b[32m[ ===]\u001b[0m Fetching manifestst\n", - "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependenciespendencies Running command git clone --filter=blob:none --quiet https://github.com/guardrails-ai/detect_pii.git /private/var/folders/r3/921_1z6s2bz25bcx9898xpz40000gn/T/pip-req-build-k7hpb_4n\n", - "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependencies\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/detect_pii/validator already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[33mWARNING: Target directory /Users/nicholaschen/guardrails-api/.venv/lib/python3.11/site-packages/guardrails/hub/guardrails/detect_pii/detect_pii-0.0.0.dist-info already exists. Specify --upgrade to force replacement.\u001b[0m\u001b[33m\n", - "\u001b[2K\u001b[32m[= ]\u001b[0m Downloading dependencies\n", - "\u001b[2K\u001b[32m[ ==]\u001b[0m Running post-install setuptall setup\n", - "\u001b[1A\u001b[2K✅Successfully installed guardrails/detect_pii!\n", - "\n", - "\n", - "\u001b[1mImport validator:\u001b[0m\n", - "from guardrails.hub import DetectPII\n", - "\n", - "\u001b[1mGet more info:\u001b[0m\n", - "\u001b[4;94mhttps://hub.guardrailsai.com/validator/guardrails/detect_pii\u001b[0m\n", - "\n" - ] - } - ], - "source": [ - "!guardrails hub install hub://guardrails/detect_pii" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mUsage: \u001b[0mguardrails start [OPTIONS]\n", - "\u001b[2mTry \u001b[0m\u001b[2;34m'guardrails start \u001b[0m\u001b[1;2;34m-\u001b[0m\u001b[1;2;34m-help\u001b[0m\u001b[2;34m'\u001b[0m\u001b[2m for help.\u001b[0m\n", - "\u001b[31m╭─\u001b[0m\u001b[31m Error \u001b[0m\u001b[31m─────────────────────────────────────────────────────────────────────\u001b[0m\u001b[31m─╮\u001b[0m\n", - "\u001b[31m│\u001b[0m No such option: \u001b[1;36m-\u001b[0m\u001b[1;36m-port\u001b[0m \u001b[31m│\u001b[0m\n", - "\u001b[31m╰──────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n" - ] - } - ], - "source": [ - "!echo \"\" | guardrails start --env .env --config ./config.py" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From cee27aaa6ce3c4d2ec1fd950ff23cfee0fb75fa9 Mon Sep 17 00:00:00 2001 From: Nicholas Chen Date: Tue, 25 Jun 2024 16:37:55 -0400 Subject: [PATCH 14/14] port --- guardrails_api/start | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guardrails_api/start b/guardrails_api/start index 63ab3f7..793fc4a 100755 --- a/guardrails_api/start +++ b/guardrails_api/start @@ -3,7 +3,7 @@ export PYTHONUNBUFFERED=1 export LOGLEVEL="INFO" export GUARDRAILS_LOG_LEVEL="INFO" export GUARDRAILS_PROCESS_COUNT=1 -export SELF_ENDPOINT=http://localhost:8001 +export SELF_ENDPOINT=http://localhost:8000 export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES -gunicorn --bind 0.0.0.0:8001 --timeout=5 --threads=10 "guardrails_api.app:create_app()" +gunicorn --bind 0.0.0.0:8000 --timeout=5 --threads=10 "guardrails_api.app:create_app()"